author | weijun |
Fri, 15 Nov 2019 09:06:58 +0800 | |
changeset 59104 | 046e4024e55a |
parent 48690 | 374c63fbe652 |
permissions | -rw-r--r-- |
42771
8c4a539300af
8075618: Create tests to check jarsigner work with multi-version jar
amjiang
parents:
diff
changeset
|
1 |
/* |
59104 | 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 | 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 | 84 |
private static final String VERSION = Integer.toString(10); |
43612 | 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 | 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 |