test/jdk/lib/testlibrary/java/util/jar/CreateMultiReleaseTestJars.java
author erikj
Tue, 12 Sep 2017 19:03:59 +0200
changeset 47218 918745561887
parent 47216 71c04702a3d5
child 48690 374c63fbe652
permissions -rw-r--r--
8187445: Forest Consolidation: Make tests work Reviewed-by: darcy, ihse
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
/*
44257
3220d2ac3cee 8176709: JarFileSystem::isMultiReleaseJar is incorrect
redestad
parents: 40814
diff changeset
     2
 * Copyright (c) 2015, 2017, 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";
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    72
    final private String java10 = java8.replace("8", "10");
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    73
    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
    74
    final String readme9 = "This is the version nine readme file";
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    75
    final String readme10 = "This is the version ten readme file";
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    76
    private Map<String,byte[]> rootClasses;
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    77
    private Map<String,byte[]> version9Classes;
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    78
    private Map<String,byte[]> version10Classes;
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    79
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    80
    public void buildUnversionedJar() throws IOException {
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    81
        JarBuilder jb = new JarBuilder("unversioned.jar");
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    82
        jb.addEntry("README", readme8.getBytes());
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    83
        jb.addEntry("version/Main.java", main.getBytes());
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    84
        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
    85
        jb.addEntry("version/Version.java", java8.getBytes());
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
    86
        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
    87
        jb.build();
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
    public void buildMultiReleaseJar() throws IOException {
40812
dc3755b63ade 8165723: JarFile::isMultiRelease() method returns false when it should return true
redestad
parents: 37308
diff changeset
    91
        JarBuilder jb = customMultiReleaseJar("multi-release.jar", "true");
dc3755b63ade 8165723: JarFile::isMultiRelease() method returns false when it should return true
redestad
parents: 37308
diff changeset
    92
        addEntries(jb);
40814
f105fad88cb6 8165890: [TESTBUG] Compilation issue in MultiReleaseJarTest after 8165723
redestad
parents: 40812
diff changeset
    93
        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
    94
        jb.build();
f105fad88cb6 8165890: [TESTBUG] Compilation issue in MultiReleaseJarTest after 8165723
redestad
parents: 40812
diff changeset
    95
    }
f105fad88cb6 8165890: [TESTBUG] Compilation issue in MultiReleaseJarTest after 8165723
redestad
parents: 40812
diff changeset
    96
f105fad88cb6 8165890: [TESTBUG] Compilation issue in MultiReleaseJarTest after 8165723
redestad
parents: 40812
diff changeset
    97
    public void buildShortMultiReleaseJar() throws IOException {
f105fad88cb6 8165890: [TESTBUG] Compilation issue in MultiReleaseJarTest after 8165723
redestad
parents: 40812
diff changeset
    98
        JarBuilder jb = customMultiReleaseJar("short-multi-release.jar", "true");
f105fad88cb6 8165890: [TESTBUG] Compilation issue in MultiReleaseJarTest after 8165723
redestad
parents: 40812
diff changeset
    99
        addEntries(jb);
40812
dc3755b63ade 8165723: JarFile::isMultiRelease() method returns false when it should return true
redestad
parents: 37308
diff changeset
   100
        jb.build();
37308
4c4141aac146 8153213: Jar manifest attribute "Multi-Release" accepts any value
redestad
parents: 35392
diff changeset
   101
    }
4c4141aac146 8153213: Jar manifest attribute "Multi-Release" accepts any value
redestad
parents: 35392
diff changeset
   102
40812
dc3755b63ade 8165723: JarFile::isMultiRelease() method returns false when it should return true
redestad
parents: 37308
diff changeset
   103
    private JarBuilder customMultiReleaseJar(String filename, String multiReleaseValue)
dc3755b63ade 8165723: JarFile::isMultiRelease() method returns false when it should return true
redestad
parents: 37308
diff changeset
   104
            throws IOException {
37308
4c4141aac146 8153213: Jar manifest attribute "Multi-Release" accepts any value
redestad
parents: 35392
diff changeset
   105
        JarBuilder jb = new JarBuilder(filename);
4c4141aac146 8153213: Jar manifest attribute "Multi-Release" accepts any value
redestad
parents: 35392
diff changeset
   106
        jb.addAttribute("Multi-Release", multiReleaseValue);
40812
dc3755b63ade 8165723: JarFile::isMultiRelease() method returns false when it should return true
redestad
parents: 37308
diff changeset
   107
        return jb;
dc3755b63ade 8165723: JarFile::isMultiRelease() method returns false when it should return true
redestad
parents: 37308
diff changeset
   108
    }
dc3755b63ade 8165723: JarFile::isMultiRelease() method returns false when it should return true
redestad
parents: 37308
diff changeset
   109
dc3755b63ade 8165723: JarFile::isMultiRelease() method returns false when it should return true
redestad
parents: 37308
diff changeset
   110
    public void buildCustomMultiReleaseJar(String filename, String multiReleaseValue,
dc3755b63ade 8165723: JarFile::isMultiRelease() method returns false when it should return true
redestad
parents: 37308
diff changeset
   111
            Map<String, String> extraAttributes) throws IOException {
44257
3220d2ac3cee 8176709: JarFileSystem::isMultiReleaseJar is incorrect
redestad
parents: 40814
diff changeset
   112
        buildCustomMultiReleaseJar(filename, multiReleaseValue, extraAttributes, false);
3220d2ac3cee 8176709: JarFileSystem::isMultiReleaseJar is incorrect
redestad
parents: 40814
diff changeset
   113
    }
3220d2ac3cee 8176709: JarFileSystem::isMultiReleaseJar is incorrect
redestad
parents: 40814
diff changeset
   114
3220d2ac3cee 8176709: JarFileSystem::isMultiReleaseJar is incorrect
redestad
parents: 40814
diff changeset
   115
    public void buildCustomMultiReleaseJar(String filename, String multiReleaseValue,
3220d2ac3cee 8176709: JarFileSystem::isMultiReleaseJar is incorrect
redestad
parents: 40814
diff changeset
   116
            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
   117
        JarBuilder jb = new JarBuilder(filename);
dc3755b63ade 8165723: JarFile::isMultiRelease() method returns false when it should return true
redestad
parents: 37308
diff changeset
   118
        extraAttributes.entrySet()
dc3755b63ade 8165723: JarFile::isMultiRelease() method returns false when it should return true
redestad
parents: 37308
diff changeset
   119
                .forEach(entry -> jb.addAttribute(entry.getKey(), entry.getValue()));
44257
3220d2ac3cee 8176709: JarFileSystem::isMultiReleaseJar is incorrect
redestad
parents: 40814
diff changeset
   120
        if (addEntries) {
3220d2ac3cee 8176709: JarFileSystem::isMultiReleaseJar is incorrect
redestad
parents: 40814
diff changeset
   121
            addEntries(jb);
3220d2ac3cee 8176709: JarFileSystem::isMultiReleaseJar is incorrect
redestad
parents: 40814
diff changeset
   122
        }
40812
dc3755b63ade 8165723: JarFile::isMultiRelease() method returns false when it should return true
redestad
parents: 37308
diff changeset
   123
        jb.addAttribute("Multi-Release", multiReleaseValue);
dc3755b63ade 8165723: JarFile::isMultiRelease() method returns false when it should return true
redestad
parents: 37308
diff changeset
   124
        jb.build();
dc3755b63ade 8165723: JarFile::isMultiRelease() method returns false when it should return true
redestad
parents: 37308
diff changeset
   125
    }
dc3755b63ade 8165723: JarFile::isMultiRelease() method returns false when it should return true
redestad
parents: 37308
diff changeset
   126
dc3755b63ade 8165723: JarFile::isMultiRelease() method returns false when it should return true
redestad
parents: 37308
diff changeset
   127
    private void addEntries(JarBuilder jb) {
34835
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   128
        jb.addEntry("README", readme8.getBytes());
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   129
        jb.addEntry("version/Main.java", main.getBytes());
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   130
        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
   131
        jb.addEntry("version/Version.java", java8.getBytes());
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   132
        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
   133
        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
   134
        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
   135
        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
   136
        jb.addEntry("META-INF/versions/9/version/PackagePrivate.class", version9Classes.get("version.PackagePrivate"));
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   137
        jb.addEntry("META-INF/versions/10/README", readme10.getBytes());
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   138
        jb.addEntry("META-INF/versions/10/version/Version.java", java10.getBytes());
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   139
        jb.addEntry("META-INF/versions/10/version/Version.class", version10Classes.get("version.Version"));
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   140
    }
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   141
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   142
    public void buildSignedMultiReleaseJar() throws Exception {
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   143
        String testsrc = System.getProperty("test.src",".");
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   144
        String testdir = findTestDir(testsrc);
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   145
        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
   146
725d738b0ead 8147607: Remove test library dependency on sun.security.tools.jarsigner.Main
sdrach
parents: 34835
diff changeset
   147
        // jarsigner -keystore keystore -storepass "bbbbbb"
725d738b0ead 8147607: Remove test library dependency on sun.security.tools.jarsigner.Main
sdrach
parents: 34835
diff changeset
   148
        //           -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
   149
35392
725d738b0ead 8147607: Remove test library dependency on sun.security.tools.jarsigner.Main
sdrach
parents: 34835
diff changeset
   150
        char[] password = "bbbbbb".toCharArray();
725d738b0ead 8147607: Remove test library dependency on sun.security.tools.jarsigner.Main
sdrach
parents: 34835
diff changeset
   151
        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
   152
        PrivateKey pkb = (PrivateKey)ks.getKey("b", password);
725d738b0ead 8147607: Remove test library dependency on sun.security.tools.jarsigner.Main
sdrach
parents: 34835
diff changeset
   153
        CertPath cp = CertificateFactory.getInstance("X.509")
725d738b0ead 8147607: Remove test library dependency on sun.security.tools.jarsigner.Main
sdrach
parents: 34835
diff changeset
   154
                .generateCertPath(Arrays.asList(ks.getCertificateChain("b")));
725d738b0ead 8147607: Remove test library dependency on sun.security.tools.jarsigner.Main
sdrach
parents: 34835
diff changeset
   155
        JarSigner js = new JarSigner.Builder(pkb, cp).build();
725d738b0ead 8147607: Remove test library dependency on sun.security.tools.jarsigner.Main
sdrach
parents: 34835
diff changeset
   156
        try (ZipFile in = new ZipFile("multi-release.jar");
725d738b0ead 8147607: Remove test library dependency on sun.security.tools.jarsigner.Main
sdrach
parents: 34835
diff changeset
   157
             FileOutputStream os = new FileOutputStream("signed-multi-release.jar"))
725d738b0ead 8147607: Remove test library dependency on sun.security.tools.jarsigner.Main
sdrach
parents: 34835
diff changeset
   158
        {
725d738b0ead 8147607: Remove test library dependency on sun.security.tools.jarsigner.Main
sdrach
parents: 34835
diff changeset
   159
            js.sign(in, os);
725d738b0ead 8147607: Remove test library dependency on sun.security.tools.jarsigner.Main
sdrach
parents: 34835
diff changeset
   160
        }
34835
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   161
    }
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   162
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   163
    String findTestDir(String dir) throws IOException {
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   164
        Path path = Paths.get(dir).toAbsolutePath();
47218
918745561887 8187445: Forest Consolidation: Make tests work
erikj
parents: 47216
diff changeset
   165
        Path child = null;
34835
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   166
        while (path != null && !path.endsWith("test")) {
47218
918745561887 8187445: Forest Consolidation: Make tests work
erikj
parents: 47216
diff changeset
   167
            child = path;
34835
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   168
            path = path.getParent();
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   169
        }
47218
918745561887 8187445: Forest Consolidation: Make tests work
erikj
parents: 47216
diff changeset
   170
        if (child == null) {
34835
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   171
            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
   172
        }
47218
918745561887 8187445: Forest Consolidation: Make tests work
erikj
parents: 47216
diff changeset
   173
        if (!Files.isDirectory(child)) {
918745561887 8187445: Forest Consolidation: Make tests work
erikj
parents: 47216
diff changeset
   174
            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
   175
        }
47218
918745561887 8187445: Forest Consolidation: Make tests work
erikj
parents: 47216
diff changeset
   176
        return child.toString();
34835
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   177
    }
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   178
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   179
    void compileEntries() {
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   180
        Map<String,String> input = new HashMap<>();
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   181
        input.put("version.Main", main);
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   182
        input.put("version.Version", java8);
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   183
        rootClasses = (new Compiler(input)).setRelease(8).compile();
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   184
        input.clear();
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   185
        input.put("version.Version", java9);
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   186
        input.put("version.PackagePrivate", ppjava9);
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   187
        version9Classes = (new Compiler(input)).setRelease(9).compile();
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   188
        input.clear();
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   189
        input.put("version.Version", java10);
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   190
        version10Classes = (new Compiler(input)).setRelease(9).compile();  // fixme in JDK 10
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   191
    }
ee52702b8d1b 8144355: JDK 9 changes to ZipFileSystem to support multi-release jar files
sdrach
parents:
diff changeset
   192
}