From e816aa83e0b608559be57b5570259916214a75a8 Mon Sep 17 00:00:00 2001 From: Carlos Amengual Date: Wed, 19 Jun 2024 19:53:40 +0200 Subject: [PATCH] Tests: fix permission tests, finer-grained exclusions via 'SecMan' tag --- echosvg-test/build.gradle | 9 +-- .../echosvg/apps/rasterizer/MainTest.java | 2 + .../sf/carte/echosvg/bridge/EcmaLoadTest.java | 2 + .../carte/echosvg/bridge/EcmaNoLoadTest.java | 2 + .../sf/carte/echosvg/bridge/JarLoadTest.java | 2 + .../carte/echosvg/bridge/JarNoLoadTest.java | 2 + .../echosvg/bridge/LoadPermissionsTest.java | 57 +++++++++---------- .../carte/echosvg/bridge/PermissionsTest.java | 3 + .../carte/echosvg/script/rhino/RhinoTest.java | 2 + .../error/clipPath-clipPathUnits-invalid.svg | 6 +- .../echosvg/bridge/error/clipPath-empty.svg | 6 +- .../error/clipPath-subelement-invalid.svg | 6 +- .../bridge/error/clipPath-uri-illegal.svg | 6 +- .../echosvg/bridge/error/css-invalid.svg | 9 ++- .../echosvg/bridge/error/echosvgMark.svg | 6 +- .../bridge/error/ellipse-missing-rx.svg | 6 +- .../bridge/error/ellipse-missing-ry.svg | 6 +- .../bridge/error/ellipse-negative-rx.svg | 6 +- .../bridge/error/ellipse-negative-ry.svg | 6 +- .../error/feColorMatrix-type-invalid.svg | 6 +- .../error/feColorMatrix-value-invalid.svg | 6 +- .../error/feColorMatrix-values-invalid.svg | 6 +- .../feComponentTransfert-type-invalid.svg | 6 +- .../feComponentTransfert-type-missing.svg | 6 +- .../feComponentTransfert-value-invalid.svg | 6 +- .../bridge/error/feComposite-in2-missing.svg | 6 +- .../error/feComposite-operator-invalid.svg | 6 +- ...isplacementMap-channelSelector-invalid.svg | 6 +- .../error/feDisplacementMap-in2-missing.svg | 6 +- .../feGaussianBlur-stdDeviationX-invalid.svg | 6 +- .../feGaussianBlur-stdDeviationY-invalid.svg | 6 +- .../echosvg/bridge/error/feImage-badurl.svg | 6 +- .../error/feMerge-feMergeNode-invalid.svg | 9 ++- .../error/feMorphology-operator-invalid.svg | 6 +- .../error/feMorphology-radiusX-negative.svg | 6 +- .../error/feMorphology-radiusY-negative.svg | 6 +- .../feTurbulence-stitchTiles.invalid.svg | 6 +- .../error/feTurbulence-type-invalid.svg | 6 +- .../echosvg/bridge/error/filter-empty.svg | 9 ++- .../error/filter-filterPrimitive-invalid.svg | 9 ++- .../error/filter-filterResX-negative.svg | 6 +- .../error/filter-filterResY-negative.svg | 6 +- .../error/filter-filterUnits-invalid.svg | 6 +- .../bridge/error/filter-uri-illegal.svg | 6 +- .../echosvg/bridge/error/image-badurl.svg | 9 ++- .../bridge/error/image-missing-height.svg | 6 +- .../bridge/error/image-missing-width.svg | 6 +- .../bridge/error/image-negative-height.svg | 6 +- .../bridge/error/image-negative-width.svg | 6 +- .../bridge/error/linearGradient-empty.svg | 9 ++- .../linearGradient-gradientUnits-invalid.svg | 6 +- .../error/linearGradient-missing-offset.svg | 9 ++- .../linearGradient-spreadMethod-invalid.svg | 6 +- .../error/linearGradient-uri-invalid.svg | 6 +- .../carte/echosvg/bridge/error/mask-empty.svg | 9 ++- .../bridge/error/mask-maskUnits-invalid.svg | 6 +- .../bridge/error/mask-subelement-invalid.svg | 6 +- .../echosvg/bridge/error/mask-uri-illegal.svg | 6 +- .../echosvg/bridge/error/path-invalid-d.svg | 6 +- .../echosvg/bridge/error/pattern-empty.svg | 9 ++- .../error/pattern-patternUnits-invalid.svg | 6 +- .../error/pattern-subelement-invalid.svg | 6 +- .../bridge/error/polygon-invalid-points.svg | 6 +- .../bridge/error/polyline-invalid-points.svg | 6 +- .../bridge/error/radialGradient-empty.svg | 9 ++- .../radialGradient-gradientUnits-invalid.svg | 6 +- .../error/radialGradient-missing-offset.svg | 9 ++- .../error/radialGradient-r-negative.svg | 6 +- .../bridge/error/radialGradient-r-zero.svg | 9 ++- .../radialGradient-spreadMethod-invalid.svg | 6 +- .../io/sf/carte/echosvg/bridge/error/ran.js | 22 +++++++ .../bridge/error/rect-missing-height.svg | 6 +- .../bridge/error/rect-missing-width.svg | 6 +- .../bridge/error/rect-negative-height.svg | 6 +- .../echosvg/bridge/error/rect-negative-rx.svg | 6 +- .../echosvg/bridge/error/rect-negative-ry.svg | 6 +- .../bridge/error/rect-negative-width.svg | 6 +- .../io/sf/carte/echosvg/bridge/error/svg.svg | 4 +- .../carte/echosvg/bridge/error/transform.svg | 6 +- .../echosvg/bridge/error/xml-invalid.svg | 8 ++- 80 files changed, 315 insertions(+), 244 deletions(-) create mode 100644 test-resources/io/sf/carte/echosvg/bridge/error/ran.js diff --git a/echosvg-test/build.gradle b/echosvg-test/build.gradle index 055de42cc..9ec5fc682 100644 --- a/echosvg-test/build.gradle +++ b/echosvg-test/build.gradle @@ -58,12 +58,9 @@ publishing.publications.maven(MavenPublication).pom { } test { - useJUnitPlatform() - - exclude 'io/sf/carte/echosvg/apps/rasterizer/MainTest.class' - exclude 'io/sf/carte/echosvg/bridge/*LoadTest.class' - exclude 'io/sf/carte/echosvg/bridge/*PermissionsTest.class' - exclude 'io/sf/carte/echosvg/script/rhino/RhinoTest.class' + useJUnitPlatform() { + excludeTags 'SecMan' + } // Exclude tests via gradlew test -PexcludeTests="SamplesRenderingTest.testVerticalText,..." if (project.hasProperty('excludeTests')) { diff --git a/echosvg-test/src/test/java/io/sf/carte/echosvg/apps/rasterizer/MainTest.java b/echosvg-test/src/test/java/io/sf/carte/echosvg/apps/rasterizer/MainTest.java index def98cdf5..1309f56a2 100644 --- a/echosvg-test/src/test/java/io/sf/carte/echosvg/apps/rasterizer/MainTest.java +++ b/echosvg-test/src/test/java/io/sf/carte/echosvg/apps/rasterizer/MainTest.java @@ -37,6 +37,7 @@ import java.util.StringTokenizer; import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import io.sf.carte.echosvg.test.TestLocations; @@ -48,6 +49,7 @@ * @author For later modifications, see Git history. * @version $Id$ */ +@Tag("SecMan") @SuppressWarnings({ "deprecation", "removal" }) public class MainTest { diff --git a/echosvg-test/src/test/java/io/sf/carte/echosvg/bridge/EcmaLoadTest.java b/echosvg-test/src/test/java/io/sf/carte/echosvg/bridge/EcmaLoadTest.java index 2addc1a56..df594cc17 100644 --- a/echosvg-test/src/test/java/io/sf/carte/echosvg/bridge/EcmaLoadTest.java +++ b/echosvg-test/src/test/java/io/sf/carte/echosvg/bridge/EcmaLoadTest.java @@ -23,6 +23,7 @@ import java.security.PrivilegedExceptionAction; import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; /** @@ -32,6 +33,7 @@ * @author For later modifications, see Git history. * @version $Id$ */ +@Tag("SecMan") @SuppressWarnings({ "deprecation", "removal" }) public class EcmaLoadTest { diff --git a/echosvg-test/src/test/java/io/sf/carte/echosvg/bridge/EcmaNoLoadTest.java b/echosvg-test/src/test/java/io/sf/carte/echosvg/bridge/EcmaNoLoadTest.java index a58ef062b..8481a1f1c 100644 --- a/echosvg-test/src/test/java/io/sf/carte/echosvg/bridge/EcmaNoLoadTest.java +++ b/echosvg-test/src/test/java/io/sf/carte/echosvg/bridge/EcmaNoLoadTest.java @@ -23,6 +23,7 @@ import java.security.PrivilegedExceptionAction; import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import io.sf.carte.echosvg.test.svg.SVGOnLoadExceptionTest; @@ -34,6 +35,7 @@ * @author For later modifications, see Git history. * @version $Id$ */ +@Tag("SecMan") @SuppressWarnings({ "deprecation", "removal" }) public class EcmaNoLoadTest { diff --git a/echosvg-test/src/test/java/io/sf/carte/echosvg/bridge/JarLoadTest.java b/echosvg-test/src/test/java/io/sf/carte/echosvg/bridge/JarLoadTest.java index 38068aaee..9a4d0f3b7 100644 --- a/echosvg-test/src/test/java/io/sf/carte/echosvg/bridge/JarLoadTest.java +++ b/echosvg-test/src/test/java/io/sf/carte/echosvg/bridge/JarLoadTest.java @@ -23,6 +23,7 @@ import java.security.PrivilegedExceptionAction; import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; /** @@ -32,6 +33,7 @@ * @author For later modifications, see Git history. * @version $Id$ */ +@Tag("SecMan") @SuppressWarnings({ "deprecation", "removal" }) public class JarLoadTest { diff --git a/echosvg-test/src/test/java/io/sf/carte/echosvg/bridge/JarNoLoadTest.java b/echosvg-test/src/test/java/io/sf/carte/echosvg/bridge/JarNoLoadTest.java index 18bbde77a..e34a9073b 100644 --- a/echosvg-test/src/test/java/io/sf/carte/echosvg/bridge/JarNoLoadTest.java +++ b/echosvg-test/src/test/java/io/sf/carte/echosvg/bridge/JarNoLoadTest.java @@ -18,6 +18,7 @@ */ package io.sf.carte.echosvg.bridge; +import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import io.sf.carte.echosvg.test.svg.SVGOnLoadExceptionTest; @@ -29,6 +30,7 @@ * @author For later modifications, see Git history. * @version $Id$ */ +@Tag("SecMan") public class JarNoLoadTest { /* diff --git a/echosvg-test/src/test/java/io/sf/carte/echosvg/bridge/LoadPermissionsTest.java b/echosvg-test/src/test/java/io/sf/carte/echosvg/bridge/LoadPermissionsTest.java index 828868785..9b0ee12d3 100644 --- a/echosvg-test/src/test/java/io/sf/carte/echosvg/bridge/LoadPermissionsTest.java +++ b/echosvg-test/src/test/java/io/sf/carte/echosvg/bridge/LoadPermissionsTest.java @@ -24,6 +24,7 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import io.sf.carte.echosvg.test.svg.SVGOnLoadExceptionTest; @@ -60,6 +61,7 @@ public void testNoEmbed() throws Exception { } @Test + @Tag("SecMan") public void testPermissionsDeniedScript() throws Exception { runTest("application/java-archive", "bridge/ecmaCheckPermissionsDeniedScript", "NONE", true, false, "java.lang.SecurityException"); @@ -98,13 +100,14 @@ public void testBridgeExceptionIllegalClipPathUri() throws Exception { } /* - * This should generate only a warning, according to Batik (bridge/unitTesting.xml) + * This should generate only a warning, see also bridge/unitTesting.xml */ + // FIXME: No exception should be thrown here @Disabled @Test public void testBridgeExceptionInvalidCSS() throws Exception { - runTest("application/java-archive", "bridge/error/css-invalid", "ANY", false, false, - null); + runTest("text/ecmascript", "bridge/error/css-invalid", "ANY", false, false, + "org.w3c.dom.DOMException"); } @Test @@ -205,14 +208,14 @@ public void testBridgeExceptionInvalidGBStdDevY() throws Exception { @Test public void testBridgeExceptionFeImageBadURL() throws Exception { - runTest("application/java-archive", "bridge/error/feImage-badurl", "ANY", false, false, + runTest("text/ecmascript", "bridge/error/feImage-badurl", "ANY", false, false, "io.sf.carte.echosvg.bridge.BridgeException"); } @Test public void testBridgeExceptionInvalidMergeNode() throws Exception { - runTest("application/java-archive", "bridge/error/feMerge-feMergeNode-invalid", "ANY", false, false, - "io.sf.carte.echosvg.bridge.BridgeException"); + runTest("text/ecmascript", "bridge/error/feMerge-feMergeNode-invalid", "ANY", false, false, + null); } @Test @@ -247,14 +250,14 @@ public void testBridgeExceptionInvalidTurbulenceType() throws Exception { @Test public void testBridgeExceptionEmptyFilter() throws Exception { - runTest("application/java-archive", "bridge/error/filter-empty", "ANY", false, false, - "io.sf.carte.echosvg.bridge.BridgeException"); + runTest("text/ecmascript", "bridge/error/filter-empty", "ANY", false, false, + null); } @Test public void testBridgeExceptionInvalidFilterPrimitive() throws Exception { - runTest("application/java-archive", "bridge/error/filter-filterPrimitive-invalid", "ANY", false, false, - "io.sf.carte.echosvg.bridge.BridgeException"); + runTest("text/ecmascript", "bridge/error/filter-filterPrimitive-invalid", "ANY", false, false, + null); } @Test @@ -282,11 +285,12 @@ public void testBridgeExceptionIllegalFilterUri() throws Exception { } // This should display a broken-image image, no exception + // FIXME: No exception should be thrown here @Disabled @Test public void testBridgeExceptionImageBadURL() throws Exception { - runTest("application/java-archive", "bridge/error/image-badurl", "ANY", false, false, - null); + runTest("text/ecmascript", "bridge/error/image-badurl", "ANY", false, false, + "io.sf.carte.echosvg.bridge.BridgeException"); } @Test @@ -313,13 +317,10 @@ public void testBridgeExceptionImageNegativeWidth() throws Exception { "io.sf.carte.echosvg.bridge.BridgeException"); } - /* - * A comment in Batik (bridge/unitTesting.xml) claims that this gives no error there. - */ @Test public void testBridgeExceptionEmptyLinearGradient() throws Exception { - runTest("application/java-archive", "bridge/error/linearGradient-empty", "ANY", false, false, - "io.sf.carte.echosvg.bridge.BridgeException"); + runTest("text/ecmascript", "bridge/error/linearGradient-empty", "ANY", false, false, + null); } @Test @@ -330,8 +331,8 @@ public void testBridgeExceptionInvalidGradientUnits() throws Exception { @Test public void testBridgeExceptionMissingGradientOffset() throws Exception { - runTest("application/java-archive", "bridge/error/linearGradient-missing-offset", "ANY", false, false, - "io.sf.carte.echosvg.bridge.BridgeException"); + runTest("text/ecmascript", "bridge/error/linearGradient-missing-offset", "ANY", false, false, + null); } @Test @@ -348,8 +349,8 @@ public void testBridgeExceptionInvalidGradientUri() throws Exception { @Test public void testBridgeExceptionEmptyMask() throws Exception { - runTest("application/java-archive", "bridge/error/mask-empty", "ANY", false, false, - "io.sf.carte.echosvg.bridge.BridgeException"); + runTest("text/ecmascript", "bridge/error/mask-empty", "ANY", false, false, + null); } @Test @@ -378,8 +379,8 @@ public void testBridgeExceptionInvalidPathD() throws Exception { @Test public void testBridgeExceptionEmptyPattern() throws Exception { - runTest("application/java-archive", "bridge/error/pattern-empty", "ANY", false, false, - "io.sf.carte.echosvg.bridge.BridgeException"); + runTest("text/ecmascript", "bridge/error/pattern-empty", "ANY", false, false, + null); } @Test @@ -407,10 +408,9 @@ public void testBridgeExceptionInvalidPolylinePoints() throws Exception { } // This is not an error according to 13.2.4 - @Disabled @Test public void testBridgeExceptionEmptyRadialGradient() throws Exception { - runTest("application/java-archive", "bridge/error/radialGradient-empty", "ANY", false, false, + runTest("text/ecmascript", "bridge/error/radialGradient-empty", "ANY", false, false, null); } @@ -422,8 +422,8 @@ public void testBridgeExceptionInvalidRadialGradientUnits() throws Exception { @Test public void testBridgeExceptionMissingRadialGradientOffset() throws Exception { - runTest("application/java-archive", "bridge/error/radialGradient-missing-offset", "ANY", false, false, - "io.sf.carte.echosvg.bridge.BridgeException"); + runTest("text/ecmascript", "bridge/error/radialGradient-missing-offset", "ANY", false, false, + null); } @Test @@ -433,10 +433,9 @@ public void testBridgeExceptionRadialGradientRNegative() throws Exception { } // This is not an error according to 13.2.3 - @Disabled @Test public void testBridgeExceptionRadialGradientRZero() throws Exception { - runTest("application/java-archive", "bridge/error/radialGradient-r-zero", "ANY", false, false, + runTest("text/ecmascript", "bridge/error/radialGradient-r-zero", "ANY", false, false, null); } diff --git a/echosvg-test/src/test/java/io/sf/carte/echosvg/bridge/PermissionsTest.java b/echosvg-test/src/test/java/io/sf/carte/echosvg/bridge/PermissionsTest.java index 3044a97d8..b4c443475 100644 --- a/echosvg-test/src/test/java/io/sf/carte/echosvg/bridge/PermissionsTest.java +++ b/echosvg-test/src/test/java/io/sf/carte/echosvg/bridge/PermissionsTest.java @@ -23,6 +23,7 @@ import java.security.PrivilegedExceptionAction; import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; /** @@ -55,6 +56,7 @@ public Void run() throws Exception { * function. Note that scripts loaded with the 'Script()' object are disallowed * completely in secure mode. */ + @Tag("SecMan") @Test public void testECMAPermissionsDenied() throws Exception { String scripts = "text/ecmascript"; @@ -82,6 +84,7 @@ public void testECMAPermissionsGranted() throws Exception { runTest(scripts, scriptSource, scriptOrigin, secure); } + @Tag("SecMan") @Test public void testJarPermissionsDenied() throws Exception { String scripts = "application/java-archive"; diff --git a/echosvg-test/src/test/java/io/sf/carte/echosvg/script/rhino/RhinoTest.java b/echosvg-test/src/test/java/io/sf/carte/echosvg/script/rhino/RhinoTest.java index 89f9fc314..63cc67d62 100644 --- a/echosvg-test/src/test/java/io/sf/carte/echosvg/script/rhino/RhinoTest.java +++ b/echosvg-test/src/test/java/io/sf/carte/echosvg/script/rhino/RhinoTest.java @@ -19,6 +19,7 @@ package io.sf.carte.echosvg.script.rhino; import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; /** @@ -35,6 +36,7 @@ public static void setUpBeforeAll() { } @Test + @Tag("SecMan") public void testECMAPermissionsDenied() throws Exception { runTest("script/rhino/eval", true); } diff --git a/test-resources/io/sf/carte/echosvg/bridge/error/clipPath-clipPathUnits-invalid.svg b/test-resources/io/sf/carte/echosvg/bridge/error/clipPath-clipPathUnits-invalid.svg index adca0517a..e4b65e979 100644 --- a/test-resources/io/sf/carte/echosvg/bridge/error/clipPath-clipPathUnits-invalid.svg +++ b/test-resources/io/sf/carte/echosvg/bridge/error/clipPath-clipPathUnits-invalid.svg @@ -1,6 +1,6 @@ - + - + diff --git a/test-resources/io/sf/carte/echosvg/bridge/error/clipPath-empty.svg b/test-resources/io/sf/carte/echosvg/bridge/error/clipPath-empty.svg index 00f934c77..04ea5b36d 100644 --- a/test-resources/io/sf/carte/echosvg/bridge/error/clipPath-empty.svg +++ b/test-resources/io/sf/carte/echosvg/bridge/error/clipPath-empty.svg @@ -1,6 +1,6 @@ - + - + diff --git a/test-resources/io/sf/carte/echosvg/bridge/error/clipPath-subelement-invalid.svg b/test-resources/io/sf/carte/echosvg/bridge/error/clipPath-subelement-invalid.svg index a7be15ffc..c4a7e1e75 100644 --- a/test-resources/io/sf/carte/echosvg/bridge/error/clipPath-subelement-invalid.svg +++ b/test-resources/io/sf/carte/echosvg/bridge/error/clipPath-subelement-invalid.svg @@ -1,6 +1,6 @@ - + - + diff --git a/test-resources/io/sf/carte/echosvg/bridge/error/clipPath-uri-illegal.svg b/test-resources/io/sf/carte/echosvg/bridge/error/clipPath-uri-illegal.svg index b1e534fa1..b222ffeb8 100644 --- a/test-resources/io/sf/carte/echosvg/bridge/error/clipPath-uri-illegal.svg +++ b/test-resources/io/sf/carte/echosvg/bridge/error/clipPath-uri-illegal.svg @@ -1,6 +1,6 @@ - + - + diff --git a/test-resources/io/sf/carte/echosvg/bridge/error/css-invalid.svg b/test-resources/io/sf/carte/echosvg/bridge/error/css-invalid.svg index 895c93733..16c2b4620 100644 --- a/test-resources/io/sf/carte/echosvg/bridge/error/css-invalid.svg +++ b/test-resources/io/sf/carte/echosvg/bridge/error/css-invalid.svg @@ -1,6 +1,6 @@ - + - + + + +