test/hotspot/jtreg/runtime/SharedArchiveFile/BootAppendTests.java
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File
*** old/test/hotspot/jtreg/runtime/SharedArchiveFile/BootAppendTests.java Tue Apr 24 16:18:33 2018
--- new/test/hotspot/jtreg/runtime/SharedArchiveFile/BootAppendTests.java Tue Apr 24 16:18:33 2018
*** 1,7 ****
--- 1,7 ----
/*
! * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
! * Copyright (c) 2016, 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
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*** 25,39 ****
--- 25,40 ----
* @test
* @requires vm.cds & !vm.graal.enabled
* @summary Testing -Xbootclasspath/a support for CDS
* @requires vm.cds
* @library /test/lib
! * @modules java.base/jdk.internal.misc
! * @modules java.compiler
+ * java.base/jdk.internal.misc
* java.management
* jdk.internal.jvmstat/sun.jvmstat.monitor
* @compile javax/sound/sampled/MyClass.jasm
! * @compile org/omg/CORBA/Context.jasm
! * @compile javax/annotation/processing/FilerException.jasm
* @compile nonjdk/myPackage/MyClass.java
* @build LoadClass
* @run main/othervm BootAppendTests
*/
*** 51,61 ****
--- 52,63 ----
import jdk.test.lib.process.OutputAnalyzer;
public class BootAppendTests {
private static final String APP_CLASS = "LoadClass";
private static final String BOOT_APPEND_MODULE_CLASS = "javax/sound/sampled/MyClass";
- private static final String BOOT_APPEND_DUPLICATE_MODULE_CLASS = "org/omg/CORBA/Context";
+ "javax/annotation/processing/FilerException";
private static final String BOOT_APPEND_CLASS = "nonjdk/myPackage/MyClass";
private static final String BOOT_APPEND_MODULE_CLASS_NAME =
BOOT_APPEND_MODULE_CLASS.replace('/', '.');
private static final String BOOT_APPEND_DUPLICATE_MODULE_CLASS_NAME =
BOOT_APPEND_DUPLICATE_MODULE_CLASS.replace('/', '.');
*** 139,271 ****
--- 141,294 ----
// Test #2: If a class on -Xbootclasspath/a has the same fully qualified
// name as a class defined in boot modules, the class is not loaded
// from -Xbootclasspath/a. Verify the behavior is the same at runtime
// when CDS is enabled.
//
! // The org.omg.CORBA.Context is a boot module class. The class on
// the -Xbootclasspath/a path that has the same fully-qualified name
! // should not be loaded at runtime when CDS is enabled.
! // The one from the boot modules should be loaded instead.
! // The javax/annotation/processing/FilerException is a platform module
+ // class. The class on the -Xbootclasspath/a path that has the same
! // fully-qualified name should not be loaded at runtime when CDS is enabled.
! // The one from the platform modules should be loaded instead.
public static void testBootAppendDuplicateModuleClass() throws Exception {
for (String mode : modes) {
CDSOptions opts = (new CDSOptions())
.setXShareMode(mode).setUseVersion(false)
- .addPrefix("--add-modules", "java.corba", "-showversion",
"-Xbootclasspath/a:" + bootAppendJar, "-cp", appJar)
.addSuffix("-Xlog:class+load=info",
APP_CLASS, BOOT_APPEND_DUPLICATE_MODULE_CLASS_NAME);
OutputAnalyzer out = CDSTestUtils.runWithArchive(opts);
! CDSTestUtils.checkExec(out, opts, "[class,load] org.omg.CORBA.Context source: jrt:/java.corba");
! CDSTestUtils.checkExec(out, opts, "[class,load] javax.annotation.processing.FilerException source: jrt:/java.compiler");
}
}
// Test #3: If a class on -Xbootclasspath/a is from a package defined in boot modules,
// the class can be loaded from -Xbootclasspath/a when the module is excluded
// using --limit-modules. Verify the behavior is the same at runtime when CDS
// is enabled.
//
- // The java.desktop module is excluded using --limit-modules at runtime,
// javax.sound.sampled.MyClass is archived from -Xbootclasspath/a. It can be
! // loaded from the archive at runtime.
+ // CDS will be disabled with the --limit-modules option during runtime.
! // javax.sound.sampled.MyClass will be loaded from the jar at runtime.
public static void testBootAppendExcludedModuleClass() throws Exception {
for (String mode : modes) {
CDSOptions opts = (new CDSOptions())
.setXShareMode(mode).setUseVersion(false)
.addPrefix("-Xbootclasspath/a:" + bootAppendJar, "-showversion",
"--limit-modules=java.base", "-cp", appJar)
.addSuffix("-Xlog:class+load=info",
APP_CLASS, BOOT_APPEND_MODULE_CLASS_NAME);
OutputAnalyzer out = CDSTestUtils.runWithArchive(opts);
! CDSTestUtils.checkExec(out, opts, "[class,load] javax.sound.sampled.MyClass");
// When CDS is enabled, the shared class should be loaded from the archive.
+ CDSTestUtils.Result res = CDSTestUtils.run(opts);
+ String MATCH_PATTERN =
! ".class.load. javax.sound.sampled.MyClass source:.*bootAppend.jar*";
if (mode.equals("on")) {
CDSTestUtils.checkExec(out, opts, "[class,load] javax.sound.sampled.MyClass source: shared objects file");
+ res.assertSilentlyDisabledCDS(out -> {
+ out.shouldHaveExitValue(0)
+ .shouldMatch(MATCH_PATTERN);
+ });
+ } else {
+ res.assertNormalExit(out -> {
+ out.shouldMatch(MATCH_PATTERN);
+ });
}
}
}
// Test #4: If a class on -Xbootclasspath/a has the same fully qualified
// name as a class defined in boot modules, the class is loaded
// from -Xbootclasspath/a when the boot module is excluded using
// --limit-modules. Verify the behavior is the same at runtime
// when CDS is enabled.
//
! // The org.omg.CORBA.Context is a boot module class. The class
! // on -Xbootclasspath/a that has the same fully-qualified name
! // as org.omg.CORBA.Context can be loaded at runtime when
! // java.corba is excluded.
! // The javax.annotation.processing.FilerException is a platform module class.
! // The class on -Xbootclasspath/a that has the same fully-qualified name
! // as javax.annotation.processing.FilerException can be loaded at runtime when
! // java.compiler is excluded.
+ // CDS is disabled during runtime if the --limit-modules option is
+ // specified.
public static void testBootAppendDuplicateExcludedModuleClass() throws Exception {
for (String mode : modes) {
CDSOptions opts = (new CDSOptions())
.setXShareMode(mode).setUseVersion(false)
.addPrefix("-Xbootclasspath/a:" + bootAppendJar, "-showversion",
"--limit-modules=java.base", "-cp", appJar)
.addSuffix("-Xlog:class+load=info",
APP_CLASS, BOOT_APPEND_DUPLICATE_MODULE_CLASS_NAME);
! OutputAnalyzer out = CDSTestUtils.runWithArchive(opts);
CDSTestUtils.checkExec(out, opts, "[class,load] org.omg.CORBA.Context");
if (!CDSTestUtils.isUnableToMap(out)) {
! if (mode.equals("off")) {
out.shouldMatch(".*\\[class,load\\] org.omg.CORBA.Context source:.*bootAppend.jar");
! CDSTestUtils.Result res = CDSTestUtils.run(opts);
+ String MATCH_PATTERN =
+ ".class.load. javax.annotation.processing.FilerException source:.*bootAppend.jar*";
! if (mode.equals("on")) {
+ res.assertSilentlyDisabledCDS(out -> {
+ out.shouldHaveExitValue(0)
+ .shouldMatch(MATCH_PATTERN);
+ });
} else {
CDSTestUtils.checkExec(out, opts, "[class,load] org.omg.CORBA.Context source: shared objects file");
}
+ res.assertNormalExit(out -> {
+ out.shouldMatch(MATCH_PATTERN);
+ });
}
}
}
// Test #5: If a class on -Xbootclasspath/a is not from named modules,
// the class can be loaded at runtime. Verify the behavior is
// the same at runtime when CDS is enabled.
//
// The nonjdk.myPackage is not defined in named modules. The
// archived nonjdk.myPackage.MyClass from -Xbootclasspath/a
// can be loaded at runtime when CDS is enabled.
+ // nonjdk.myPackage.MyClass will be loaded from the jar in
+ // -Xbootclasspath/a since CDS will be disabled with the
+ // --limit-modules option.
public static void testBootAppendClass() throws Exception {
for (String mode : modes) {
CDSOptions opts = (new CDSOptions())
.setXShareMode(mode).setUseVersion(false)
.addPrefix("-Xbootclasspath/a:" + bootAppendJar, "-showversion",
"--limit-modules=java.base", "-cp", appJar)
.addSuffix("-Xlog:class+load=info",
APP_CLASS, BOOT_APPEND_CLASS_NAME);
! OutputAnalyzer out = CDSTestUtils.runWithArchive(opts);
CDSTestUtils.checkExec(out, opts, "[class,load] nonjdk.myPackage.MyClass");
// If CDS is enabled, the nonjdk.myPackage.MyClass should be loaded
// from the shared archive.
! CDSTestUtils.Result res = CDSTestUtils.run(opts);
+ String MATCH_PATTERN =
+ ".class.load. nonjdk.myPackage.MyClass source:.*bootAppend.jar*";
if (mode.equals("on")) {
CDSTestUtils.checkExec(out, opts,
"[class,load] nonjdk.myPackage.MyClass source: shared objects file");
+ res.assertSilentlyDisabledCDS(out -> {
+ out.shouldHaveExitValue(0)
+ .shouldMatch(MATCH_PATTERN);
+ });
+ } else {
+ res.assertNormalExit(out -> {
+ out.shouldMatch(MATCH_PATTERN);
+ });
}
}
}
// Test #6: This is similar to Test #5. During runtime, an extra dir
// is appended to the bootclasspath. It should not invalidate
! // the shared archive. However, CDS will be disabled with the
+ // --limit-modules in the command line.
public static void testBootAppendExtraDir() throws Exception {
for (String mode : modes) {
CDSOptions opts = (new CDSOptions())
.setXShareMode(mode).setUseVersion(false)
.addPrefix("-Xbootclasspath/a:" + bootAppendJar + File.pathSeparator + appJar,
"-showversion", "--limit-modules=java.base", "-cp", appJar)
.addSuffix("-Xlog:class+load=info",
APP_CLASS, BOOT_APPEND_CLASS_NAME);
! OutputAnalyzer out = CDSTestUtils.runWithArchive(opts);
CDSTestUtils.checkExec(out, opts, "[class,load] nonjdk.myPackage.MyClass");
// If CDS is enabled, the nonjdk.myPackage.MyClass should be loaded
// from the shared archive.
! CDSTestUtils.Result res = CDSTestUtils.run(opts);
+ String MATCH_PATTERN =
+ ".class.load. nonjdk.myPackage.MyClass source:.*bootAppend.jar*";
if (mode.equals("on")) {
CDSTestUtils.checkExec(out, opts,
"[class,load] nonjdk.myPackage.MyClass source: shared objects file");
+ res.assertSilentlyDisabledCDS(out -> {
+ out.shouldHaveExitValue(0)
+ .shouldMatch(MATCH_PATTERN);
+ });
+ } else {
+ res.assertNormalExit(out -> {
+ out.shouldMatch(MATCH_PATTERN);
+ });
}
}
}
}
test/hotspot/jtreg/runtime/SharedArchiveFile/BootAppendTests.java
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File