diff --git a/build.gradle b/build.gradle index 12aba16..211ae64 100644 --- a/build.gradle +++ b/build.gradle @@ -47,6 +47,8 @@ dependencies { implementation 'com.squareup.okhttp3:okhttp-urlconnection:4.12.+' implementation 'org.slf4j:slf4j-nop:1.7.36' implementation 'commons-io:commons-io:2.11.0' + testImplementation 'org.junit.jupiter:junit-jupiter:5.7.+' + testRuntimeOnly 'org.junit.platform:junit-platform-launcher' } application { @@ -70,3 +72,13 @@ pmd { ruleSetFiles = files("rulesets/java-sheepit.xml") ruleSets = [] } + +tasks.named('test', Test) { + useJUnitPlatform() + + maxHeapSize = '1G' + + testLogging { + events "passed" + } +} diff --git a/src/main/java/com/sheepit/client/rendering/RenderOutput.java b/src/main/java/com/sheepit/client/rendering/RenderOutput.java index 996cee6..3b3ef57 100644 --- a/src/main/java/com/sheepit/client/rendering/RenderOutput.java +++ b/src/main/java/com/sheepit/client/rendering/RenderOutput.java @@ -32,6 +32,8 @@ import lombok.Data; private long fullImageSize = 0; private float speedSamplesRendered = 0; // only used for powerdetection project + private boolean isReadBlendLineLogged = false; // Only look for Color management: AFTER "Read blend: " line was detected + private String blenderShortVersion; private String blenderLongVersion; @@ -43,7 +45,10 @@ import lombok.Data; // 07-04 07:43:12 (debug) /tmp///rend.exe: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.28' not found (required by /tmp///lib/libboost_filesystem.so.1.80.0) return Error.Type.OS_NOT_SUPPORTED; } - else if (line.contains("Color management:")) { + else if (line.contains("Read blend:")) { // Only look for Color management: AFTER "Read blend: PATH" was detected + isReadBlendLineLogged = true; + } + else if (isReadBlendLineLogged && line.contains("Color management:")) { String[] errors = { " not found", " is not compatible ", diff --git a/src/test/java/RenderOutputTest.java b/src/test/java/RenderOutputTest.java new file mode 100644 index 0000000..7238eb2 --- /dev/null +++ b/src/test/java/RenderOutputTest.java @@ -0,0 +1,46 @@ +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.fail; + +import com.sheepit.client.datamodel.client.Error; +import com.sheepit.client.rendering.RenderOutput; +import org.junit.jupiter.api.Test; + +import java.io.IOException; +import java.net.URISyntaxException; +import java.net.URL; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.stream.Stream; + +public class RenderOutputTest { + + @Test public void testColorManagementDetectionRightPathOCIO() throws IOException, URISyntaxException { + RenderOutput renderOutput = new RenderOutput(); + + URL file = getClass().getResource("/color_management_detection_right_path_ocio.log"); + if (file == null) { + fail("no data"); + } + + Stream lines = Files.lines(Paths.get(file.toURI())); + lines.forEach(line -> assertEquals(Error.Type.OK, renderOutput.detectError(line))); + } + + @Test public void testColorManagementDetectionWrongPathOCIO() throws IOException, URISyntaxException { + RenderOutput renderOutput = new RenderOutput(); + + URL file = getClass().getResource("/color_management_detection_wrong_path_ocio.log"); + if (file == null) { + fail("no data"); + } + + Stream lines = Files.lines(Paths.get(file.toURI())); + lines.forEach(line -> { + Error.Type ret = renderOutput.detectError(line); + if (ret != Error.Type.OK) { + assertEquals(Error.Type.COLOR_MANAGEMENT_ERROR, ret); + } + }); + } + +} diff --git a/src/test/resources/color_management_detection_right_path_ocio.log b/src/test/resources/color_management_detection_right_path_ocio.log new file mode 100644 index 0000000..53d6269 --- /dev/null +++ b/src/test/resources/color_management_detection_right_path_ocio.log @@ -0,0 +1,49 @@ +Blender 4.3.0 (hash 2b18cad88b13 built 2024-11-19 10:50:58) +Color management: Using /tmp/OCIO/config.ocio as a configuration file +Color management: display "sRGB" used by scene not found, setting to default ("ACES"). +Color management: scene view "AgX" not found, setting default "sRGB". +Color management: sequencer colorspace "sRGB" not found, will use default instead. +Read blend: "/tmp/aces.blend" +Fra:300 Mem:10.55M (Peak 11.13M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Synchronizing object | Cube +Fra:300 Mem:10.55M (Peak 11.13M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Initializing +Fra:300 Mem:10.37M (Peak 11.13M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Waiting for render to start +Fra:300 Mem:10.37M (Peak 11.13M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Loading render kernels (may take a few minutes the first time) +Fra:300 Mem:10.37M (Peak 11.13M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Updating Scene +Fra:300 Mem:10.37M (Peak 11.13M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Updating Shaders +Fra:300 Mem:10.45M (Peak 11.13M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Updating Procedurals +Fra:300 Mem:10.45M (Peak 11.13M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Updating Background +Fra:300 Mem:10.45M (Peak 11.13M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Updating Camera +Fra:300 Mem:10.45M (Peak 11.13M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Updating Meshes Flags +Fra:300 Mem:10.45M (Peak 11.13M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Updating Objects +Fra:300 Mem:10.45M (Peak 11.13M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Updating Objects | Copying Transformations to device +Fra:300 Mem:10.45M (Peak 11.13M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Updating Objects | Applying Static Transformations +Fra:300 Mem:10.45M (Peak 11.13M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Updating Particle Systems +Fra:300 Mem:10.45M (Peak 11.13M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Updating Particle Systems | Copying Particles to device +Fra:300 Mem:10.45M (Peak 11.13M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Updating Meshes +Fra:300 Mem:10.45M (Peak 11.13M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Updating Mesh | Computing attributes +Fra:300 Mem:10.45M (Peak 11.13M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Updating Mesh | Copying Attributes to device +Fra:300 Mem:10.45M (Peak 11.13M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Updating Scene BVH | Building +Fra:300 Mem:10.45M (Peak 11.13M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Updating Scene BVH | Building BVH +Fra:300 Mem:10.45M (Peak 11.13M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Updating Scene BVH | Building BVH 0% +Fra:300 Mem:10.45M (Peak 11.13M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Updating Scene BVH | Copying BVH to device +Fra:300 Mem:10.45M (Peak 11.13M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Updating Mesh | Computing normals +Fra:300 Mem:10.45M (Peak 11.13M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Updating Mesh | Copying Mesh to device +Fra:300 Mem:10.45M (Peak 11.13M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Updating Objects Flags +Fra:300 Mem:10.45M (Peak 11.13M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Updating Primitive Offsets +Fra:300 Mem:10.45M (Peak 11.13M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Updating Images +Fra:300 Mem:10.45M (Peak 11.13M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Updating Camera Volume +Fra:300 Mem:10.45M (Peak 11.13M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Updating Lookup Tables +Fra:300 Mem:10.45M (Peak 11.13M) | Time:00:00.00 | Mem:0.08M, Peak:0.08M | Scene, ViewLayer | Updating Lights +Fra:300 Mem:10.45M (Peak 11.13M) | Time:00:00.00 | Mem:0.08M, Peak:0.08M | Scene, ViewLayer | Updating Lights | Computing tree +Fra:300 Mem:10.45M (Peak 11.13M) | Time:00:00.00 | Mem:0.08M, Peak:0.08M | Scene, ViewLayer | Updating Integrator +Fra:300 Mem:10.45M (Peak 11.13M) | Time:00:00.00 | Mem:0.08M, Peak:0.08M | Scene, ViewLayer | Updating Film +Fra:300 Mem:10.46M (Peak 11.13M) | Time:00:00.00 | Mem:0.00M, Peak:0.08M | Scene, ViewLayer | Updating Lookup Tables +Fra:300 Mem:10.46M (Peak 11.13M) | Time:00:00.00 | Mem:0.09M, Peak:0.09M | Scene, ViewLayer | Updating Baking +Fra:300 Mem:10.46M (Peak 11.13M) | Time:00:00.00 | Mem:0.09M, Peak:0.09M | Scene, ViewLayer | Updating Device | Writing constant memory +Fra:300 Mem:10.46M (Peak 11.13M) | Time:00:00.00 | Mem:0.09M, Peak:0.09M | Scene, ViewLayer | Loading denoising kernels (may take a few minutes the first time) +Fra:300 Mem:10.46M (Peak 11.13M) | Time:00:00.00 | Mem:0.09M, Peak:0.09M | Scene, ViewLayer | Sample 0/10 +Fra:300 Mem:121.23M (Peak 121.23M) | Time:00:00.19 | Remaining:00:01.69 | Mem:110.83M, Peak:110.83M | Scene, ViewLayer | Sample 1/10 +Fra:300 Mem:184.51M (Peak 279.44M) | Time:00:08.61 | Mem:110.83M, Peak:110.83M | Scene, ViewLayer | Sample 10/10 +Fra:300 Mem:184.51M (Peak 279.44M) | Time:00:08.61 | Mem:110.83M, Peak:110.83M | Scene, ViewLayer | Finished +Saved: '/tmp/0300.png' +Time: 00:08.95 (Saving: 00:00.34) diff --git a/src/test/resources/color_management_detection_wrong_path_ocio.log b/src/test/resources/color_management_detection_wrong_path_ocio.log new file mode 100644 index 0000000..bc99161 --- /dev/null +++ b/src/test/resources/color_management_detection_wrong_path_ocio.log @@ -0,0 +1,49 @@ +Blender 4.3.0 (hash 2b18cad88b13 built 2024-11-19 10:50:58) +OpenColorIO Error: Error could not read '/tmp/OCIO/config2.ocio' OCIO profile. +Read blend: "/tmp/aces.blend" +Color management: display "ACES" used by scene not found, setting to default ("sRGB"). +Color management: scene view "P3-D65 ST2084 1000 nits" not found, setting default "Standard". +Color management: sequencer colorspace "vlog_vgamut" not found, will use default instead. +Fra:300 Mem:10.35M (Peak 11.27M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Synchronizing object | Cube +Fra:300 Mem:10.35M (Peak 11.27M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Initializing +Fra:300 Mem:10.18M (Peak 11.27M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Waiting for render to start +Fra:300 Mem:10.18M (Peak 11.27M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Loading render kernels (may take a few minutes the first time) +Fra:300 Mem:10.18M (Peak 11.27M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Updating Scene +Fra:300 Mem:10.18M (Peak 11.27M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Updating Shaders +Fra:300 Mem:10.26M (Peak 11.27M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Updating Procedurals +Fra:300 Mem:10.26M (Peak 11.27M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Updating Background +Fra:300 Mem:10.26M (Peak 11.27M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Updating Camera +Fra:300 Mem:10.26M (Peak 11.27M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Updating Meshes Flags +Fra:300 Mem:10.26M (Peak 11.27M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Updating Objects +Fra:300 Mem:10.26M (Peak 11.27M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Updating Objects | Copying Transformations to device +Fra:300 Mem:10.26M (Peak 11.27M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Updating Objects | Applying Static Transformations +Fra:300 Mem:10.26M (Peak 11.27M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Updating Particle Systems +Fra:300 Mem:10.26M (Peak 11.27M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Updating Particle Systems | Copying Particles to device +Fra:300 Mem:10.26M (Peak 11.27M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Updating Meshes +Fra:300 Mem:10.26M (Peak 11.27M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Updating Mesh | Computing attributes +Fra:300 Mem:10.26M (Peak 11.27M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Updating Mesh | Copying Attributes to device +Fra:300 Mem:10.26M (Peak 11.27M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Updating Scene BVH | Building +Fra:300 Mem:10.26M (Peak 11.27M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Updating Scene BVH | Building BVH +Fra:300 Mem:10.26M (Peak 11.27M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Updating Scene BVH | Building BVH 0% +Fra:300 Mem:10.26M (Peak 11.27M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Updating Scene BVH | Copying BVH to device +Fra:300 Mem:10.26M (Peak 11.27M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Updating Mesh | Computing normals +Fra:300 Mem:10.26M (Peak 11.27M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Updating Mesh | Copying Mesh to device +Fra:300 Mem:10.26M (Peak 11.27M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Updating Objects Flags +Fra:300 Mem:10.26M (Peak 11.27M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Updating Primitive Offsets +Fra:300 Mem:10.26M (Peak 11.27M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Updating Images +Fra:300 Mem:10.26M (Peak 11.27M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Updating Camera Volume +Fra:300 Mem:10.26M (Peak 11.27M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Updating Lookup Tables +Fra:300 Mem:10.26M (Peak 11.27M) | Time:00:00.00 | Mem:0.08M, Peak:0.08M | Scene, ViewLayer | Updating Lights +Fra:300 Mem:10.26M (Peak 11.27M) | Time:00:00.00 | Mem:0.08M, Peak:0.08M | Scene, ViewLayer | Updating Lights | Computing tree +Fra:300 Mem:10.26M (Peak 11.27M) | Time:00:00.00 | Mem:0.08M, Peak:0.08M | Scene, ViewLayer | Updating Integrator +Fra:300 Mem:10.26M (Peak 11.27M) | Time:00:00.00 | Mem:0.08M, Peak:0.08M | Scene, ViewLayer | Updating Film +Fra:300 Mem:10.27M (Peak 11.27M) | Time:00:00.00 | Mem:0.00M, Peak:0.08M | Scene, ViewLayer | Updating Lookup Tables +Fra:300 Mem:10.27M (Peak 11.27M) | Time:00:00.00 | Mem:0.09M, Peak:0.09M | Scene, ViewLayer | Updating Baking +Fra:300 Mem:10.27M (Peak 11.27M) | Time:00:00.00 | Mem:0.09M, Peak:0.09M | Scene, ViewLayer | Updating Device | Writing constant memory +Fra:300 Mem:10.27M (Peak 11.27M) | Time:00:00.00 | Mem:0.09M, Peak:0.09M | Scene, ViewLayer | Loading denoising kernels (may take a few minutes the first time) +Fra:300 Mem:10.27M (Peak 11.27M) | Time:00:00.00 | Mem:0.09M, Peak:0.09M | Scene, ViewLayer | Sample 0/10 +Fra:300 Mem:121.04M (Peak 121.04M) | Time:00:00.14 | Remaining:00:01.28 | Mem:110.83M, Peak:110.83M | Scene, ViewLayer | Sample 1/10 +Fra:300 Mem:184.32M (Peak 279.24M) | Time:00:08.53 | Mem:110.83M, Peak:110.83M | Scene, ViewLayer | Sample 10/10 +Fra:300 Mem:184.32M (Peak 279.24M) | Time:00:08.53 | Mem:110.83M, Peak:110.83M | Scene, ViewLayer | Finished +Saved: '/tmp/0300.png' +Time: 00:08.69 (Saving: 00:00.16)