< prev index next > test/hotspot/jtreg/runtime/cds/appcds/aotClassLinking/BulkLoaderTest.java
Print this page
/*
* @test id=static
* @requires vm.cds.supports.aot.class.linking
* @comment work around JDK-8345635
* @requires !vm.jvmci.enabled
- * @library /test/jdk/lib/testlibrary /test/lib
+ * @library /test/jdk/lib/testlibrary /test/lib /test/hotspot/jtreg/runtime/cds/appcds/test-classes
* @build InitiatingLoaderTester BadOldClassA BadOldClassB
- * @build BulkLoaderTest
+ * @build BulkLoaderTest SimpleCusty
* @run driver jdk.test.lib.helpers.ClassFileInstaller -jar BulkLoaderTestApp.jar BulkLoaderTestApp MyUtil InitiatingLoaderTester
* BadOldClassA BadOldClassB
+ * @run driver jdk.test.lib.helpers.ClassFileInstaller -jar cust.jar
+ * SimpleCusty
* @run driver BulkLoaderTest STATIC
*/
/*
* @test id=dynamic
* @requires vm.cds.supports.aot.class.linking
* @comment work around JDK-8345635
* @requires !vm.jvmci.enabled
- * @library /test/jdk/lib/testlibrary /test/lib
+ * @library /test/jdk/lib/testlibrary /test/lib /test/hotspot/jtreg/runtime/cds/appcds/test-classes
* @build InitiatingLoaderTester BadOldClassA BadOldClassB
- * @build jdk.test.whitebox.WhiteBox BulkLoaderTest
+ * @build jdk.test.whitebox.WhiteBox BulkLoaderTest SimpleCusty
* @run driver jdk.test.lib.helpers.ClassFileInstaller -jar BulkLoaderTestApp.jar BulkLoaderTestApp MyUtil InitiatingLoaderTester
* BadOldClassA BadOldClassB
+ * @run driver jdk.test.lib.helpers.ClassFileInstaller -jar cust.jar
+ * SimpleCusty
* @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox
* @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xbootclasspath/a:. BulkLoaderTest DYNAMIC
*/
/*
* @test id=aot
* @requires vm.cds.supports.aot.class.linking
* @comment work around JDK-8345635
* @requires !vm.jvmci.enabled
- * @library /test/jdk/lib/testlibrary /test/lib
+ * @library /test/jdk/lib/testlibrary /test/lib /test/hotspot/jtreg/runtime/cds/appcds/test-classes
* @build InitiatingLoaderTester BadOldClassA BadOldClassB
- * @build BulkLoaderTest
+ * @build BulkLoaderTest SimpleCusty
* @run driver jdk.test.lib.helpers.ClassFileInstaller -jar BulkLoaderTestApp.jar BulkLoaderTestApp MyUtil InitiatingLoaderTester
* BadOldClassA BadOldClassB
+ * @run driver jdk.test.lib.helpers.ClassFileInstaller -jar cust.jar
+ * SimpleCusty
* @run driver BulkLoaderTest AOT
*/
import java.io.File;
import java.lang.StackWalker.StackFrame;
+ import java.net.URL;
+ import java.net.URLClassLoader;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import java.util.Set;
}
@Override
public String[] vmArgs(RunMode runMode) {
return new String[] {
- "-Xlog:cds,cds+aot+load",
+ "-Xlog:cds,cds+aot+load,cds+class=debug",
"-XX:+AOTClassLinking",
};
}
@Override
@Override
public void checkExecution(OutputAnalyzer out, RunMode runMode) throws Exception {
if (isAOTWorkflow() && runMode == RunMode.TRAINING) {
out.shouldContain("Skipping BadOldClassA: Unlinked class not supported by AOTConfiguration");
}
+
+ if (isDumping(runMode)) {
+ // Check that we are archiving classes for custom class loaders.
+ out.shouldMatch("cds,class.* SimpleCusty");
+ }
}
}
}
class BulkLoaderTestApp {
public static void main(String args[]) throws Exception {
checkClasses();
checkInitiatingLoader();
checkOldClasses();
+ checkCustomLoader();
}
// Check the ClassLoader/Module/Package/ProtectionDomain/CodeSource of classes that are aot-linked
static void checkClasses() throws Exception {
check(String.class,
throw new RuntimeException("Must not succeed");
} catch (VerifyError e) {
System.out.println("Caught VerifyError for BadOldClassB: " + e);
}
}
+
+
+ static void checkCustomLoader() throws Exception {
+ Object o = initFromCustomLoader();
+ System.out.println(o);
+ }
+
+ static Object initFromCustomLoader() throws Exception {
+ String path = "cust.jar";
+ URL url = new File(path).toURI().toURL();
+ URL[] urls = new URL[] {url};
+ URLClassLoader urlClassLoader =
+ new URLClassLoader("MyLoader", urls, null);
+ Class c = Class.forName("SimpleCusty", true, urlClassLoader);
+ return c.newInstance();
+ }
}
class MyUtil {
// depth is 0-based -- i.e., depth==0 returns the class of the immediate caller of getCallerClass
static Class<?> getCallerClass(int depth) {
< prev index next >