--- old/test/jdk/jdk/nio/zipfs/jarfs/MultiReleaseJarTest.java 2019-09-23 18:40:44.000000000 -0400 +++ new/test/jdk/jdk/nio/zipfs/jarfs/MultiReleaseJarTest.java 2019-09-23 18:40:44.000000000 -0400 @@ -23,7 +23,7 @@ /* * @test - * @bug 8144355 8144062 8176709 8194070 8193802 + * @bug 8144355 8144062 8176709 8194070 8193802 8231093 * @summary Test aliasing additions to ZipFileSystem for multi-release jar files * @library /lib/testlibrary/java/util/jar * @modules jdk.compiler @@ -88,8 +88,7 @@ public Object[][] createStrings() { return new Object[][]{ {"runtime", MAJOR_VERSION}, - {"-20", 8}, - {"0", 8}, + {null, 8}, {"8", 8}, {"9", 9}, {Integer.toString(MAJOR_VERSION), MAJOR_VERSION}, @@ -101,8 +100,7 @@ @DataProvider(name="integers") public Object[][] createIntegers() { return new Object[][] { - {Integer.valueOf(-5), 8}, - {Integer.valueOf(0), 8}, + {null, 8}, {Integer.valueOf(8), 8}, {Integer.valueOf(9), 9}, {Integer.valueOf(MAJOR_VERSION), MAJOR_VERSION}, @@ -114,6 +112,7 @@ @DataProvider(name="versions") public Object[][] createVersions() { return new Object[][] { + {null, 8}, {Version.parse("8"), 8}, {Version.parse("9"), 9}, {Version.parse(Integer.toString(MAJOR_VERSION)), MAJOR_VERSION}, @@ -122,6 +121,19 @@ }; } + @DataProvider(name="invalidVersions") + public Object[][] invalidVersions() { + return new Object[][] { + {Map.of("releaseVersion", "")}, + {Map.of("releaseVersion", "invalid")}, + {Map.of("releaseVersion", "0")}, + {Map.of("releaseVersion", "-1")}, + {Map.of("releaseVersion", "11.0.1")}, + {Map.of("releaseVersion",Integer.valueOf(0))}, + {Map.of("releaseVersion",Integer.valueOf(-1))} + }; + } + // Not the best test but all I can do since ZipFileSystem and JarFileSystem // are not public, so I can't use (fs instanceof ...) @Test @@ -131,7 +143,7 @@ try (FileSystem fs = FileSystems.newFileSystem(mruri, env)) { Assert.assertTrue(readAndCompare(fs, 8)); } - env.put("multi-release", "runtime"); + env.put("releaseVersion", "runtime"); // a configuration and jar file is multi-release try (FileSystem fs = FileSystems.newFileSystem(mruri, env)) { Assert.assertTrue(readAndCompare(fs, MAJOR_VERSION)); @@ -150,30 +162,67 @@ @Test(dataProvider="strings") public void testStrings(String value, int expected) throws Throwable { - stringEnv.put("multi-release", value); + stringEnv.put("releaseVersion", value); runTest(stringEnv, expected); } @Test(dataProvider="integers") public void testIntegers(Integer value, int expected) throws Throwable { - integerEnv.put("multi-release", value); + integerEnv.put("releaseVersion", value); runTest(integerEnv, expected); } @Test(dataProvider="versions") public void testVersions(Version value, int expected) throws Throwable { - versionEnv.put("multi-release", value); + versionEnv.put("releaseVersion", value); runTest(versionEnv, expected); } @Test public void testShortJar() throws Throwable { - integerEnv.put("multi-release", Integer.valueOf(MAJOR_VERSION)); + integerEnv.put("releaseVersion", Integer.valueOf(MAJOR_VERSION)); runTest(smruri, integerEnv, MAJOR_VERSION); - integerEnv.put("multi-release", Integer.valueOf(9)); + integerEnv.put("releaseVersion", Integer.valueOf(9)); runTest(smruri, integerEnv, 8); } + /** + * Validate that an invalid value for the "releaseVersion" property throws + * an {@code IllegalArgumentException} + * @param env Zip FS map + * @throws Throwable Exception thrown for anything other than the expected + * IllegalArgumentException + */ + @Test(dataProvider="invalidVersions") + public void testInvalidVersions(Map env) throws Throwable { + Assert.assertThrows(IllegalArgumentException.class, () -> + FileSystems.newFileSystem(Path.of(userdir, + "multi-release.jar"), env)); + } + + // The following tests are for backwards compatibility to validate that + // the original property still works + @Test(dataProvider="strings") + public void testMRStrings(String value, int expected) throws Throwable { + stringEnv.clear(); + stringEnv.put("multi-release", value); + runTest(stringEnv, expected); + } + + @Test(dataProvider="integers") + public void testMRIntegers(Integer value, int expected) throws Throwable { + integerEnv.clear(); + integerEnv.put("multi-release", value); + runTest(integerEnv, expected); + } + + @Test(dataProvider="versions") + public void testMRVersions(Version value, int expected) throws Throwable { + versionEnv.clear(); + versionEnv.put("multi-release", value); + runTest(versionEnv, expected); + } + private void runTest(Map env, int expected) throws Throwable { runTest(mruri, env, expected); } @@ -213,7 +262,7 @@ JarBuilder jb = new JarBuilder(jfname); jb.addAttribute("Multi-Release", "true"); jb.build(); - Map env = Map.of("multi-release", "runtime"); + Map env = Map.of("releaseVersion", "runtime"); try (FileSystem fs = FileSystems.newFileSystem(uri, env)) { Assert.assertTrue(true); } @@ -228,7 +277,7 @@ creator.buildCustomMultiReleaseJar(fileName, value, Map.of(), /*addEntries*/true); - Map env = Map.of("multi-release", "runtime"); + Map env = Map.of("releaseVersion", "runtime"); Path filePath = Paths.get(userdir, fileName); String ssp = filePath.toUri().toString(); URI customJar = new URI("jar", ssp , null);