< prev index next >

test/hotspot/jtreg/runtime/LoaderConstraints/duplicateParentLE/Test.java

Print this page
rev 51756 : 8205611: Improve the wording of LinkageErrors to include module and class loader information
Summary: Clean up the wording of loader constraint violations to include the module and class loader information.
Reviewed-by: coleenp, goetz, hseigel


  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 = " (instance of PreemptingChildClassLoader, child of ParentClassLoader @";
  49     static String expectedErrorMessage_part3 = " ParentClassLoader) attempted duplicate class definition for test.Foo";

  50 
  51     // Test that the error message is correct when a loader constraint error is
  52     // detected during vtable creation.
  53     //
  54     // In this test, during vtable creation for class Task, method "Task.m()LFoo;"
  55     // overrides "J.m()LFoo;".  But, Task's class Foo and super type J's class Foo
  56     // are different.  So, a LinkageError exception should be thrown because the
  57     // loader constraint check will fail.
  58     public static void test(String loaderName,
  59                             String testType) throws Exception {
  60         String[] classNames = {testType};
  61         ClassLoader l = new PreemptingChildClassLoader(loaderName, classNames, false);
  62         l.loadClass(testType);
  63         try {
  64             l.loadClass(testType).newInstance();
  65             throw new RuntimeException("Expected LinkageError exception not thrown");
  66         } catch (LinkageError e) {
  67             String errorMsg = e.getMessage();
  68             if (!errorMsg.contains(expectedErrorMessage_part1) ||
  69                 !errorMsg.contains(expectedErrorMessage_part2) ||


  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) ||
< prev index next >