test/jdk/lib/testlibrary/java/util/jar/CreateMultiReleaseTestJars.java
author herrick
Thu, 01 Nov 2018 08:52:50 -0400
branchJDK-8200758-branch
changeset 57013 0ece1b6f0958
parent 52158 f351c1a6c37a
child 54641 ff0a691901c9
permissions -rw-r--r--
8213163: --app-image arg does not work creating exe installers Reviewed-by: almatvee
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
/*
48690
374c63fbe652 8194070: Update various tests to pass under JDK 11
darcy
parents: 47218
diff changeset
     2
 * Copyright (c) 2015, 2018, 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
35392
725d738b0ead 8147607: Remove test library dependency on sun.security.tools.jarsigner.Main
sdrach
parents: 34835
diff changeset
    24
import java.io.File;
725d738b0ead 8147607: Remove test library dependency on sun.security.tools.jarsigner.Main
sdrach
parents: 34835
diff changeset
    25
import java.io.FileOutputStream;
34835
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    26
import java.io.IOException;
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    27
import java.nio.file.Files;
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    28
import java.nio.file.Path;
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    29
import java.nio.file.Paths;
35392
725d738b0ead 8147607: Remove test library dependency on sun.security.tools.jarsigner.Main
sdrach
parents: 34835
diff changeset
    30
import java.security.KeyStore;
725d738b0ead 8147607: Remove test library dependency on sun.security.tools.jarsigner.Main
sdrach
parents: 34835
diff changeset
    31
import java.security.PrivateKey;
725d738b0ead 8147607: Remove test library dependency on sun.security.tools.jarsigner.Main
sdrach
parents: 34835
diff changeset
    32
import java.security.cert.CertPath;
725d738b0ead 8147607: Remove test library dependency on sun.security.tools.jarsigner.Main
sdrach
parents: 34835
diff changeset
    33
import java.security.cert.CertificateFactory;
725d738b0ead 8147607: Remove test library dependency on sun.security.tools.jarsigner.Main
sdrach
parents: 34835
diff changeset
    34
import java.util.Arrays;
34835
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    35
import java.util.HashMap;
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    36
import java.util.Map;
35392
725d738b0ead 8147607: Remove test library dependency on sun.security.tools.jarsigner.Main
sdrach
parents: 34835
diff changeset
    37
import java.util.zip.ZipFile;
725d738b0ead 8147607: Remove test library dependency on sun.security.tools.jarsigner.Main
sdrach
parents: 34835
diff changeset
    38
import jdk.security.jarsigner.JarSigner;
34835
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    39
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    40
public class CreateMultiReleaseTestJars {
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    41
    final private String main =
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    42
            "package version;\n\n"
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    43
            + "public class Main {\n"
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    44
            + "    public static void main(String[] args) {\n"
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    45
            + "        Version v = new Version();\n"
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    46
            + "        System.out.println(\"I am running on version \" + v.getVersion());\n"
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    47
            + "    }\n"
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    48
            + "}\n";
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    49
    final private String java8 =
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    50
            "package version;\n\n"
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    51
            + "public class Version {\n"
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    52
            + "    public int getVersion() {\n"
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    53
            + "        return 8;\n"
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    54
            + "    }\n"
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    55
            + "}\n";
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    56
    final private String java9 =
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    57
            "package version;\n\n"
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    58
            + "public class Version {\n"
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    59
            + "    public int getVersion() {\n"
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    60
            + "        int version = (new PackagePrivate()).getVersion();\n"
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    61
            + "        if (version == 9) return 9;\n"  // strange I know, but easy to test
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    62
            + "        return version;\n"
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    63
            + "    }\n"
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    64
            + "}\n";
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    65
    final private String ppjava9 =
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    66
            "package version;\n\n"
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    67
            + "class PackagePrivate {\n"
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    68
            + "    int getVersion() {\n"
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    69
            + "        return 9;\n"
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    70
            + "    }\n"
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    71
            + "}\n";
48690
374c63fbe652 8194070: Update various tests to pass under JDK 11
darcy
parents: 47218
diff changeset
    72
    final int currentVersion = Runtime.version().major();
374c63fbe652 8194070: Update various tests to pass under JDK 11
darcy
parents: 47218
diff changeset
    73
    final String currentVersionStr = Integer.toString(currentVersion);
374c63fbe652 8194070: Update various tests to pass under JDK 11
darcy
parents: 47218
diff changeset
    74
    final private String javaCurrent = java8.replace("8", currentVersionStr);
34835
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    75
    final String readme8 = "This is the root readme file";
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    76
    final String readme9 = "This is the version nine readme file";
48690
374c63fbe652 8194070: Update various tests to pass under JDK 11
darcy
parents: 47218
diff changeset
    77
    final String readmeCurrent = "This is the current version readme file";
34835
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    78
    private Map<String,byte[]> rootClasses;
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    79
    private Map<String,byte[]> version9Classes;
48690
374c63fbe652 8194070: Update various tests to pass under JDK 11
darcy
parents: 47218
diff changeset
    80
    private Map<String,byte[]> versionCurrentClasses;
34835
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    81
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    82
    public void buildUnversionedJar() throws IOException {
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    83
        JarBuilder jb = new JarBuilder("unversioned.jar");
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    84
        jb.addEntry("README", readme8.getBytes());
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    85
        jb.addEntry("version/Main.java", main.getBytes());
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    86
        jb.addEntry("version/Main.class", rootClasses.get("version.Main"));
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    87
        jb.addEntry("version/Version.java", java8.getBytes());
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    88
        jb.addEntry("version/Version.class", rootClasses.get("version.Version"));
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    89
        jb.build();
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    90
    }
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    91
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    92
    public void buildMultiReleaseJar() throws IOException {
40812
dc3755b63ade 8165723: JarFile::isMultiRelease() method returns false when it should return true
redestad
parents: 37308
diff changeset
    93
        JarBuilder jb = customMultiReleaseJar("multi-release.jar", "true");
dc3755b63ade 8165723: JarFile::isMultiRelease() method returns false when it should return true
redestad
parents: 37308
diff changeset
    94
        addEntries(jb);
40814
f105fad88cb6 8165890: [TESTBUG] Compilation issue in MultiReleaseJarTest after 8165723
redestad
parents: 40812
diff changeset
    95
        jb.addEntry("META-INF/versions/9/version/Version.class", version9Classes.get("version.Version"));
f105fad88cb6 8165890: [TESTBUG] Compilation issue in MultiReleaseJarTest after 8165723
redestad
parents: 40812
diff changeset
    96
        jb.build();
f105fad88cb6 8165890: [TESTBUG] Compilation issue in MultiReleaseJarTest after 8165723
redestad
parents: 40812
diff changeset
    97
    }
f105fad88cb6 8165890: [TESTBUG] Compilation issue in MultiReleaseJarTest after 8165723
redestad
parents: 40812
diff changeset
    98
f105fad88cb6 8165890: [TESTBUG] Compilation issue in MultiReleaseJarTest after 8165723
redestad
parents: 40812
diff changeset
    99
    public void buildShortMultiReleaseJar() throws IOException {
f105fad88cb6 8165890: [TESTBUG] Compilation issue in MultiReleaseJarTest after 8165723
redestad
parents: 40812
diff changeset
   100
        JarBuilder jb = customMultiReleaseJar("short-multi-release.jar", "true");
f105fad88cb6 8165890: [TESTBUG] Compilation issue in MultiReleaseJarTest after 8165723
redestad
parents: 40812
diff changeset
   101
        addEntries(jb);
40812
dc3755b63ade 8165723: JarFile::isMultiRelease() method returns false when it should return true
redestad
parents: 37308
diff changeset
   102
        jb.build();
37308
4c4141aac146 8153213: Jar manifest attribute "Multi-Release" accepts any value
redestad
parents: 35392
diff changeset
   103
    }
4c4141aac146 8153213: Jar manifest attribute "Multi-Release" accepts any value
redestad
parents: 35392
diff changeset
   104
40812
dc3755b63ade 8165723: JarFile::isMultiRelease() method returns false when it should return true
redestad
parents: 37308
diff changeset
   105
    private JarBuilder customMultiReleaseJar(String filename, String multiReleaseValue)
dc3755b63ade 8165723: JarFile::isMultiRelease() method returns false when it should return true
redestad
parents: 37308
diff changeset
   106
            throws IOException {
37308
4c4141aac146 8153213: Jar manifest attribute "Multi-Release" accepts any value
redestad
parents: 35392
diff changeset
   107
        JarBuilder jb = new JarBuilder(filename);
4c4141aac146 8153213: Jar manifest attribute "Multi-Release" accepts any value
redestad
parents: 35392
diff changeset
   108
        jb.addAttribute("Multi-Release", multiReleaseValue);
40812
dc3755b63ade 8165723: JarFile::isMultiRelease() method returns false when it should return true
redestad
parents: 37308
diff changeset
   109
        return jb;
dc3755b63ade 8165723: JarFile::isMultiRelease() method returns false when it should return true
redestad
parents: 37308
diff changeset
   110
    }
dc3755b63ade 8165723: JarFile::isMultiRelease() method returns false when it should return true
redestad
parents: 37308
diff changeset
   111
dc3755b63ade 8165723: JarFile::isMultiRelease() method returns false when it should return true
redestad
parents: 37308
diff changeset
   112
    public void buildCustomMultiReleaseJar(String filename, String multiReleaseValue,
dc3755b63ade 8165723: JarFile::isMultiRelease() method returns false when it should return true
redestad
parents: 37308
diff changeset
   113
            Map<String, String> extraAttributes) throws IOException {
44257
3220d2ac3cee 8176709: JarFileSystem::isMultiReleaseJar is incorrect
redestad
parents: 40814
diff changeset
   114
        buildCustomMultiReleaseJar(filename, multiReleaseValue, extraAttributes, false);
3220d2ac3cee 8176709: JarFileSystem::isMultiReleaseJar is incorrect
redestad
parents: 40814
diff changeset
   115
    }
3220d2ac3cee 8176709: JarFileSystem::isMultiReleaseJar is incorrect
redestad
parents: 40814
diff changeset
   116
3220d2ac3cee 8176709: JarFileSystem::isMultiReleaseJar is incorrect
redestad
parents: 40814
diff changeset
   117
    public void buildCustomMultiReleaseJar(String filename, String multiReleaseValue,
3220d2ac3cee 8176709: JarFileSystem::isMultiReleaseJar is incorrect
redestad
parents: 40814
diff changeset
   118
            Map<String, String> extraAttributes, boolean addEntries) throws IOException {
40812
dc3755b63ade 8165723: JarFile::isMultiRelease() method returns false when it should return true
redestad
parents: 37308
diff changeset
   119
        JarBuilder jb = new JarBuilder(filename);
dc3755b63ade 8165723: JarFile::isMultiRelease() method returns false when it should return true
redestad
parents: 37308
diff changeset
   120
        extraAttributes.entrySet()
dc3755b63ade 8165723: JarFile::isMultiRelease() method returns false when it should return true
redestad
parents: 37308
diff changeset
   121
                .forEach(entry -> jb.addAttribute(entry.getKey(), entry.getValue()));
44257
3220d2ac3cee 8176709: JarFileSystem::isMultiReleaseJar is incorrect
redestad
parents: 40814
diff changeset
   122
        if (addEntries) {
3220d2ac3cee 8176709: JarFileSystem::isMultiReleaseJar is incorrect
redestad
parents: 40814
diff changeset
   123
            addEntries(jb);
3220d2ac3cee 8176709: JarFileSystem::isMultiReleaseJar is incorrect
redestad
parents: 40814
diff changeset
   124
        }
40812
dc3755b63ade 8165723: JarFile::isMultiRelease() method returns false when it should return true
redestad
parents: 37308
diff changeset
   125
        jb.addAttribute("Multi-Release", multiReleaseValue);
dc3755b63ade 8165723: JarFile::isMultiRelease() method returns false when it should return true
redestad
parents: 37308
diff changeset
   126
        jb.build();
dc3755b63ade 8165723: JarFile::isMultiRelease() method returns false when it should return true
redestad
parents: 37308
diff changeset
   127
    }
dc3755b63ade 8165723: JarFile::isMultiRelease() method returns false when it should return true
redestad
parents: 37308
diff changeset
   128
dc3755b63ade 8165723: JarFile::isMultiRelease() method returns false when it should return true
redestad
parents: 37308
diff changeset
   129
    private void addEntries(JarBuilder jb) {
34835
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   130
        jb.addEntry("README", readme8.getBytes());
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   131
        jb.addEntry("version/Main.java", main.getBytes());
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   132
        jb.addEntry("version/Main.class", rootClasses.get("version.Main"));
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   133
        jb.addEntry("version/Version.java", java8.getBytes());
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   134
        jb.addEntry("version/Version.class", rootClasses.get("version.Version"));
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   135
        jb.addEntry("META-INF/versions/9/README", readme9.getBytes());
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   136
        jb.addEntry("META-INF/versions/9/version/Version.java", java9.getBytes());
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   137
        jb.addEntry("META-INF/versions/9/version/PackagePrivate.java", ppjava9.getBytes());
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   138
        jb.addEntry("META-INF/versions/9/version/PackagePrivate.class", version9Classes.get("version.PackagePrivate"));
48690
374c63fbe652 8194070: Update various tests to pass under JDK 11
darcy
parents: 47218
diff changeset
   139
        jb.addEntry("META-INF/versions/" + currentVersionStr + "/README", readmeCurrent.getBytes());
374c63fbe652 8194070: Update various tests to pass under JDK 11
darcy
parents: 47218
diff changeset
   140
        jb.addEntry("META-INF/versions/" + currentVersionStr + "/version/Version.java", javaCurrent.getBytes());
374c63fbe652 8194070: Update various tests to pass under JDK 11
darcy
parents: 47218
diff changeset
   141
        jb.addEntry("META-INF/versions/" + currentVersionStr + "/version/Version.class", versionCurrentClasses.get("version.Version"));
34835
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   142
    }
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   143
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   144
    public void buildSignedMultiReleaseJar() throws Exception {
52158
f351c1a6c37a 8199172: Improve jar attribute checks
sherman
parents: 48690
diff changeset
   145
        buildSignedMultiReleaseJar("multi-release.jar", "signed-multi-release.jar");
f351c1a6c37a 8199172: Improve jar attribute checks
sherman
parents: 48690
diff changeset
   146
    }
f351c1a6c37a 8199172: Improve jar attribute checks
sherman
parents: 48690
diff changeset
   147
f351c1a6c37a 8199172: Improve jar attribute checks
sherman
parents: 48690
diff changeset
   148
    public void buildSignedMultiReleaseJar(String multiReleaseJar,
f351c1a6c37a 8199172: Improve jar attribute checks
sherman
parents: 48690
diff changeset
   149
                                           String signedMultiReleaseJar) throws Exception
f351c1a6c37a 8199172: Improve jar attribute checks
sherman
parents: 48690
diff changeset
   150
    {
34835
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   151
        String testsrc = System.getProperty("test.src",".");
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   152
        String testdir = findTestDir(testsrc);
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   153
        String keystore = testdir + "/sun/security/tools/jarsigner/JarSigning.keystore";
35392
725d738b0ead 8147607: Remove test library dependency on sun.security.tools.jarsigner.Main
sdrach
parents: 34835
diff changeset
   154
725d738b0ead 8147607: Remove test library dependency on sun.security.tools.jarsigner.Main
sdrach
parents: 34835
diff changeset
   155
        // jarsigner -keystore keystore -storepass "bbbbbb"
725d738b0ead 8147607: Remove test library dependency on sun.security.tools.jarsigner.Main
sdrach
parents: 34835
diff changeset
   156
        //           -signedJar signed-multi-release.jar multi-release.jar b
34835
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   157
35392
725d738b0ead 8147607: Remove test library dependency on sun.security.tools.jarsigner.Main
sdrach
parents: 34835
diff changeset
   158
        char[] password = "bbbbbb".toCharArray();
725d738b0ead 8147607: Remove test library dependency on sun.security.tools.jarsigner.Main
sdrach
parents: 34835
diff changeset
   159
        KeyStore ks = KeyStore.getInstance(new File(keystore), password);
725d738b0ead 8147607: Remove test library dependency on sun.security.tools.jarsigner.Main
sdrach
parents: 34835
diff changeset
   160
        PrivateKey pkb = (PrivateKey)ks.getKey("b", password);
725d738b0ead 8147607: Remove test library dependency on sun.security.tools.jarsigner.Main
sdrach
parents: 34835
diff changeset
   161
        CertPath cp = CertificateFactory.getInstance("X.509")
725d738b0ead 8147607: Remove test library dependency on sun.security.tools.jarsigner.Main
sdrach
parents: 34835
diff changeset
   162
                .generateCertPath(Arrays.asList(ks.getCertificateChain("b")));
725d738b0ead 8147607: Remove test library dependency on sun.security.tools.jarsigner.Main
sdrach
parents: 34835
diff changeset
   163
        JarSigner js = new JarSigner.Builder(pkb, cp).build();
52158
f351c1a6c37a 8199172: Improve jar attribute checks
sherman
parents: 48690
diff changeset
   164
        try (ZipFile in = new ZipFile(multiReleaseJar);
f351c1a6c37a 8199172: Improve jar attribute checks
sherman
parents: 48690
diff changeset
   165
             FileOutputStream os = new FileOutputStream(signedMultiReleaseJar))
35392
725d738b0ead 8147607: Remove test library dependency on sun.security.tools.jarsigner.Main
sdrach
parents: 34835
diff changeset
   166
        {
725d738b0ead 8147607: Remove test library dependency on sun.security.tools.jarsigner.Main
sdrach
parents: 34835
diff changeset
   167
            js.sign(in, os);
725d738b0ead 8147607: Remove test library dependency on sun.security.tools.jarsigner.Main
sdrach
parents: 34835
diff changeset
   168
        }
34835
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   169
    }
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   170
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   171
    String findTestDir(String dir) throws IOException {
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   172
        Path path = Paths.get(dir).toAbsolutePath();
47218
918745561887 8187445: Forest Consolidation: Make tests work
erikj
parents: 47216
diff changeset
   173
        Path child = null;
34835
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   174
        while (path != null && !path.endsWith("test")) {
47218
918745561887 8187445: Forest Consolidation: Make tests work
erikj
parents: 47216
diff changeset
   175
            child = path;
34835
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   176
            path = path.getParent();
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   177
        }
47218
918745561887 8187445: Forest Consolidation: Make tests work
erikj
parents: 47216
diff changeset
   178
        if (child == null) {
34835
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   179
            throw new IllegalArgumentException(dir + " is not in a test directory");
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   180
        }
47218
918745561887 8187445: Forest Consolidation: Make tests work
erikj
parents: 47216
diff changeset
   181
        if (!Files.isDirectory(child)) {
918745561887 8187445: Forest Consolidation: Make tests work
erikj
parents: 47216
diff changeset
   182
            throw new IOException(child.toString() + " is not a directory");
34835
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   183
        }
47218
918745561887 8187445: Forest Consolidation: Make tests work
erikj
parents: 47216
diff changeset
   184
        return child.toString();
34835
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   185
    }
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   186
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   187
    void compileEntries() {
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   188
        Map<String,String> input = new HashMap<>();
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   189
        input.put("version.Main", main);
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   190
        input.put("version.Version", java8);
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   191
        rootClasses = (new Compiler(input)).setRelease(8).compile();
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   192
        input.clear();
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   193
        input.put("version.Version", java9);
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   194
        input.put("version.PackagePrivate", ppjava9);
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   195
        version9Classes = (new Compiler(input)).setRelease(9).compile();
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   196
        input.clear();
48690
374c63fbe652 8194070: Update various tests to pass under JDK 11
darcy
parents: 47218
diff changeset
   197
        input.put("version.Version", javaCurrent);
374c63fbe652 8194070: Update various tests to pass under JDK 11
darcy
parents: 47218
diff changeset
   198
        versionCurrentClasses = (new Compiler(input)).compile();  // Use default release
34835
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   199
    }
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   200
}