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