Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/test/hotspot/jtreg/runtime/LoaderConstraints/duplicateLE/Test.java
40948 views
1
/*
2
* Copyright (c) 2018, 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
/**
25
* @test
26
* @bug 8199852
27
* @summary Test exception messages of LinkageError. A class loader loads
28
* twice the same class. Should trigger exception in
29
* SystemDictionary::check_constraints().
30
* @compile ../common/Foo.java
31
* @compile ../common/J.java
32
* ../common/PreemptingClassLoader.java
33
* @run main/othervm Test
34
*/
35
36
public class Test {
37
38
// Check that all names have external formatting ('.' and not '/' in package names).
39
// Check for parent of class loader.
40
// Break each expectedErrorMessage into 2 parts due to the class loader name containing
41
// the unique @<id> identity hash which cannot be compared against.
42
static String expectedErrorMessage1_part1 = "loader PreemptingClassLoader @";
43
static String expectedErrorMessage1_part2 = " attempted duplicate class definition for test.Foo. (test.Foo is in unnamed module of loader PreemptingClassLoader @";
44
static String expectedErrorMessage1_part3 = ", parent loader 'app')";
45
46
// Check that all names have external formatting ('.' and not '/' in package names).
47
// Check for name and parent of class loader.
48
static String expectedErrorMessage2_part1 = "loader 'DuplicateLE_Test_Loader' @";
49
static String expectedErrorMessage2_part2 = " attempted duplicate class definition for test.Foo. (test.Foo is in unnamed module of loader 'DuplicateLE_Test_Loader' @";
50
static String expectedErrorMessage2_part3 = ", parent loader 'app')";
51
52
// Check that all names have external formatting ('.' and not '/' in package names).
53
// Check for name and parent of class loader. Type should be mentioned as 'interface'.
54
static String expectedErrorMessage3_part1 = "loader 'DuplicateLE_Test_Loader_IF' @";
55
static String expectedErrorMessage3_part2 = " attempted duplicate interface definition for test.J. (test.J is in unnamed module of loader 'DuplicateLE_Test_Loader_IF' @";
56
static String expectedErrorMessage3_part3 = ", parent loader 'app')";
57
58
59
// Test that the error message is correct when a loader constraint error is
60
// detected during vtable creation.
61
//
62
// In this test, during vtable creation for class Task, method "Task.m()LFoo;"
63
// overrides "J.m()LFoo;". But, Task's class Foo and super type J's class Foo
64
// are different. So, a LinkageError exception should be thrown because the
65
// loader constraint check will fail.
66
public static void test(String loaderName,
67
String expectedErrorMessage_part1,
68
String expectedErrorMessage_part2,
69
String expectedErrorMessage_part3,
70
String testType) throws Exception {
71
String[] classNames = {testType};
72
ClassLoader l = new PreemptingClassLoader(loaderName, classNames, false);
73
l.loadClass(testType);
74
try {
75
l.loadClass(testType).newInstance();
76
throw new RuntimeException("Expected LinkageError exception not thrown");
77
} catch (LinkageError e) {
78
String errorMsg = e.getMessage();
79
if (!errorMsg.contains(expectedErrorMessage_part1) ||
80
!errorMsg.contains(expectedErrorMessage_part2) ||
81
!errorMsg.contains(expectedErrorMessage_part3)) {
82
System.out.println("Expected: " + expectedErrorMessage_part1 + "<id>" + expectedErrorMessage_part2 + "\n" +
83
"but got: " + errorMsg);
84
throw new RuntimeException("Wrong LinkageError exception thrown: " + errorMsg);
85
}
86
System.out.println("Passed with message: " + errorMsg);
87
}
88
}
89
90
public static void main(String args[]) throws Exception {
91
test(null, expectedErrorMessage1_part1, expectedErrorMessage1_part2,
92
expectedErrorMessage1_part3, "test.Foo");
93
test("DuplicateLE_Test_Loader", expectedErrorMessage2_part1, expectedErrorMessage2_part2,
94
expectedErrorMessage2_part3, "test.Foo");
95
test("DuplicateLE_Test_Loader_IF", expectedErrorMessage3_part1, expectedErrorMessage3_part2,
96
expectedErrorMessage3_part3, "test.J");
97
}
98
}
99
100