Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/test/jdk/tools/jlink/plugins/GenerateJLIClassesPluginTest.java
41149 views
1
/*
2
* Copyright (c) 2016, 2020, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation.
8
*
9
* This code is distributed in the hope that it will be useful, but WITHOUT
10
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12
* version 2 for more details (a copy is included in the LICENSE file that
13
* accompanied this code).
14
*
15
* You should have received a copy of the GNU General Public License version
16
* 2 along with this work; if not, write to the Free Software Foundation,
17
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18
*
19
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20
* or visit www.oracle.com if you need additional information or have any
21
* questions.
22
*/
23
24
import java.io.IOException;
25
import java.nio.charset.Charset;
26
import java.nio.file.Files;
27
import java.nio.file.Path;
28
import java.util.Collection;
29
import java.util.List;
30
import java.util.stream.Collectors;
31
32
import tests.Helper;
33
import tests.JImageGenerator;
34
import tests.JImageValidator;
35
import tests.Result;
36
37
import org.testng.annotations.BeforeTest;
38
import org.testng.annotations.Test;
39
40
/*
41
* @test
42
* @bug 8252919
43
* @library ../../lib
44
* @summary Test --generate-jli-classes plugin
45
* @modules java.base/jdk.internal.jimage
46
* jdk.jdeps/com.sun.tools.classfile
47
* jdk.jlink/jdk.tools.jlink.internal
48
* jdk.jlink/jdk.tools.jlink.internal.plugins
49
* jdk.jlink/jdk.tools.jmod
50
* jdk.jlink/jdk.tools.jimage
51
* @build tests.*
52
* @run testng/othervm GenerateJLIClassesPluginTest
53
*/
54
public class GenerateJLIClassesPluginTest {
55
56
private static Helper helper;
57
58
@BeforeTest
59
public static void setup() throws Exception {
60
helper = Helper.newHelper();
61
if (helper == null) {
62
System.err.println("Test not run");
63
return;
64
}
65
helper.generateDefaultModules();
66
}
67
68
@Test
69
public static void testSpecies() throws IOException {
70
// Check that --generate-jli-classes=@file works as intended
71
Path baseFile = Files.createTempFile("base", "trace");
72
String species = "LLLLLLLLLLLLLLLLLLL";
73
String fileString = "[SPECIES_RESOLVE] java.lang.invoke.BoundMethodHandle$Species_" + species + " (salvaged)\n";
74
Files.write(baseFile, fileString.getBytes(Charset.defaultCharset()));
75
Result result = JImageGenerator.getJLinkTask()
76
.modulePath(helper.defaultModulePath())
77
.output(helper.createNewImageDir("generate-jli-file"))
78
.option("--generate-jli-classes=@" + baseFile.toString())
79
.addMods("java.base")
80
.call();
81
82
Path image = result.assertSuccess();
83
validateHolderClasses(image);
84
JImageValidator.validate(image.resolve("lib").resolve("modules"),
85
classFilesForSpecies(List.of(species)), // species should be in the image
86
classFilesForSpecies(List.of(species.substring(1)))); // but not it's immediate parent
87
}
88
89
@Test
90
public static void testInvalidSignatures() throws IOException {
91
// Check that --generate-jli-classes=@file fails as intended on shapes that can't be generated
92
String[] args = new String[] {
93
"[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeVirtual L_L (success)\n",
94
"[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeInterface L_L (success)\n",
95
"[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic I_L (success)\n"
96
};
97
for (String fileString : args) {
98
Path failFile = Files.createTempFile("fail", "trace");
99
fileString = "[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeVirtual L_L (success)\n";
100
Files.write(failFile, fileString.getBytes(Charset.defaultCharset()));
101
Result result = JImageGenerator.getJLinkTask()
102
.modulePath(helper.defaultModulePath())
103
.output(helper.createNewImageDir("invalid-signature"))
104
.option("--generate-jli-classes=@" + failFile.toString())
105
.addMods("java.base")
106
.call();
107
108
result.assertFailure();
109
}
110
}
111
112
@Test
113
public static void nonExistentTraceFile() throws IOException {
114
Result result = JImageGenerator.getJLinkTask()
115
.modulePath(helper.defaultModulePath())
116
.output(helper.createNewImageDir("non-existent-tracefile"))
117
.option("--generate-jli-classes=@NON_EXISTENT_FILE")
118
.addMods("java.base")
119
.call();
120
121
Path image = result.assertSuccess();
122
validateHolderClasses(image);
123
}
124
125
private static void validateHolderClasses(Path image) throws IOException {
126
JImageValidator.validate(image.resolve("lib").resolve("modules"),
127
List.of("/java.base/java/lang/invoke/DirectMethodHandle$Holder.class",
128
"/java.base/java/lang/invoke/DelegatingMethodHandle$Holder.class",
129
"/java.base/java/lang/invoke/LambdaForm$Holder.class",
130
"/java.base/java/lang/invoke/Invokers$Holder.class"),
131
List.of());
132
}
133
134
private static List<String> classFilesForSpecies(Collection<String> species) {
135
return species.stream()
136
.map(s -> "/java.base/java/lang/invoke/BoundMethodHandle$Species_" + s + ".class")
137
.collect(Collectors.toList());
138
}
139
}
140
141