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
--- 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.");
}
}
}