test/jdk/jdk/nio/zipfs/jarfs/MultiReleaseJarTest.java
author clanger
Fri, 22 Nov 2019 09:25:09 +0100
changeset 59216 47c879f478d2
parent 58467 72ef2c0faf47
permissions -rw-r--r--
8234089: (zipfs) Remove classes JarFileSystemProvider and JarFileSystem Reviewed-by: lancea, alanb
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
34835
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
     1
/*
54641
ff0a691901c9 8223015: Cleanups for zipfs tests
clanger
parents: 50892
diff changeset
     2
 * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved.
34835
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
     4
 *
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
     7
 * published by the Free Software Foundation.
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
     8
 *
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    13
 * accompanied this code).
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    14
 *
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    18
 *
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    21
 * questions.
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    22
 */
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    23
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    24
/*
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    25
 * @test
58467
72ef2c0faf47 8231093: Document the ZIP FS properties noCompression and releaseVersion
lancea
parents: 54641
diff changeset
    26
 * @bug 8144355 8144062 8176709 8194070 8193802 8231093
34835
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    27
 * @summary Test aliasing additions to ZipFileSystem for multi-release jar files
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    28
 * @library /lib/testlibrary/java/util/jar
40531
d1fd060ce6b7 8163126: Fix @modules in some of jdk/* tests
shurailine
parents: 38579
diff changeset
    29
 * @modules jdk.compiler
38579
477f5b3c9973 8157783: Fix module dependencies for /jdk/* tests
mli
parents: 38568
diff changeset
    30
 *          jdk.jartool
477f5b3c9973 8157783: Fix module dependencies for /jdk/* tests
mli
parents: 38568
diff changeset
    31
 *          jdk.zipfs
48768
ac007e4bbf4b 8178342: Missing @modules in jdk/jdk/nio/zipfs
shurailine
parents: 48691
diff changeset
    32
 * @build Compiler JarBuilder CreateMultiReleaseTestJars
ac007e4bbf4b 8178342: Missing @modules in jdk/jdk/nio/zipfs
shurailine
parents: 48691
diff changeset
    33
 * @run testng MultiReleaseJarTest
34835
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    34
 */
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    35
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    36
import java.io.IOException;
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    37
import java.lang.invoke.MethodHandle;
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    38
import java.lang.invoke.MethodHandles;
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    39
import java.lang.invoke.MethodType;
38432
892603099bb0 8144062: Move jdk.Version to java.lang.Runtime.Version
iris
parents: 36219
diff changeset
    40
import java.lang.Runtime.Version;
34835
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    41
import java.net.URI;
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    42
import java.nio.file.*;
58467
72ef2c0faf47 8231093: Document the ZIP FS properties noCompression and releaseVersion
lancea
parents: 54641
diff changeset
    43
import java.util.ArrayList;
34835
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    44
import java.util.HashMap;
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    45
import java.util.Map;
44257
3220d2ac3cee 8176709: JarFileSystem::isMultiReleaseJar is incorrect
redestad
parents: 40531
diff changeset
    46
import java.util.concurrent.atomic.AtomicInteger;
34835
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    47
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    48
import org.testng.Assert;
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    49
import org.testng.annotations.*;
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    50
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    51
public class MultiReleaseJarTest {
54641
ff0a691901c9 8223015: Cleanups for zipfs tests
clanger
parents: 50892
diff changeset
    52
    final private int MAJOR_VERSION = Runtime.version().feature();
59216
47c879f478d2 8234089: (zipfs) Remove classes JarFileSystemProvider and JarFileSystem
clanger
parents: 58467
diff changeset
    53
    private static final String PROPERTY_RELEASE_VERSION = "releaseVersion";
47c879f478d2 8234089: (zipfs) Remove classes JarFileSystemProvider and JarFileSystem
clanger
parents: 58467
diff changeset
    54
    private static final String PROPERTY_MULTI_RELEASE = "multi-release";
36012
2d47efae7da3 8150163: JarFileSystem support for MRJARs should use the JDK specific Version API
chegar
parents: 34835
diff changeset
    55
34835
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    56
    final private String userdir = System.getProperty("user.dir",".");
44257
3220d2ac3cee 8176709: JarFileSystem::isMultiReleaseJar is incorrect
redestad
parents: 40531
diff changeset
    57
    final private CreateMultiReleaseTestJars creator =  new CreateMultiReleaseTestJars();
34835
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    58
    final private Map<String,String> stringEnv = new HashMap<>();
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    59
    final private Map<String,Integer> integerEnv = new HashMap<>();
36012
2d47efae7da3 8150163: JarFileSystem support for MRJARs should use the JDK specific Version API
chegar
parents: 34835
diff changeset
    60
    final private Map<String,Version> versionEnv = new HashMap<>();
34835
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    61
    final private String className = "version.Version";
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    62
    final private MethodType mt = MethodType.methodType(int.class);
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    63
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    64
    private String entryName;
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    65
    private URI uvuri;
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    66
    private URI mruri;
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    67
    private URI smruri;
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    68
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    69
    @BeforeClass
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    70
    public void initialize() throws Exception {
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    71
        creator.compileEntries();
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    72
        creator.buildUnversionedJar();
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    73
        creator.buildMultiReleaseJar();
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    74
        creator.buildShortMultiReleaseJar();
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    75
        String ssp = Paths.get(userdir, "unversioned.jar").toUri().toString();
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    76
        uvuri = new URI("jar", ssp , null);
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    77
        ssp = Paths.get(userdir, "multi-release.jar").toUri().toString();
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    78
        mruri = new URI("jar", ssp, null);
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    79
        ssp = Paths.get(userdir, "short-multi-release.jar").toUri().toString();
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    80
        smruri = new URI("jar", ssp, null);
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    81
        entryName = className.replace('.', '/') + ".class";
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    82
    }
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    83
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    84
    public void close() throws IOException {
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    85
        Files.delete(Paths.get(userdir, "unversioned.jar"));
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    86
        Files.delete(Paths.get(userdir, "multi-release.jar"));
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    87
        Files.delete(Paths.get(userdir, "short-multi-release.jar"));
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    88
    }
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    89
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    90
    @DataProvider(name="strings")
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    91
    public Object[][] createStrings() {
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    92
        return new Object[][]{
59216
47c879f478d2 8234089: (zipfs) Remove classes JarFileSystemProvider and JarFileSystem
clanger
parents: 58467
diff changeset
    93
                {"runtime", MAJOR_VERSION, "8"},
47c879f478d2 8234089: (zipfs) Remove classes JarFileSystemProvider and JarFileSystem
clanger
parents: 58467
diff changeset
    94
                {null, 8, Integer.toString(MAJOR_VERSION)},
47c879f478d2 8234089: (zipfs) Remove classes JarFileSystemProvider and JarFileSystem
clanger
parents: 58467
diff changeset
    95
                {"8", 8, "9"},
47c879f478d2 8234089: (zipfs) Remove classes JarFileSystemProvider and JarFileSystem
clanger
parents: 58467
diff changeset
    96
                {"9", 9, null},
47c879f478d2 8234089: (zipfs) Remove classes JarFileSystemProvider and JarFileSystem
clanger
parents: 58467
diff changeset
    97
                {Integer.toString(MAJOR_VERSION), MAJOR_VERSION, "8"},
47c879f478d2 8234089: (zipfs) Remove classes JarFileSystemProvider and JarFileSystem
clanger
parents: 58467
diff changeset
    98
                {Integer.toString(MAJOR_VERSION+1), MAJOR_VERSION, "8"},
47c879f478d2 8234089: (zipfs) Remove classes JarFileSystemProvider and JarFileSystem
clanger
parents: 58467
diff changeset
    99
                {"50", MAJOR_VERSION, "9"}
34835
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   100
        };
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   101
    }
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   102
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   103
    @DataProvider(name="integers")
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   104
    public Object[][] createIntegers() {
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   105
        return new Object[][] {
59216
47c879f478d2 8234089: (zipfs) Remove classes JarFileSystemProvider and JarFileSystem
clanger
parents: 58467
diff changeset
   106
                {null, 8, Integer.valueOf(9)},
47c879f478d2 8234089: (zipfs) Remove classes JarFileSystemProvider and JarFileSystem
clanger
parents: 58467
diff changeset
   107
                {Integer.valueOf(8), 8, Integer.valueOf(9)},
47c879f478d2 8234089: (zipfs) Remove classes JarFileSystemProvider and JarFileSystem
clanger
parents: 58467
diff changeset
   108
                {Integer.valueOf(9), 9, Integer.valueOf(MAJOR_VERSION)},
47c879f478d2 8234089: (zipfs) Remove classes JarFileSystemProvider and JarFileSystem
clanger
parents: 58467
diff changeset
   109
                {Integer.valueOf(MAJOR_VERSION), MAJOR_VERSION, Integer.valueOf(8)},
47c879f478d2 8234089: (zipfs) Remove classes JarFileSystemProvider and JarFileSystem
clanger
parents: 58467
diff changeset
   110
                {Integer.valueOf(MAJOR_VERSION + 1), MAJOR_VERSION, null},
47c879f478d2 8234089: (zipfs) Remove classes JarFileSystemProvider and JarFileSystem
clanger
parents: 58467
diff changeset
   111
                {Integer.valueOf(100), MAJOR_VERSION, Integer.valueOf(8)}
34835
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   112
        };
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   113
    }
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   114
36012
2d47efae7da3 8150163: JarFileSystem support for MRJARs should use the JDK specific Version API
chegar
parents: 34835
diff changeset
   115
    @DataProvider(name="versions")
2d47efae7da3 8150163: JarFileSystem support for MRJARs should use the JDK specific Version API
chegar
parents: 34835
diff changeset
   116
    public Object[][] createVersions() {
2d47efae7da3 8150163: JarFileSystem support for MRJARs should use the JDK specific Version API
chegar
parents: 34835
diff changeset
   117
        return new Object[][] {
59216
47c879f478d2 8234089: (zipfs) Remove classes JarFileSystemProvider and JarFileSystem
clanger
parents: 58467
diff changeset
   118
                {null, 8, Version.parse("14")},
47c879f478d2 8234089: (zipfs) Remove classes JarFileSystemProvider and JarFileSystem
clanger
parents: 58467
diff changeset
   119
                {Version.parse("8"), 8, Version.parse("7")},
47c879f478d2 8234089: (zipfs) Remove classes JarFileSystemProvider and JarFileSystem
clanger
parents: 58467
diff changeset
   120
                {Version.parse("9"), 9, null},
47c879f478d2 8234089: (zipfs) Remove classes JarFileSystemProvider and JarFileSystem
clanger
parents: 58467
diff changeset
   121
                {Version.parse(Integer.toString(MAJOR_VERSION)), MAJOR_VERSION, Version.parse("8")},
47c879f478d2 8234089: (zipfs) Remove classes JarFileSystemProvider and JarFileSystem
clanger
parents: 58467
diff changeset
   122
                {Version.parse(Integer.toString(MAJOR_VERSION) + 1), MAJOR_VERSION, Version.parse("9")},
47c879f478d2 8234089: (zipfs) Remove classes JarFileSystemProvider and JarFileSystem
clanger
parents: 58467
diff changeset
   123
                {Version.parse("100"), MAJOR_VERSION, Version.parse("14")}
36012
2d47efae7da3 8150163: JarFileSystem support for MRJARs should use the JDK specific Version API
chegar
parents: 34835
diff changeset
   124
        };
2d47efae7da3 8150163: JarFileSystem support for MRJARs should use the JDK specific Version API
chegar
parents: 34835
diff changeset
   125
    }
2d47efae7da3 8150163: JarFileSystem support for MRJARs should use the JDK specific Version API
chegar
parents: 34835
diff changeset
   126
58467
72ef2c0faf47 8231093: Document the ZIP FS properties noCompression and releaseVersion
lancea
parents: 54641
diff changeset
   127
    @DataProvider(name="invalidVersions")
72ef2c0faf47 8231093: Document the ZIP FS properties noCompression and releaseVersion
lancea
parents: 54641
diff changeset
   128
    public Object[][] invalidVersions() {
72ef2c0faf47 8231093: Document the ZIP FS properties noCompression and releaseVersion
lancea
parents: 54641
diff changeset
   129
        return new Object[][] {
59216
47c879f478d2 8234089: (zipfs) Remove classes JarFileSystemProvider and JarFileSystem
clanger
parents: 58467
diff changeset
   130
                {Map.of(PROPERTY_RELEASE_VERSION, "")},
47c879f478d2 8234089: (zipfs) Remove classes JarFileSystemProvider and JarFileSystem
clanger
parents: 58467
diff changeset
   131
                {Map.of(PROPERTY_RELEASE_VERSION, "invalid")},
47c879f478d2 8234089: (zipfs) Remove classes JarFileSystemProvider and JarFileSystem
clanger
parents: 58467
diff changeset
   132
                {Map.of(PROPERTY_RELEASE_VERSION, "0")},
47c879f478d2 8234089: (zipfs) Remove classes JarFileSystemProvider and JarFileSystem
clanger
parents: 58467
diff changeset
   133
                {Map.of(PROPERTY_RELEASE_VERSION, "-1")},
47c879f478d2 8234089: (zipfs) Remove classes JarFileSystemProvider and JarFileSystem
clanger
parents: 58467
diff changeset
   134
                {Map.of(PROPERTY_RELEASE_VERSION, "11.0.1")},
47c879f478d2 8234089: (zipfs) Remove classes JarFileSystemProvider and JarFileSystem
clanger
parents: 58467
diff changeset
   135
                {Map.of(PROPERTY_RELEASE_VERSION, new ArrayList<Long>())},
47c879f478d2 8234089: (zipfs) Remove classes JarFileSystemProvider and JarFileSystem
clanger
parents: 58467
diff changeset
   136
                {Map.of(PROPERTY_RELEASE_VERSION, Integer.valueOf(0))},
47c879f478d2 8234089: (zipfs) Remove classes JarFileSystemProvider and JarFileSystem
clanger
parents: 58467
diff changeset
   137
                {Map.of(PROPERTY_RELEASE_VERSION, Integer.valueOf(-1))}
58467
72ef2c0faf47 8231093: Document the ZIP FS properties noCompression and releaseVersion
lancea
parents: 54641
diff changeset
   138
        };
72ef2c0faf47 8231093: Document the ZIP FS properties noCompression and releaseVersion
lancea
parents: 54641
diff changeset
   139
    }
72ef2c0faf47 8231093: Document the ZIP FS properties noCompression and releaseVersion
lancea
parents: 54641
diff changeset
   140
59216
47c879f478d2 8234089: (zipfs) Remove classes JarFileSystemProvider and JarFileSystem
clanger
parents: 58467
diff changeset
   141
    // Not the best test but all I can do since ZipFileSystem
47c879f478d2 8234089: (zipfs) Remove classes JarFileSystemProvider and JarFileSystem
clanger
parents: 58467
diff changeset
   142
    // is not public, so I can't use (fs instanceof ...)
34835
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   143
    @Test
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   144
    public void testNewFileSystem() throws Exception {
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   145
        Map<String,String> env = new HashMap<>();
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   146
        // no configuration, treat multi-release jar as unversioned
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   147
        try (FileSystem fs = FileSystems.newFileSystem(mruri, env)) {
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   148
            Assert.assertTrue(readAndCompare(fs, 8));
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   149
        }
59216
47c879f478d2 8234089: (zipfs) Remove classes JarFileSystemProvider and JarFileSystem
clanger
parents: 58467
diff changeset
   150
        env.put(PROPERTY_RELEASE_VERSION, "runtime");
34835
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   151
        // a configuration and jar file is multi-release
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   152
        try (FileSystem fs = FileSystems.newFileSystem(mruri, env)) {
36012
2d47efae7da3 8150163: JarFileSystem support for MRJARs should use the JDK specific Version API
chegar
parents: 34835
diff changeset
   153
            Assert.assertTrue(readAndCompare(fs, MAJOR_VERSION));
34835
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   154
        }
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   155
        // a configuration but jar file is unversioned
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   156
        try (FileSystem fs = FileSystems.newFileSystem(uvuri, env)) {
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   157
            Assert.assertTrue(readAndCompare(fs, 8));
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   158
        }
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   159
    }
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   160
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   161
    private boolean readAndCompare(FileSystem fs, int expected) throws IOException {
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   162
        Path path = fs.getPath("version/Version.java");
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   163
        String src = new String(Files.readAllBytes(path));
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   164
        return src.contains("return " + expected);
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   165
    }
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   166
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   167
    @Test(dataProvider="strings")
59216
47c879f478d2 8234089: (zipfs) Remove classes JarFileSystemProvider and JarFileSystem
clanger
parents: 58467
diff changeset
   168
    public void testStrings(String value, int expected, String ignorable) throws Throwable {
47c879f478d2 8234089: (zipfs) Remove classes JarFileSystemProvider and JarFileSystem
clanger
parents: 58467
diff changeset
   169
        stringEnv.clear();
47c879f478d2 8234089: (zipfs) Remove classes JarFileSystemProvider and JarFileSystem
clanger
parents: 58467
diff changeset
   170
        stringEnv.put(PROPERTY_RELEASE_VERSION, value);
47c879f478d2 8234089: (zipfs) Remove classes JarFileSystemProvider and JarFileSystem
clanger
parents: 58467
diff changeset
   171
        // we check, that values for "multi-release" are ignored
47c879f478d2 8234089: (zipfs) Remove classes JarFileSystemProvider and JarFileSystem
clanger
parents: 58467
diff changeset
   172
        stringEnv.put(PROPERTY_MULTI_RELEASE, ignorable);
58467
72ef2c0faf47 8231093: Document the ZIP FS properties noCompression and releaseVersion
lancea
parents: 54641
diff changeset
   173
        runTest(stringEnv, expected);
72ef2c0faf47 8231093: Document the ZIP FS properties noCompression and releaseVersion
lancea
parents: 54641
diff changeset
   174
    }
72ef2c0faf47 8231093: Document the ZIP FS properties noCompression and releaseVersion
lancea
parents: 54641
diff changeset
   175
72ef2c0faf47 8231093: Document the ZIP FS properties noCompression and releaseVersion
lancea
parents: 54641
diff changeset
   176
    @Test(dataProvider="integers")
59216
47c879f478d2 8234089: (zipfs) Remove classes JarFileSystemProvider and JarFileSystem
clanger
parents: 58467
diff changeset
   177
    public void testIntegers(Integer value, int expected, Integer ignorable) throws Throwable {
47c879f478d2 8234089: (zipfs) Remove classes JarFileSystemProvider and JarFileSystem
clanger
parents: 58467
diff changeset
   178
        integerEnv.clear();
47c879f478d2 8234089: (zipfs) Remove classes JarFileSystemProvider and JarFileSystem
clanger
parents: 58467
diff changeset
   179
        integerEnv.put(PROPERTY_RELEASE_VERSION, value);
47c879f478d2 8234089: (zipfs) Remove classes JarFileSystemProvider and JarFileSystem
clanger
parents: 58467
diff changeset
   180
        // we check, that values for "multi-release" are ignored
47c879f478d2 8234089: (zipfs) Remove classes JarFileSystemProvider and JarFileSystem
clanger
parents: 58467
diff changeset
   181
        integerEnv.put(PROPERTY_MULTI_RELEASE, value);
58467
72ef2c0faf47 8231093: Document the ZIP FS properties noCompression and releaseVersion
lancea
parents: 54641
diff changeset
   182
        runTest(integerEnv, expected);
72ef2c0faf47 8231093: Document the ZIP FS properties noCompression and releaseVersion
lancea
parents: 54641
diff changeset
   183
    }
72ef2c0faf47 8231093: Document the ZIP FS properties noCompression and releaseVersion
lancea
parents: 54641
diff changeset
   184
72ef2c0faf47 8231093: Document the ZIP FS properties noCompression and releaseVersion
lancea
parents: 54641
diff changeset
   185
    @Test(dataProvider="versions")
59216
47c879f478d2 8234089: (zipfs) Remove classes JarFileSystemProvider and JarFileSystem
clanger
parents: 58467
diff changeset
   186
    public void testVersions(Version value, int expected, Version ignorable) throws Throwable {
47c879f478d2 8234089: (zipfs) Remove classes JarFileSystemProvider and JarFileSystem
clanger
parents: 58467
diff changeset
   187
        versionEnv.clear();
47c879f478d2 8234089: (zipfs) Remove classes JarFileSystemProvider and JarFileSystem
clanger
parents: 58467
diff changeset
   188
        versionEnv.put(PROPERTY_RELEASE_VERSION, value);
47c879f478d2 8234089: (zipfs) Remove classes JarFileSystemProvider and JarFileSystem
clanger
parents: 58467
diff changeset
   189
        // we check, that values for "multi-release" are ignored
47c879f478d2 8234089: (zipfs) Remove classes JarFileSystemProvider and JarFileSystem
clanger
parents: 58467
diff changeset
   190
        versionEnv.put(PROPERTY_MULTI_RELEASE, ignorable);
58467
72ef2c0faf47 8231093: Document the ZIP FS properties noCompression and releaseVersion
lancea
parents: 54641
diff changeset
   191
        runTest(versionEnv, expected);
72ef2c0faf47 8231093: Document the ZIP FS properties noCompression and releaseVersion
lancea
parents: 54641
diff changeset
   192
    }
72ef2c0faf47 8231093: Document the ZIP FS properties noCompression and releaseVersion
lancea
parents: 54641
diff changeset
   193
72ef2c0faf47 8231093: Document the ZIP FS properties noCompression and releaseVersion
lancea
parents: 54641
diff changeset
   194
    @Test
72ef2c0faf47 8231093: Document the ZIP FS properties noCompression and releaseVersion
lancea
parents: 54641
diff changeset
   195
    public void testShortJar() throws Throwable {
59216
47c879f478d2 8234089: (zipfs) Remove classes JarFileSystemProvider and JarFileSystem
clanger
parents: 58467
diff changeset
   196
        integerEnv.clear();
47c879f478d2 8234089: (zipfs) Remove classes JarFileSystemProvider and JarFileSystem
clanger
parents: 58467
diff changeset
   197
        integerEnv.put(PROPERTY_RELEASE_VERSION, Integer.valueOf(MAJOR_VERSION));
58467
72ef2c0faf47 8231093: Document the ZIP FS properties noCompression and releaseVersion
lancea
parents: 54641
diff changeset
   198
        runTest(smruri, integerEnv, MAJOR_VERSION);
59216
47c879f478d2 8234089: (zipfs) Remove classes JarFileSystemProvider and JarFileSystem
clanger
parents: 58467
diff changeset
   199
        integerEnv.put(PROPERTY_RELEASE_VERSION, Integer.valueOf(9));
58467
72ef2c0faf47 8231093: Document the ZIP FS properties noCompression and releaseVersion
lancea
parents: 54641
diff changeset
   200
        runTest(smruri, integerEnv, 8);
72ef2c0faf47 8231093: Document the ZIP FS properties noCompression and releaseVersion
lancea
parents: 54641
diff changeset
   201
    }
72ef2c0faf47 8231093: Document the ZIP FS properties noCompression and releaseVersion
lancea
parents: 54641
diff changeset
   202
72ef2c0faf47 8231093: Document the ZIP FS properties noCompression and releaseVersion
lancea
parents: 54641
diff changeset
   203
    /**
72ef2c0faf47 8231093: Document the ZIP FS properties noCompression and releaseVersion
lancea
parents: 54641
diff changeset
   204
     * Validate that an invalid value for the "releaseVersion" property throws
72ef2c0faf47 8231093: Document the ZIP FS properties noCompression and releaseVersion
lancea
parents: 54641
diff changeset
   205
     * an {@code IllegalArgumentException}
72ef2c0faf47 8231093: Document the ZIP FS properties noCompression and releaseVersion
lancea
parents: 54641
diff changeset
   206
     * @param env Zip FS map
72ef2c0faf47 8231093: Document the ZIP FS properties noCompression and releaseVersion
lancea
parents: 54641
diff changeset
   207
     * @throws Throwable  Exception thrown for anything other than the expected
72ef2c0faf47 8231093: Document the ZIP FS properties noCompression and releaseVersion
lancea
parents: 54641
diff changeset
   208
     * IllegalArgumentException
72ef2c0faf47 8231093: Document the ZIP FS properties noCompression and releaseVersion
lancea
parents: 54641
diff changeset
   209
     */
72ef2c0faf47 8231093: Document the ZIP FS properties noCompression and releaseVersion
lancea
parents: 54641
diff changeset
   210
    @Test(dataProvider="invalidVersions")
72ef2c0faf47 8231093: Document the ZIP FS properties noCompression and releaseVersion
lancea
parents: 54641
diff changeset
   211
    public void testInvalidVersions(Map<String,?> env) throws Throwable {
72ef2c0faf47 8231093: Document the ZIP FS properties noCompression and releaseVersion
lancea
parents: 54641
diff changeset
   212
        Assert.assertThrows(IllegalArgumentException.class, () ->
72ef2c0faf47 8231093: Document the ZIP FS properties noCompression and releaseVersion
lancea
parents: 54641
diff changeset
   213
                FileSystems.newFileSystem(Path.of(userdir,
72ef2c0faf47 8231093: Document the ZIP FS properties noCompression and releaseVersion
lancea
parents: 54641
diff changeset
   214
                        "multi-release.jar"), env));
72ef2c0faf47 8231093: Document the ZIP FS properties noCompression and releaseVersion
lancea
parents: 54641
diff changeset
   215
    }
72ef2c0faf47 8231093: Document the ZIP FS properties noCompression and releaseVersion
lancea
parents: 54641
diff changeset
   216
72ef2c0faf47 8231093: Document the ZIP FS properties noCompression and releaseVersion
lancea
parents: 54641
diff changeset
   217
    // The following tests are for backwards compatibility to validate that
72ef2c0faf47 8231093: Document the ZIP FS properties noCompression and releaseVersion
lancea
parents: 54641
diff changeset
   218
    // the original property still works
72ef2c0faf47 8231093: Document the ZIP FS properties noCompression and releaseVersion
lancea
parents: 54641
diff changeset
   219
    @Test(dataProvider="strings")
59216
47c879f478d2 8234089: (zipfs) Remove classes JarFileSystemProvider and JarFileSystem
clanger
parents: 58467
diff changeset
   220
    public void testMRStrings(String value, int expected, String ignorable) throws Throwable {
58467
72ef2c0faf47 8231093: Document the ZIP FS properties noCompression and releaseVersion
lancea
parents: 54641
diff changeset
   221
        stringEnv.clear();
59216
47c879f478d2 8234089: (zipfs) Remove classes JarFileSystemProvider and JarFileSystem
clanger
parents: 58467
diff changeset
   222
        stringEnv.put(PROPERTY_MULTI_RELEASE, value);
34835
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   223
        runTest(stringEnv, expected);
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   224
    }
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   225
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   226
    @Test(dataProvider="integers")
59216
47c879f478d2 8234089: (zipfs) Remove classes JarFileSystemProvider and JarFileSystem
clanger
parents: 58467
diff changeset
   227
    public void testMRIntegers(Integer value, int expected, Integer ignorable) throws Throwable {
58467
72ef2c0faf47 8231093: Document the ZIP FS properties noCompression and releaseVersion
lancea
parents: 54641
diff changeset
   228
        integerEnv.clear();
59216
47c879f478d2 8234089: (zipfs) Remove classes JarFileSystemProvider and JarFileSystem
clanger
parents: 58467
diff changeset
   229
        integerEnv.put(PROPERTY_MULTI_RELEASE, value);
34835
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   230
        runTest(integerEnv, expected);
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   231
    }
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   232
36012
2d47efae7da3 8150163: JarFileSystem support for MRJARs should use the JDK specific Version API
chegar
parents: 34835
diff changeset
   233
    @Test(dataProvider="versions")
59216
47c879f478d2 8234089: (zipfs) Remove classes JarFileSystemProvider and JarFileSystem
clanger
parents: 58467
diff changeset
   234
    public void testMRVersions(Version value, int expected, Version ignorable) throws Throwable {
58467
72ef2c0faf47 8231093: Document the ZIP FS properties noCompression and releaseVersion
lancea
parents: 54641
diff changeset
   235
        versionEnv.clear();
59216
47c879f478d2 8234089: (zipfs) Remove classes JarFileSystemProvider and JarFileSystem
clanger
parents: 58467
diff changeset
   236
        versionEnv.put(PROPERTY_MULTI_RELEASE, value);
36012
2d47efae7da3 8150163: JarFileSystem support for MRJARs should use the JDK specific Version API
chegar
parents: 34835
diff changeset
   237
        runTest(versionEnv, expected);
2d47efae7da3 8150163: JarFileSystem support for MRJARs should use the JDK specific Version API
chegar
parents: 34835
diff changeset
   238
    }
2d47efae7da3 8150163: JarFileSystem support for MRJARs should use the JDK specific Version API
chegar
parents: 34835
diff changeset
   239
34835
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   240
    private void runTest(Map<String,?> env, int expected) throws Throwable {
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   241
        runTest(mruri, env, expected);
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   242
    }
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   243
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   244
    private void runTest(URI uri, Map<String,?> env, int expected) throws Throwable {
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   245
        try (FileSystem fs = FileSystems.newFileSystem(uri, env)) {
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   246
            Path version = fs.getPath(entryName);
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   247
            byte [] bytes = Files.readAllBytes(version);
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   248
            Class<?> vcls = (new ByteArrayClassLoader(fs)).defineClass(className, bytes);
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   249
            MethodHandle mh = MethodHandles.lookup().findVirtual(vcls, "getVersion", mt);
54641
ff0a691901c9 8223015: Cleanups for zipfs tests
clanger
parents: 50892
diff changeset
   250
            Assert.assertEquals((int)mh.invoke(vcls.getDeclaredConstructor().newInstance()), expected);
34835
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   251
        }
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   252
    }
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   253
44257
3220d2ac3cee 8176709: JarFileSystem::isMultiReleaseJar is incorrect
redestad
parents: 40531
diff changeset
   254
    @Test
3220d2ac3cee 8176709: JarFileSystem::isMultiReleaseJar is incorrect
redestad
parents: 40531
diff changeset
   255
    public void testIsMultiReleaseJar() throws Exception {
44259
b60290290b9e 8176834: jdk/nio/zipfs/MultiReleaseJarTest.java test fails after JDK-8176709
redestad
parents: 44257
diff changeset
   256
        // Re-examine commented out tests as part of JDK-8176843
44257
3220d2ac3cee 8176709: JarFileSystem::isMultiReleaseJar is incorrect
redestad
parents: 40531
diff changeset
   257
        testCustomMultiReleaseValue("true", true);
3220d2ac3cee 8176709: JarFileSystem::isMultiReleaseJar is incorrect
redestad
parents: 40531
diff changeset
   258
        testCustomMultiReleaseValue("true\r\nOther: value", true);
3220d2ac3cee 8176709: JarFileSystem::isMultiReleaseJar is incorrect
redestad
parents: 40531
diff changeset
   259
        testCustomMultiReleaseValue("true\nOther: value", true);
44259
b60290290b9e 8176834: jdk/nio/zipfs/MultiReleaseJarTest.java test fails after JDK-8176709
redestad
parents: 44257
diff changeset
   260
        //testCustomMultiReleaseValue("true\rOther: value", true);
44257
3220d2ac3cee 8176709: JarFileSystem::isMultiReleaseJar is incorrect
redestad
parents: 40531
diff changeset
   261
3220d2ac3cee 8176709: JarFileSystem::isMultiReleaseJar is incorrect
redestad
parents: 40531
diff changeset
   262
        testCustomMultiReleaseValue("false", false);
3220d2ac3cee 8176709: JarFileSystem::isMultiReleaseJar is incorrect
redestad
parents: 40531
diff changeset
   263
        testCustomMultiReleaseValue(" true", false);
3220d2ac3cee 8176709: JarFileSystem::isMultiReleaseJar is incorrect
redestad
parents: 40531
diff changeset
   264
        testCustomMultiReleaseValue("true ", false);
44259
b60290290b9e 8176834: jdk/nio/zipfs/MultiReleaseJarTest.java test fails after JDK-8176709
redestad
parents: 44257
diff changeset
   265
        //testCustomMultiReleaseValue("true\n ", false);
b60290290b9e 8176834: jdk/nio/zipfs/MultiReleaseJarTest.java test fails after JDK-8176709
redestad
parents: 44257
diff changeset
   266
        //testCustomMultiReleaseValue("true\r ", false);
b60290290b9e 8176834: jdk/nio/zipfs/MultiReleaseJarTest.java test fails after JDK-8176709
redestad
parents: 44257
diff changeset
   267
        //testCustomMultiReleaseValue("true\n true", false);
b60290290b9e 8176834: jdk/nio/zipfs/MultiReleaseJarTest.java test fails after JDK-8176709
redestad
parents: 44257
diff changeset
   268
        //testCustomMultiReleaseValue("true\r\n true", false);
44257
3220d2ac3cee 8176709: JarFileSystem::isMultiReleaseJar is incorrect
redestad
parents: 40531
diff changeset
   269
    }
3220d2ac3cee 8176709: JarFileSystem::isMultiReleaseJar is incorrect
redestad
parents: 40531
diff changeset
   270
48691
554cb38e0caf 8193802: NullPointerException from JarFileSystem.getVersionMap()
sherman
parents: 48690
diff changeset
   271
    @Test
554cb38e0caf 8193802: NullPointerException from JarFileSystem.getVersionMap()
sherman
parents: 48690
diff changeset
   272
    public void testMultiReleaseJarWithNonVersionDir() throws Exception {
554cb38e0caf 8193802: NullPointerException from JarFileSystem.getVersionMap()
sherman
parents: 48690
diff changeset
   273
        String jfname = "multi-release-non-ver.jar";
554cb38e0caf 8193802: NullPointerException from JarFileSystem.getVersionMap()
sherman
parents: 48690
diff changeset
   274
        Path jfpath = Paths.get(jfname);
554cb38e0caf 8193802: NullPointerException from JarFileSystem.getVersionMap()
sherman
parents: 48690
diff changeset
   275
        URI uri = new URI("jar", jfpath.toUri().toString() , null);
554cb38e0caf 8193802: NullPointerException from JarFileSystem.getVersionMap()
sherman
parents: 48690
diff changeset
   276
        JarBuilder jb = new JarBuilder(jfname);
554cb38e0caf 8193802: NullPointerException from JarFileSystem.getVersionMap()
sherman
parents: 48690
diff changeset
   277
        jb.addAttribute("Multi-Release", "true");
554cb38e0caf 8193802: NullPointerException from JarFileSystem.getVersionMap()
sherman
parents: 48690
diff changeset
   278
        jb.build();
59216
47c879f478d2 8234089: (zipfs) Remove classes JarFileSystemProvider and JarFileSystem
clanger
parents: 58467
diff changeset
   279
        Map<String,String> env = Map.of(PROPERTY_RELEASE_VERSION, "runtime");
48691
554cb38e0caf 8193802: NullPointerException from JarFileSystem.getVersionMap()
sherman
parents: 48690
diff changeset
   280
        try (FileSystem fs = FileSystems.newFileSystem(uri, env)) {
554cb38e0caf 8193802: NullPointerException from JarFileSystem.getVersionMap()
sherman
parents: 48690
diff changeset
   281
            Assert.assertTrue(true);
554cb38e0caf 8193802: NullPointerException from JarFileSystem.getVersionMap()
sherman
parents: 48690
diff changeset
   282
        }
554cb38e0caf 8193802: NullPointerException from JarFileSystem.getVersionMap()
sherman
parents: 48690
diff changeset
   283
        Files.delete(jfpath);
554cb38e0caf 8193802: NullPointerException from JarFileSystem.getVersionMap()
sherman
parents: 48690
diff changeset
   284
    }
554cb38e0caf 8193802: NullPointerException from JarFileSystem.getVersionMap()
sherman
parents: 48690
diff changeset
   285
44257
3220d2ac3cee 8176709: JarFileSystem::isMultiReleaseJar is incorrect
redestad
parents: 40531
diff changeset
   286
    private static final AtomicInteger JAR_COUNT = new AtomicInteger(0);
3220d2ac3cee 8176709: JarFileSystem::isMultiReleaseJar is incorrect
redestad
parents: 40531
diff changeset
   287
3220d2ac3cee 8176709: JarFileSystem::isMultiReleaseJar is incorrect
redestad
parents: 40531
diff changeset
   288
    private void testCustomMultiReleaseValue(String value, boolean expected)
3220d2ac3cee 8176709: JarFileSystem::isMultiReleaseJar is incorrect
redestad
parents: 40531
diff changeset
   289
            throws Exception {
3220d2ac3cee 8176709: JarFileSystem::isMultiReleaseJar is incorrect
redestad
parents: 40531
diff changeset
   290
        String fileName = "custom-mr" + JAR_COUNT.incrementAndGet() + ".jar";
3220d2ac3cee 8176709: JarFileSystem::isMultiReleaseJar is incorrect
redestad
parents: 40531
diff changeset
   291
        creator.buildCustomMultiReleaseJar(fileName, value, Map.of(),
3220d2ac3cee 8176709: JarFileSystem::isMultiReleaseJar is incorrect
redestad
parents: 40531
diff changeset
   292
                /*addEntries*/true);
3220d2ac3cee 8176709: JarFileSystem::isMultiReleaseJar is incorrect
redestad
parents: 40531
diff changeset
   293
59216
47c879f478d2 8234089: (zipfs) Remove classes JarFileSystemProvider and JarFileSystem
clanger
parents: 58467
diff changeset
   294
        Map<String,String> env = Map.of(PROPERTY_RELEASE_VERSION, "runtime");
44257
3220d2ac3cee 8176709: JarFileSystem::isMultiReleaseJar is incorrect
redestad
parents: 40531
diff changeset
   295
        Path filePath = Paths.get(userdir, fileName);
3220d2ac3cee 8176709: JarFileSystem::isMultiReleaseJar is incorrect
redestad
parents: 40531
diff changeset
   296
        String ssp = filePath.toUri().toString();
3220d2ac3cee 8176709: JarFileSystem::isMultiReleaseJar is incorrect
redestad
parents: 40531
diff changeset
   297
        URI customJar = new URI("jar", ssp , null);
3220d2ac3cee 8176709: JarFileSystem::isMultiReleaseJar is incorrect
redestad
parents: 40531
diff changeset
   298
        try (FileSystem fs = FileSystems.newFileSystem(customJar, env)) {
3220d2ac3cee 8176709: JarFileSystem::isMultiReleaseJar is incorrect
redestad
parents: 40531
diff changeset
   299
            if (expected) {
3220d2ac3cee 8176709: JarFileSystem::isMultiReleaseJar is incorrect
redestad
parents: 40531
diff changeset
   300
                Assert.assertTrue(readAndCompare(fs, MAJOR_VERSION));
3220d2ac3cee 8176709: JarFileSystem::isMultiReleaseJar is incorrect
redestad
parents: 40531
diff changeset
   301
            } else {
3220d2ac3cee 8176709: JarFileSystem::isMultiReleaseJar is incorrect
redestad
parents: 40531
diff changeset
   302
                Assert.assertTrue(readAndCompare(fs, 8));
3220d2ac3cee 8176709: JarFileSystem::isMultiReleaseJar is incorrect
redestad
parents: 40531
diff changeset
   303
            }
3220d2ac3cee 8176709: JarFileSystem::isMultiReleaseJar is incorrect
redestad
parents: 40531
diff changeset
   304
        }
3220d2ac3cee 8176709: JarFileSystem::isMultiReleaseJar is incorrect
redestad
parents: 40531
diff changeset
   305
        Files.delete(filePath);
3220d2ac3cee 8176709: JarFileSystem::isMultiReleaseJar is incorrect
redestad
parents: 40531
diff changeset
   306
    }
3220d2ac3cee 8176709: JarFileSystem::isMultiReleaseJar is incorrect
redestad
parents: 40531
diff changeset
   307
34835
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   308
    private static class ByteArrayClassLoader extends ClassLoader {
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   309
        final private FileSystem fs;
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   310
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   311
        ByteArrayClassLoader(FileSystem fs) {
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   312
            super(null);
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   313
            this.fs = fs;
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   314
        }
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   315
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   316
        @Override
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   317
        public Class<?> loadClass(String name) throws ClassNotFoundException {
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   318
            try {
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   319
                return super.loadClass(name);
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   320
            } catch (ClassNotFoundException x) {}
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   321
            Path cls = fs.getPath(name.replace('.', '/') + ".class");
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   322
            try {
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   323
                byte[] bytes = Files.readAllBytes(cls);
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   324
                return defineClass(name, bytes);
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   325
            } catch (IOException x) {
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   326
                throw new ClassNotFoundException(x.getMessage());
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   327
            }
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   328
        }
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   329
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   330
        public Class<?> defineClass(String name, byte[] bytes) throws ClassNotFoundException {
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   331
            if (bytes == null) throw new ClassNotFoundException("No bytes for " + name);
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   332
            return defineClass(name, bytes, 0, bytes.length);
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   333
        }
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   334
    }
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   335
}