test/jdk/sun/security/tools/jarsigner/multiRelease/MVJarSigningTest.java
author weijun
Fri, 15 Nov 2019 09:06:58 +0800
changeset 59104 046e4024e55a
parent 48690 374c63fbe652
permissions -rw-r--r--
8214024: Remove the default keytool -keyalg value Reviewed-by: mullan
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
42771
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
     1
/*
59104
046e4024e55a 8214024: Remove the default keytool -keyalg value
weijun
parents: 48690
diff changeset
     2
 * Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved.
42771
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
     4
 *
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
     7
 * published by the Free Software Foundation.
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
     8
 *
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    13
 * accompanied this code).
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    14
 *
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    18
 *
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    21
 * questions.
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    22
 */
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    23
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    24
/*
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    25
 * @test
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    26
 * @bug 8047305 8075618
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    27
 * @summary Tests jarsigner tool and JarSigner API work with multi-release JAR files.
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    28
 * @library /test/lib
45467
99c87a16a8e4 8181761: add explicit @build actions for jdk.test.lib classes in all :tier2 tests
iignatyev
parents: 45393
diff changeset
    29
 * @build jdk.test.lib.compiler.CompilerUtils
99c87a16a8e4 8181761: add explicit @build actions for jdk.test.lib classes in all :tier2 tests
iignatyev
parents: 45393
diff changeset
    30
 *        jdk.test.lib.Utils
99c87a16a8e4 8181761: add explicit @build actions for jdk.test.lib classes in all :tier2 tests
iignatyev
parents: 45393
diff changeset
    31
 *        jdk.test.lib.Asserts
99c87a16a8e4 8181761: add explicit @build actions for jdk.test.lib classes in all :tier2 tests
iignatyev
parents: 45393
diff changeset
    32
 *        jdk.test.lib.JDKToolFinder
99c87a16a8e4 8181761: add explicit @build actions for jdk.test.lib classes in all :tier2 tests
iignatyev
parents: 45393
diff changeset
    33
 *        jdk.test.lib.JDKToolLauncher
99c87a16a8e4 8181761: add explicit @build actions for jdk.test.lib classes in all :tier2 tests
iignatyev
parents: 45393
diff changeset
    34
 *        jdk.test.lib.Platform
99c87a16a8e4 8181761: add explicit @build actions for jdk.test.lib classes in all :tier2 tests
iignatyev
parents: 45393
diff changeset
    35
 *        jdk.test.lib.process.*
42771
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    36
 * @run main MVJarSigningTest
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    37
 */
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    38
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    39
import jdk.security.jarsigner.JarSigner;
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    40
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    41
import java.io.BufferedReader;
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    42
import java.io.File;
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    43
import java.io.FileInputStream;
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    44
import java.io.FileOutputStream;
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    45
import java.io.IOException;
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    46
import java.io.InputStreamReader;
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    47
import java.nio.file.Files;
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    48
import java.nio.file.Path;
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    49
import java.nio.file.Paths;
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    50
import java.security.KeyStore;
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    51
import java.security.PrivateKey;
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    52
import java.security.cert.Certificate;
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    53
import java.security.cert.CertificateFactory;
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    54
import java.util.ArrayList;
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    55
import java.util.Arrays;
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    56
import java.util.Collections;
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    57
import java.util.List;
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    58
import java.util.concurrent.TimeUnit;
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    59
import java.util.jar.JarFile;
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    60
import java.util.stream.Stream;
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    61
import java.util.zip.ZipEntry;
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    62
import java.util.zip.ZipFile;
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    63
import java.util.zip.ZipOutputStream;
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    64
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    65
import jdk.test.lib.JDKToolFinder;
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    66
import jdk.test.lib.JDKToolLauncher;
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    67
import jdk.test.lib.Utils;
45393
de4e1efc8eec 8181335: remove packageless CompilerUtils
iignatyev
parents: 43612
diff changeset
    68
import jdk.test.lib.compiler.CompilerUtils;
42771
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    69
import jdk.test.lib.process.OutputAnalyzer;
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    70
import jdk.test.lib.process.ProcessTools;
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    71
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    72
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    73
public class MVJarSigningTest {
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    74
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    75
    private static final String TEST_SRC = System.getProperty("test.src", ".");
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    76
    private static final String USR_DIR = System.getProperty("user.dir", ".");
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    77
    private static final String JAR_NAME = "MV.jar";
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    78
    private static final String KEYSTORE = "keystore.jks";
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    79
    private static final String ALIAS = "JavaTest";
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    80
    private static final String STOREPASS = "changeit";
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    81
    private static final String KEYPASS = "changeit";
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    82
    private static final String SIGNED_JAR = "Signed.jar";
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    83
    private static final String POLICY_FILE = "SignedJar.policy";
48690
374c63fbe652 8194070: Update various tests to pass under JDK 11
darcy
parents: 47216
diff changeset
    84
    private static final String VERSION = Integer.toString(10);
43612
91671699935d 8173903: Update various tests to pass under JDK 10
darcy
parents: 42771
diff changeset
    85
    private static final String VERSION_MESSAGE = "I am running on version " + VERSION;
42771
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    86
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    87
    public static void main(String[] args) throws Throwable {
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    88
        // compile java files in jarContent directory
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    89
        compile("jarContent");
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    90
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    91
        // create multi-release jar
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    92
        Path classes = Paths.get("classes");
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    93
        jar("cf", JAR_NAME, "-C", classes.resolve("base").toString(), ".",
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    94
                "--release", "9", "-C", classes.resolve("v9").toString(), ".",
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    95
                "--release", "10", "-C", classes.resolve("v10").toString(), ".")
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    96
            .shouldHaveExitValue(0);
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    97
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    98
        genKey();
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
    99
        signJar(JAR_NAME)
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   100
            .shouldHaveExitValue(0)
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   101
            .shouldMatch("signing.*META-INF/versions/9/version/Version.class")
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   102
            .shouldMatch("signing.*META-INF/versions/10/version/Version.class")
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   103
            .shouldMatch("signing.*version/Main.class")
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   104
            .shouldMatch("signing.*version/Version.class");
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   105
        verify(SIGNED_JAR);
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   106
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   107
        // test with JarSigner API
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   108
        Files.deleteIfExists(Paths.get(SIGNED_JAR));
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   109
        signWithJarSignerAPI(JAR_NAME);
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   110
        verify(SIGNED_JAR);
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   111
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   112
        // test Permission granted
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   113
        File keypass = new File("keypass");
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   114
        try (FileOutputStream fos = new FileOutputStream(keypass)) {
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   115
            fos.write(KEYPASS.getBytes());
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   116
        }
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   117
        String[] cmd = {
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   118
                "-classpath", SIGNED_JAR,
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   119
                "-Djava.security.manager",
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   120
                "-Djava.security.policy=" +
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   121
                TEST_SRC + File.separator + POLICY_FILE,
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   122
                "version.Main"};
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   123
        ProcessTools.executeTestJvm(cmd)
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   124
            .shouldHaveExitValue(0)
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   125
            .shouldContain(VERSION_MESSAGE);
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   126
    }
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   127
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   128
    private static void compile (String jarContent_path) throws Throwable {
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   129
        Path classes = Paths.get(USR_DIR, "classes", "base");
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   130
        Path source = Paths.get(TEST_SRC, jarContent_path, "base", "version");
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   131
        CompilerUtils.compile(source, classes);
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   132
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   133
        classes = Paths.get(USR_DIR, "classes", "v9");
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   134
        source = Paths.get(TEST_SRC, jarContent_path , "v9", "version");
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   135
        CompilerUtils.compile(source, classes);
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   136
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   137
        classes = Paths.get(USR_DIR, "classes", "v10");
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   138
        source = Paths.get(TEST_SRC, jarContent_path, "v10", "version");
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   139
        CompilerUtils.compile(source, classes);
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   140
    }
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   141
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   142
    private static OutputAnalyzer jar(String...args) throws Throwable {
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   143
        JDKToolLauncher launcher = JDKToolLauncher.createUsingTestJDK("jar");
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   144
        Stream.of(args).forEach(launcher::addToolArg);
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   145
        return ProcessTools.executeCommand(launcher.getCommand());
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   146
    }
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   147
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   148
    private static void genKey() throws Throwable {
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   149
        String keytool = JDKToolFinder.getJDKTool("keytool");
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   150
        Files.deleteIfExists(Paths.get(KEYSTORE));
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   151
        ProcessTools.executeCommand(keytool,
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   152
                "-J-Duser.language=en",
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   153
                "-J-Duser.country=US",
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   154
                "-genkey",
59104
046e4024e55a 8214024: Remove the default keytool -keyalg value
weijun
parents: 48690
diff changeset
   155
                "-keyalg", "dsa",
42771
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   156
                "-alias", ALIAS,
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   157
                "-keystore", KEYSTORE,
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   158
                "-keypass", KEYPASS,
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   159
                "-dname", "cn=sample",
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   160
                "-storepass", STOREPASS
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   161
        ).shouldHaveExitValue(0);
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   162
    }
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   163
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   164
    private static OutputAnalyzer signJar(String jarName) throws Throwable {
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   165
        List<String> args = new ArrayList<>();
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   166
        args.add("-verbose");
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   167
        args.add("-signedjar");
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   168
        args.add(SIGNED_JAR);
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   169
        args.add(jarName);
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   170
        args.add(ALIAS);
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   171
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   172
        return jarsigner(args);
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   173
    }
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   174
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   175
    private static void verify(String signedJarName) throws Throwable {
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   176
        verifyJar(signedJarName)
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   177
            .shouldHaveExitValue(0)
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   178
            .shouldContain("jar verified")
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   179
            .shouldMatch("smk.*META-INF/versions/9/version/Version.class")
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   180
            .shouldMatch("smk.*META-INF/versions/10/version/Version.class")
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   181
            .shouldMatch("smk.*version/Main.class")
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   182
            .shouldMatch("smk.*version/Version.class");
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   183
    }
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   184
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   185
    private static OutputAnalyzer verifyJar(String signedJarName) throws Throwable {
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   186
        List<String> args = new ArrayList<>();
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   187
        args.add("-verbose");
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   188
        args.add("-verify");
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   189
        args.add(signedJarName);
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   190
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   191
        return jarsigner(args);
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   192
    }
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   193
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   194
    private static OutputAnalyzer jarsigner(List<String> extra)
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   195
            throws Throwable {
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   196
        JDKToolLauncher launcher = JDKToolLauncher.createUsingTestJDK("jarsigner")
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   197
                .addVMArg("-Duser.language=en")
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   198
                .addVMArg("-Duser.country=US")
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   199
                .addToolArg("-keystore")
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   200
                .addToolArg(KEYSTORE)
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   201
                .addToolArg("-storepass")
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   202
                .addToolArg(STOREPASS)
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   203
                .addToolArg("-keypass")
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   204
                .addToolArg(KEYPASS);
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   205
        for (String s : extra) {
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   206
            if (s.startsWith("-J")) {
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   207
                launcher.addVMArg(s.substring(2));
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   208
            } else {
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   209
                launcher.addToolArg(s);
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   210
            }
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   211
        }
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   212
        return ProcessTools.executeCommand(launcher.getCommand());
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   213
    }
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   214
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   215
    private static void signWithJarSignerAPI(String jarName)
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   216
            throws Throwable {
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   217
        // Get JarSigner
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   218
        try (FileInputStream fis = new FileInputStream(KEYSTORE)) {
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   219
                KeyStore ks = KeyStore.getInstance("JKS");
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   220
                ks.load(fis, STOREPASS.toCharArray());
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   221
                PrivateKey pk = (PrivateKey)ks.getKey(ALIAS, KEYPASS.toCharArray());
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   222
                Certificate cert = ks.getCertificate(ALIAS);
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   223
                JarSigner signer = new JarSigner.Builder(pk,
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   224
                        CertificateFactory.getInstance("X.509").generateCertPath(
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   225
                                Collections.singletonList(cert)))
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   226
                        .build();
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   227
            // Sign jar
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   228
            try (ZipFile src = new JarFile(jarName);
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   229
                    FileOutputStream out = new FileOutputStream(SIGNED_JAR)) {
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   230
                signer.sign(src,out);
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   231
            }
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   232
        }
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   233
    }
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   234
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   235
}
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   236
8c4a539300af 8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff changeset
   237