8196124: [testbug] runtime/appcds/jigsaw/classpathtests/DummyClassesInBootClassPath.java passes despite of error
authorccheung
Thu, 01 Feb 2018 10:55:27 -0800
changeset 48832 f1e8ddd6fdc4
parent 48831 05894c073b7e
child 48833 614c7e117327
8196124: [testbug] runtime/appcds/jigsaw/classpathtests/DummyClassesInBootClassPath.java passes despite of error Summary: Create another archive with whitebox.jar in the -Xbootclasspath/a; check output from TestCommon.execCommon(). Reviewed-by: iklam, mseledtsov
test/hotspot/jtreg/runtime/appcds/jigsaw/classpathtests/DummyClassesInBootClassPath.java
test/hotspot/jtreg/runtime/appcds/test-classes/DummyClassHelper.java
--- a/test/hotspot/jtreg/runtime/appcds/jigsaw/classpathtests/DummyClassesInBootClassPath.java	Thu Feb 01 13:30:53 2018 -0500
+++ b/test/hotspot/jtreg/runtime/appcds/jigsaw/classpathtests/DummyClassesInBootClassPath.java	Thu Feb 01 10:55:27 2018 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -45,6 +45,16 @@
 public class DummyClassesInBootClassPath {
     private static final String METHOD_NAME = "thisClassIsDummy()";
 
+    static void checkOutput(OutputAnalyzer output, String[] classNames) throws Exception {
+        for (int i = 0; i < classNames.length; i++) {
+            String cn = classNames[i].replace('/', '.');
+            TestCommon.checkExec(output,
+                "java.lang.NoSuchMethodException: " + cn + "." +
+                METHOD_NAME);
+            output.shouldNotContain(cn + ".class should be in shared space.");
+        }
+    }
+
     public static void main(String[] args) throws Exception {
         String classNames[] = { "java/net/HttpCookie",
                                 "javax/activation/MimeType"};
@@ -52,8 +62,8 @@
 
         String appJar = TestCommon.getTestJar("dummyClasses.jar");
         OutputAnalyzer dumpOutput = TestCommon.dump(
-            appJar, classNames, "-Xbootclasspath/a:" + appJar);
-
+            appJar, classNames, "-Xbootclasspath/a:" + appJar,
+            "--add-modules", "java.activation");
         List<String> argsList = new ArrayList<String>();
         for (int i = 0; i < classNames.length; i++) {
             argsList.add(classNames[i].replace('/', '.'));
@@ -61,27 +71,24 @@
         String[] arguments = new String[argsList.size()];
         arguments = argsList.toArray(arguments);
         OutputAnalyzer execOutput = TestCommon.execCommon(
-            "-cp", TestCommon.getTestDir("."), "-verbose:class",
-            "--add-modules", "java.activation",
-            "-Xbootclasspath/a:" + appJar, "DummyClassHelper",
-            arguments[0], arguments[1]);
-        for (int i = 0; i < arguments.length; i++) {
-            TestCommon.checkExec(execOutput,
-                "java.lang.NoSuchMethodException: " + arguments[i] + "." +
-                METHOD_NAME);
-        }
+            "--add-modules", "java.activation", "-Xbootclasspath/a:" + appJar,
+            "DummyClassHelper", arguments[0], arguments[1]);
+        checkOutput(execOutput, classNames);
 
         JarBuilder.build(true, "WhiteBox", "sun/hotspot/WhiteBox");
         String whiteBoxJar = TestCommon.getTestJar("WhiteBox.jar");
         String bootClassPath = "-Xbootclasspath/a:" + appJar +
             File.pathSeparator + whiteBoxJar;
+        dumpOutput = TestCommon.dump(
+            appJar, classNames, bootClassPath, "--add-modules", "java.activation");
         argsList.add("testWithWhiteBox");
         arguments = new String[argsList.size()];
         arguments = argsList.toArray(arguments);
         String[] opts = {"-XX:+UnlockDiagnosticVMOptions", "-XX:+WhiteBoxAPI",
-            bootClassPath, "-XX:+TraceClassPaths", "DummyClassHelper",
-            arguments[0], arguments[1], arguments[2]};
-        OutputAnalyzer output = TestCommon.execCommon(opts);
+            "--add-modules", "java.activation", bootClassPath, "-Xlog:class+path=trace",
+            "DummyClassHelper", arguments[0], arguments[1], arguments[2]};
+        execOutput = TestCommon.execCommon(opts);
+        checkOutput(execOutput, classNames);
     }
 }
 
--- a/test/hotspot/jtreg/runtime/appcds/test-classes/DummyClassHelper.java	Thu Feb 01 13:30:53 2018 -0500
+++ b/test/hotspot/jtreg/runtime/appcds/test-classes/DummyClassHelper.java	Thu Feb 01 10:55:27 2018 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -27,30 +27,32 @@
 import sun.hotspot.WhiteBox;
 
 public class DummyClassHelper {
+    static void checkDummyMethod(Class<?> cls, String className) {
+        Method m = null;
+        try {
+            m = cls.getMethod("thisClassIsDummy");
+            throw new java.lang.RuntimeException(className +
+                " should be loaded from the jimage and should not have the thisClassIsDummy() method.");
+        } catch(NoSuchMethodException ex) {
+            System.out.println(ex.toString());
+        }
+    }
+
     public static void main(String[] args) throws Exception {
         String[] classNames = {args[0], args[1]};
         Class cls = null;
-        if (args.length == 2) {
-            for (int i = 0; i < classNames.length; i++) {
-                Method m = null;
-                cls = Class.forName(classNames[i]);
-                try {
-                    m = cls.getMethod("thisClassIsDummy");
+        boolean doWBCheck = (args.length == 3);
+        WhiteBox wb = null;
+        if (doWBCheck) {
+            wb = WhiteBox.getWhiteBox();
+        }
+        for (int i = 0; i < classNames.length; i++) {
+            cls = Class.forName(classNames[i]);
+            checkDummyMethod(cls, classNames[i]);
+            if (doWBCheck) {
+                if (!wb.isSharedClass(cls)) {
                     throw new java.lang.RuntimeException(classNames[i] +
-                        " should be loaded from the jimage and should not have the thisClassIsDummy() method.");
-                } catch(NoSuchMethodException ex) {
-                    System.out.println(ex.toString());
-                }
-            }
-        } else {
-            WhiteBox wb = WhiteBox.getWhiteBox();
-            for (int i = 0; i < classNames.length; i++) {
-                cls = Class.forName(classNames[i]);
-                if (!wb.isSharedClass(cls)) {
-                    System.out.println(classNames[i] + ".class" + " is not in shared space as expected.");
-                } else {
-                    throw new java.lang.RuntimeException(classNames[i] +
-                        ".class shouldn't be in shared space.");
+                        ".class should be in shared space.");
                 }
             }
         }