mirror of
https://github.com/openjdk/jdk.git
synced 2026-03-22 05:50:03 +00:00
8177728: [TESTBUG] Improve CDS test utils
Improved and expanded CDS test utils; updated CDS tests to use new utils. Reviewed-by: jiangli, ccheung
This commit is contained in:
parent
ca72444bf9
commit
ca99a2ef45
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2014, 2017, 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
|
||||
@ -33,7 +33,8 @@
|
||||
* @run main ArchiveDoesNotExist
|
||||
*/
|
||||
|
||||
import jdk.test.lib.process.ProcessTools;
|
||||
import jdk.test.lib.cds.CDSOptions;
|
||||
import jdk.test.lib.cds.CDSTestUtils;
|
||||
import jdk.test.lib.process.OutputAnalyzer;
|
||||
import java.io.File;
|
||||
|
||||
@ -45,27 +46,22 @@ public class ArchiveDoesNotExist {
|
||||
if (cdsFile.exists())
|
||||
throw new RuntimeException("Test error: cds file already exists");
|
||||
|
||||
// Sharing: on
|
||||
ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
|
||||
"-XX:+UnlockDiagnosticVMOptions",
|
||||
"-XX:SharedArchiveFile=./" + fileName,
|
||||
"-Xshare:on",
|
||||
"-version");
|
||||
CDSOptions opts = (new CDSOptions()).setArchiveName(fileName);
|
||||
|
||||
OutputAnalyzer output = new OutputAnalyzer(pb.start());
|
||||
output.shouldContain("Specified shared archive not found");
|
||||
output.shouldHaveExitValue(1);
|
||||
// -Xshare=on
|
||||
OutputAnalyzer out = CDSTestUtils.runWithArchive(opts);
|
||||
if (!CDSTestUtils.isUnableToMap(out)) {
|
||||
out.shouldContain("Specified shared archive not found")
|
||||
.shouldHaveExitValue(1);
|
||||
}
|
||||
|
||||
// Sharing: auto
|
||||
pb = ProcessTools.createJavaProcessBuilder(
|
||||
"-XX:+UnlockDiagnosticVMOptions",
|
||||
"-XX:SharedArchiveFile=./" + fileName,
|
||||
"-Xshare:auto",
|
||||
"-version");
|
||||
|
||||
output = new OutputAnalyzer(pb.start());
|
||||
output.shouldMatch("(java|openjdk) version");
|
||||
output.shouldNotContain("sharing");
|
||||
output.shouldHaveExitValue(0);
|
||||
// -Xshare=auto
|
||||
opts.setXShareMode("auto");
|
||||
out = CDSTestUtils.runWithArchive(opts);
|
||||
if (!CDSTestUtils.isUnableToMap(out)) {
|
||||
out.shouldMatch("(java|openjdk) version")
|
||||
.shouldNotContain("sharing")
|
||||
.shouldHaveExitValue(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2016, 2017, 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
|
||||
@ -43,6 +43,8 @@ import java.io.PrintStream;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
|
||||
import jdk.test.lib.cds.CDSOptions;
|
||||
import jdk.test.lib.cds.CDSTestUtils;
|
||||
import jdk.test.lib.process.ProcessTools;
|
||||
import jdk.test.lib.process.OutputAnalyzer;
|
||||
|
||||
@ -67,45 +69,45 @@ public class BootAppendTests {
|
||||
|
||||
public static void main(String... args) throws Exception {
|
||||
dumpArchive();
|
||||
|
||||
logTestCase("1");
|
||||
testBootAppendModuleClass();
|
||||
|
||||
log("TESTCASE: 2");
|
||||
testBootAppendDuplicateModuleClass();
|
||||
|
||||
logTestCase("3");
|
||||
testBootAppendExcludedModuleClass();
|
||||
|
||||
logTestCase("4");
|
||||
testBootAppendDuplicateExcludedModuleClass();
|
||||
|
||||
logTestCase("5");
|
||||
testBootAppendClass();
|
||||
}
|
||||
|
||||
private static void logTestCase(String msg) {
|
||||
System.out.println();
|
||||
System.out.printf("TESTCASE: %s", msg);
|
||||
System.out.println();
|
||||
}
|
||||
|
||||
static void dumpArchive() throws Exception {
|
||||
// create the classlist
|
||||
File classlist = new File(new File(System.getProperty("test.classes", ".")),
|
||||
"BootAppendTest.classlist");
|
||||
FileOutputStream fos = new FileOutputStream(classlist);
|
||||
PrintStream ps = new PrintStream(fos);
|
||||
for (String s : ARCHIVE_CLASSES) {
|
||||
ps.println(s);
|
||||
}
|
||||
ps.close();
|
||||
fos.close();
|
||||
File classlist = CDSTestUtils.makeClassList(ARCHIVE_CLASSES);
|
||||
|
||||
// build jar files
|
||||
appJar = ClassFileInstaller.writeJar("app.jar", APP_CLASS);
|
||||
bootAppendJar = ClassFileInstaller.writeJar("bootAppend.jar",
|
||||
BOOT_APPEND_MODULE_CLASS, BOOT_APPEND_DUPLICATE_MODULE_CLASS, BOOT_APPEND_CLASS);
|
||||
|
||||
// dump
|
||||
ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
|
||||
"-XX:+UnlockDiagnosticVMOptions",
|
||||
"-XX:SharedArchiveFile=./BootAppendTests.jsa",
|
||||
"-XX:SharedClassListFile=" + classlist.getPath(),
|
||||
"-XX:+PrintSharedSpaces",
|
||||
"-Xbootclasspath/a:" + bootAppendJar,
|
||||
"-Xshare:dump");
|
||||
OutputAnalyzer output = new OutputAnalyzer(pb.start());
|
||||
output.shouldContain("Loading classes to share")
|
||||
.shouldHaveExitValue(0);
|
||||
|
||||
OutputAnalyzer out = CDSTestUtils.createArchiveAndCheck(
|
||||
"-Xbootclasspath/a:" + bootAppendJar,
|
||||
"-XX:SharedClassListFile=" + classlist.getPath());
|
||||
// Make sure all the classes were successfully archived.
|
||||
for (String archiveClass : ARCHIVE_CLASSES) {
|
||||
output.shouldNotContain("Preload Warning: Cannot find " + archiveClass);
|
||||
out.shouldNotContain("Preload Warning: Cannot find " + archiveClass);
|
||||
}
|
||||
}
|
||||
|
||||
@ -119,16 +121,13 @@ public class BootAppendTests {
|
||||
// should not be loaded at runtime.
|
||||
public static void testBootAppendModuleClass() throws Exception {
|
||||
for (String mode : modes) {
|
||||
ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
|
||||
"-XX:+UnlockDiagnosticVMOptions",
|
||||
"-XX:SharedArchiveFile=./BootAppendTests.jsa",
|
||||
"-cp", appJar,
|
||||
"-Xbootclasspath/a:" + bootAppendJar,
|
||||
"-Xshare:" + mode,
|
||||
APP_CLASS,
|
||||
BOOT_APPEND_MODULE_CLASS_NAME);
|
||||
OutputAnalyzer output = new OutputAnalyzer(pb.start());
|
||||
output.shouldContain("java.lang.ClassNotFoundException: javax.sound.sampled.MyClass");
|
||||
CDSOptions opts = (new CDSOptions())
|
||||
.setXShareMode(mode).setUseVersion(false)
|
||||
.addPrefix("-Xbootclasspath/a:" + bootAppendJar, "-cp", appJar)
|
||||
.addSuffix(APP_CLASS, BOOT_APPEND_MODULE_CLASS_NAME);
|
||||
|
||||
CDSTestUtils.runWithArchive(opts)
|
||||
.shouldContain("java.lang.ClassNotFoundException: javax.sound.sampled.MyClass");
|
||||
}
|
||||
}
|
||||
|
||||
@ -143,17 +142,13 @@ public class BootAppendTests {
|
||||
// The one from the boot modules should be loaded instead.
|
||||
public static void testBootAppendDuplicateModuleClass() throws Exception {
|
||||
for (String mode : modes) {
|
||||
ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
|
||||
"-XX:+UnlockDiagnosticVMOptions",
|
||||
"-XX:SharedArchiveFile=./BootAppendTests.jsa",
|
||||
"-XX:+TraceClassLoading",
|
||||
"-cp", appJar,
|
||||
"-Xbootclasspath/a:" + bootAppendJar,
|
||||
"-Xshare:" + mode,
|
||||
APP_CLASS,
|
||||
BOOT_APPEND_DUPLICATE_MODULE_CLASS_NAME);
|
||||
OutputAnalyzer output = new OutputAnalyzer(pb.start());
|
||||
output.shouldContain("[class,load] org.omg.CORBA.Context source: jrt:/java.corba");
|
||||
CDSOptions opts = (new CDSOptions())
|
||||
.setXShareMode(mode).setUseVersion(false)
|
||||
.addPrefix("-Xbootclasspath/a:" + bootAppendJar, "-cp", appJar)
|
||||
.addSuffix(APP_CLASS, BOOT_APPEND_DUPLICATE_MODULE_CLASS_NAME);
|
||||
|
||||
CDSTestUtils.runWithArchive(opts)
|
||||
.shouldContain("[class,load] org.omg.CORBA.Context source: jrt:/java.corba");
|
||||
}
|
||||
}
|
||||
|
||||
@ -167,22 +162,19 @@ public class BootAppendTests {
|
||||
// loaded from the archive at runtime.
|
||||
public static void testBootAppendExcludedModuleClass() throws Exception {
|
||||
for (String mode : modes) {
|
||||
ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
|
||||
"-XX:+UnlockDiagnosticVMOptions",
|
||||
"-XX:SharedArchiveFile=./BootAppendTests.jsa",
|
||||
"-XX:+TraceClassLoading",
|
||||
"-cp", appJar,
|
||||
"-Xbootclasspath/a:" + bootAppendJar,
|
||||
"--limit-modules=java.base",
|
||||
"-Xshare:" + mode,
|
||||
APP_CLASS,
|
||||
BOOT_APPEND_MODULE_CLASS_NAME);
|
||||
OutputAnalyzer output = new OutputAnalyzer(pb.start());
|
||||
output.shouldContain("[class,load] javax.sound.sampled.MyClass");
|
||||
CDSOptions opts = (new CDSOptions())
|
||||
.setXShareMode(mode).setUseVersion(false)
|
||||
.addPrefix("-Xbootclasspath/a:" + bootAppendJar,
|
||||
"--limit-modules=java.base", "-cp", appJar)
|
||||
.addSuffix("-Xlog:class+load=info",
|
||||
APP_CLASS, BOOT_APPEND_MODULE_CLASS_NAME);
|
||||
|
||||
OutputAnalyzer out = CDSTestUtils.runWithArchive(opts)
|
||||
.shouldContain("[class,load] javax.sound.sampled.MyClass");
|
||||
|
||||
// When CDS is enabled, the shared class should be loaded from the archive.
|
||||
if (mode.equals("on")) {
|
||||
output.shouldContain("[class,load] javax.sound.sampled.MyClass source: shared objects file");
|
||||
out.shouldContain("[class,load] javax.sound.sampled.MyClass source: shared objects file");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -199,19 +191,16 @@ public class BootAppendTests {
|
||||
// java.corba is excluded.
|
||||
public static void testBootAppendDuplicateExcludedModuleClass() throws Exception {
|
||||
for (String mode : modes) {
|
||||
ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
|
||||
"-XX:+UnlockDiagnosticVMOptions",
|
||||
"-XX:SharedArchiveFile=./BootAppendTests.jsa",
|
||||
"-XX:+TraceClassLoading",
|
||||
"-cp", appJar,
|
||||
"-Xbootclasspath/a:" + bootAppendJar,
|
||||
"--limit-modules=java.base",
|
||||
"-Xshare:" + mode,
|
||||
APP_CLASS,
|
||||
BOOT_APPEND_DUPLICATE_MODULE_CLASS_NAME);
|
||||
OutputAnalyzer output = new OutputAnalyzer(pb.start());
|
||||
output.shouldContain("[class,load] org.omg.CORBA.Context");
|
||||
output.shouldMatch(".*\\[class,load\\] org.omg.CORBA.Context source:.*bootAppend.jar");
|
||||
CDSOptions opts = (new CDSOptions())
|
||||
.setXShareMode(mode).setUseVersion(false)
|
||||
.addPrefix("-Xbootclasspath/a:" + bootAppendJar,
|
||||
"--limit-modules=java.base", "-cp", appJar)
|
||||
.addSuffix("-Xlog:class+load=info",
|
||||
APP_CLASS, BOOT_APPEND_DUPLICATE_MODULE_CLASS_NAME);
|
||||
|
||||
CDSTestUtils.runWithArchive(opts)
|
||||
.shouldContain("[class,load] org.omg.CORBA.Context")
|
||||
.shouldMatch(".*\\[class,load\\] org.omg.CORBA.Context source:.*bootAppend.jar");
|
||||
}
|
||||
}
|
||||
|
||||
@ -224,22 +213,20 @@ public class BootAppendTests {
|
||||
// can be loaded at runtime when CDS is enabled.
|
||||
public static void testBootAppendClass() throws Exception {
|
||||
for (String mode : modes) {
|
||||
ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
|
||||
"-XX:+UnlockDiagnosticVMOptions",
|
||||
"-XX:SharedArchiveFile=./BootAppendTests.jsa",
|
||||
"-XX:+TraceClassLoading",
|
||||
"-cp", appJar,
|
||||
"-Xbootclasspath/a:" + bootAppendJar,
|
||||
"-Xshare:" + mode,
|
||||
APP_CLASS,
|
||||
BOOT_APPEND_CLASS_NAME);
|
||||
OutputAnalyzer output = new OutputAnalyzer(pb.start());
|
||||
output.shouldContain("[class,load] nonjdk.myPackage.MyClass");
|
||||
CDSOptions opts = (new CDSOptions())
|
||||
.setXShareMode(mode).setUseVersion(false)
|
||||
.addPrefix("-Xbootclasspath/a:" + bootAppendJar,
|
||||
"--limit-modules=java.base", "-cp", appJar)
|
||||
.addSuffix("-Xlog:class+load=info",
|
||||
APP_CLASS, BOOT_APPEND_CLASS_NAME);
|
||||
|
||||
OutputAnalyzer out = CDSTestUtils.runWithArchive(opts)
|
||||
.shouldContain("[class,load] nonjdk.myPackage.MyClass");
|
||||
|
||||
// If CDS is enabled, the nonjdk.myPackage.MyClass should be loaded
|
||||
// from the shared archive.
|
||||
if (mode.equals("on")) {
|
||||
output.shouldContain(
|
||||
out.shouldContain(
|
||||
"[class,load] nonjdk.myPackage.MyClass source: shared objects file");
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,115 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2016, 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.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* version 2 for more details (a copy is included in the LICENSE file that
|
||||
* accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License version
|
||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.com if you need additional information or have any
|
||||
* questions.
|
||||
*/
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.PrintStream;
|
||||
import jdk.test.lib.process.OutputAnalyzer;
|
||||
|
||||
|
||||
// This class contains common test utilities for CDS testing
|
||||
public class CDSTestUtils {
|
||||
|
||||
// check result of 'dump' operation
|
||||
public static void checkDump(OutputAnalyzer output, String... extraMatches)
|
||||
throws Exception {
|
||||
|
||||
output.shouldContain("Loading classes to share");
|
||||
output.shouldHaveExitValue(0);
|
||||
|
||||
for (String match : extraMatches) {
|
||||
output.shouldContain(match);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// check the output for indication that mapping of the archive failed
|
||||
public static boolean isUnableToMap(OutputAnalyzer output) {
|
||||
String outStr = output.getOutput();
|
||||
if ((output.getExitValue() == 1) && (
|
||||
outStr.contains("Unable to reserve shared space at required address") ||
|
||||
outStr.contains("Unable to map ReadOnly shared space at required address") ||
|
||||
outStr.contains("Unable to map ReadWrite shared space at required address") ||
|
||||
outStr.contains("Unable to map MiscData shared space at required address") ||
|
||||
outStr.contains("Unable to map MiscCode shared space at required address") ||
|
||||
outStr.contains("Unable to map shared string space at required address") ||
|
||||
outStr.contains("Could not allocate metaspace at a compatible address") ||
|
||||
outStr.contains("Unable to allocate shared string space: range is not within java heap") ))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// check result of 'exec' operation, that is when JVM is run using the archive
|
||||
public static void checkExec(OutputAnalyzer output, String... extraMatches) throws Exception {
|
||||
if (isUnableToMap(output)) {
|
||||
System.out.println("Unable to map shared archive: test did not complete; assumed PASS");
|
||||
return;
|
||||
}
|
||||
output.shouldContain("sharing");
|
||||
output.shouldHaveExitValue(0);
|
||||
|
||||
for (String match : extraMatches) {
|
||||
output.shouldContain(match);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// get the file object for the test artifact
|
||||
private static File getTestArtifactFile(String prefix, String name) {
|
||||
File dir = new File(System.getProperty("test.classes", "."));
|
||||
return new File(dir, prefix + name);
|
||||
}
|
||||
|
||||
|
||||
// create file containing the specified class list
|
||||
public static File makeClassList(String testCaseName, String classes[])
|
||||
throws Exception {
|
||||
|
||||
File classList = getTestArtifactFile(testCaseName, "test.classlist");
|
||||
FileOutputStream fos = new FileOutputStream(classList);
|
||||
PrintStream ps = new PrintStream(fos);
|
||||
|
||||
addToClassList(ps, classes);
|
||||
|
||||
ps.close();
|
||||
fos.close();
|
||||
|
||||
return classList;
|
||||
}
|
||||
|
||||
|
||||
private static void addToClassList(PrintStream ps, String classes[])
|
||||
throws IOException
|
||||
{
|
||||
if (classes != null) {
|
||||
for (String s : classes) {
|
||||
ps.println(s);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2013, 2017, 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
|
||||
@ -30,7 +30,7 @@
|
||||
* java.management
|
||||
*/
|
||||
|
||||
import jdk.test.lib.process.ProcessTools;
|
||||
import jdk.test.lib.cds.CDSTestUtils;
|
||||
import jdk.test.lib.process.OutputAnalyzer;
|
||||
|
||||
public class CdsDifferentCompactStrings {
|
||||
@ -45,32 +45,14 @@ public class CdsDifferentCompactStrings {
|
||||
String createCompactStringsArgument = "-XX:" + create + "CompactStrings";
|
||||
String loadCompactStringsArgument = "-XX:" + load + "CompactStrings";
|
||||
|
||||
String filename = "./CdsDifferentCompactStrings" + create + ".jsa";
|
||||
OutputAnalyzer out = CDSTestUtils.createArchive(createCompactStringsArgument);
|
||||
CDSTestUtils.checkDump(out);
|
||||
|
||||
ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
|
||||
"-XX:+UnlockDiagnosticVMOptions",
|
||||
"-XX:SharedArchiveFile=" + filename,
|
||||
"-Xshare:dump",
|
||||
createCompactStringsArgument);
|
||||
|
||||
OutputAnalyzer output = new OutputAnalyzer(pb.start());
|
||||
output.shouldContain("Loading classes to share");
|
||||
output.shouldHaveExitValue(0);
|
||||
|
||||
pb = ProcessTools.createJavaProcessBuilder(
|
||||
"-XX:+UnlockDiagnosticVMOptions",
|
||||
"-XX:SharedArchiveFile=" + filename,
|
||||
"-Xshare:on",
|
||||
loadCompactStringsArgument,
|
||||
"-version");
|
||||
|
||||
output = new OutputAnalyzer(pb.start());
|
||||
try {
|
||||
output.shouldContain("The shared archive file's CompactStrings " +
|
||||
"setting .* does not equal the current CompactStrings setting");
|
||||
} catch (RuntimeException e) {
|
||||
output.shouldContain("Unable to use shared archive");
|
||||
out = CDSTestUtils.runWithArchive(loadCompactStringsArgument);
|
||||
if (!CDSTestUtils.isUnableToMap(out)) {
|
||||
out.shouldMatch("The shared archive file's CompactStrings " +
|
||||
"setting .* does not equal the current CompactStrings setting")
|
||||
.shouldHaveExitValue(1);
|
||||
}
|
||||
output.shouldHaveExitValue(1);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2013, 2017, 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
|
||||
@ -34,7 +34,7 @@
|
||||
* java.management
|
||||
*/
|
||||
|
||||
import jdk.test.lib.process.ProcessTools;
|
||||
import jdk.test.lib.cds.CDSTestUtils;
|
||||
import jdk.test.lib.process.OutputAnalyzer;
|
||||
import jdk.test.lib.Platform;
|
||||
|
||||
@ -61,26 +61,6 @@ public class CdsDifferentObjectAlignment {
|
||||
createAlignment;
|
||||
String loadAlignmentArgument = "-XX:ObjectAlignmentInBytes=" +
|
||||
loadAlignment;
|
||||
String filename = "./CdsDifferentObjectAlignment" + createAlignment + ".jsa";
|
||||
|
||||
ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
|
||||
"-XX:+UnlockDiagnosticVMOptions",
|
||||
"-XX:SharedArchiveFile=" + filename,
|
||||
"-Xshare:dump",
|
||||
createAlignmentArgument);
|
||||
|
||||
OutputAnalyzer output = new OutputAnalyzer(pb.start());
|
||||
output.shouldContain("Loading classes to share");
|
||||
output.shouldHaveExitValue(0);
|
||||
|
||||
pb = ProcessTools.createJavaProcessBuilder(
|
||||
"-XX:+UnlockDiagnosticVMOptions",
|
||||
"-XX:SharedArchiveFile=" + filename,
|
||||
"-Xshare:on",
|
||||
loadAlignmentArgument,
|
||||
"-version");
|
||||
|
||||
output = new OutputAnalyzer(pb.start());
|
||||
String expectedErrorMsg =
|
||||
String.format(
|
||||
"The shared archive file's ObjectAlignmentInBytes of %d " +
|
||||
@ -88,11 +68,9 @@ public class CdsDifferentObjectAlignment {
|
||||
createAlignment,
|
||||
loadAlignment);
|
||||
|
||||
try {
|
||||
output.shouldContain(expectedErrorMsg);
|
||||
} catch (RuntimeException e) {
|
||||
output.shouldContain("Unable to use shared archive");
|
||||
}
|
||||
output.shouldHaveExitValue(1);
|
||||
CDSTestUtils.createArchiveAndCheck(createAlignmentArgument);
|
||||
|
||||
OutputAnalyzer out = CDSTestUtils.runWithArchive(loadAlignmentArgument);
|
||||
CDSTestUtils.checkExecExpectError(out, 1, expectedErrorMsg);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2013, 2017, 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
|
||||
@ -30,9 +30,9 @@
|
||||
* java.management
|
||||
*/
|
||||
|
||||
import jdk.test.lib.process.ProcessTools;
|
||||
import jdk.test.lib.process.OutputAnalyzer;
|
||||
import jdk.test.lib.Platform;
|
||||
import jdk.test.lib.cds.CDSTestUtils;
|
||||
import jdk.test.lib.process.OutputAnalyzer;
|
||||
|
||||
public class CdsSameObjectAlignment {
|
||||
public static void main(String[] args) throws Exception {
|
||||
@ -57,40 +57,7 @@ public class CdsSameObjectAlignment {
|
||||
System.out.println("dumpAndLoadSharedArchive(): objectAlignmentInBytes = "
|
||||
+ objectAlignmentInBytes);
|
||||
|
||||
String filename = "./CdsSameObjectAlignment" + objectAlignmentInBytes + ".jsa";
|
||||
// create shared archive
|
||||
ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
|
||||
"-XX:+UnlockDiagnosticVMOptions",
|
||||
"-XX:SharedArchiveFile=" + filename,
|
||||
"-Xshare:dump",
|
||||
objectAlignmentArg);
|
||||
|
||||
OutputAnalyzer output = new OutputAnalyzer(pb.start());
|
||||
output.shouldContain("Loading classes to share");
|
||||
output.shouldHaveExitValue(0);
|
||||
|
||||
|
||||
// run using the shared archive
|
||||
pb = ProcessTools.createJavaProcessBuilder(
|
||||
"-XX:+UnlockDiagnosticVMOptions",
|
||||
"-XX:SharedArchiveFile=" + filename,
|
||||
"-Xshare:on",
|
||||
objectAlignmentArg,
|
||||
"-version");
|
||||
|
||||
output = new OutputAnalyzer(pb.start());
|
||||
|
||||
try {
|
||||
output.shouldContain("sharing");
|
||||
output.shouldHaveExitValue(0);
|
||||
} catch (RuntimeException e) {
|
||||
// CDS uses absolute addresses for performance.
|
||||
// It will try to reserve memory at a specific address;
|
||||
// there is a chance such reservation will fail
|
||||
// If it does, it is NOT considered a failure of the feature,
|
||||
// rather a possible expected outcome, though not likely
|
||||
output.shouldContain("Unable to use shared archive");
|
||||
output.shouldHaveExitValue(1);
|
||||
}
|
||||
CDSTestUtils.createArchiveAndCheck(objectAlignmentArg);
|
||||
CDSTestUtils.runWithArchiveAndCheck(objectAlignmentArg);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2014, 2017, 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
|
||||
@ -31,15 +31,13 @@
|
||||
* @bug 8032224
|
||||
*/
|
||||
|
||||
import jdk.test.lib.process.ProcessTools;
|
||||
import jdk.test.lib.cds.CDSTestUtils;
|
||||
import jdk.test.lib.process.OutputAnalyzer;
|
||||
import jdk.test.lib.Platform;
|
||||
import java.io.File;
|
||||
|
||||
public class DefaultUseWithClient {
|
||||
public static void main(String[] args) throws Exception {
|
||||
String fileName = "DefaultUseWithClient.jsa";
|
||||
|
||||
// On 32-bit windows CDS should be on by default in "-client" config
|
||||
// Skip this test on any other platform
|
||||
boolean is32BitWindows = (Platform.isWindows() && Platform.is32bit());
|
||||
@ -48,29 +46,7 @@ public class DefaultUseWithClient {
|
||||
return;
|
||||
}
|
||||
|
||||
// create the archive
|
||||
ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
|
||||
"-XX:+UnlockDiagnosticVMOptions",
|
||||
"-XX:SharedArchiveFile=./" + fileName,
|
||||
"-Xshare:dump");
|
||||
OutputAnalyzer output = new OutputAnalyzer(pb.start());
|
||||
output.shouldHaveExitValue(0);
|
||||
|
||||
pb = ProcessTools.createJavaProcessBuilder(
|
||||
"-XX:+UnlockDiagnosticVMOptions",
|
||||
"-XX:SharedArchiveFile=./" + fileName,
|
||||
"-client",
|
||||
"-XX:+PrintSharedSpaces",
|
||||
"-version");
|
||||
|
||||
output = new OutputAnalyzer(pb.start());
|
||||
try {
|
||||
output.shouldContain("sharing");
|
||||
} catch (RuntimeException e) {
|
||||
// if sharing failed due to ASLR or similar reasons,
|
||||
// check whether sharing was attempted at all (UseSharedSpaces)
|
||||
output.shouldContain("UseSharedSpaces:");
|
||||
}
|
||||
output.shouldHaveExitValue(0);
|
||||
CDSTestUtils.createArchiveAndCheck();
|
||||
CDSTestUtils.runWithArchiveAndCheck("-client", "-XX:+PrintSharedSpaces");
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2016, 2017, 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
|
||||
@ -33,7 +33,7 @@
|
||||
* @run main LargeSharedSpace
|
||||
*/
|
||||
|
||||
import jdk.test.lib.process.ProcessTools;
|
||||
import jdk.test.lib.cds.CDSTestUtils;
|
||||
import jdk.test.lib.process.OutputAnalyzer;
|
||||
import jdk.test.lib.Platform;
|
||||
|
||||
@ -46,10 +46,8 @@ public class LargeSharedSpace {
|
||||
//
|
||||
// The archive should be dumped successfully. It might fail to reserve memory
|
||||
// for shared space under low memory condition. The dumping process should not crash.
|
||||
pb = ProcessTools.createJavaProcessBuilder(
|
||||
"-XX:SharedMiscCodeSize=1066924031", "-XX:+UnlockDiagnosticVMOptions",
|
||||
"-XX:SharedArchiveFile=./LargeSharedSpace.jsa", "-Xshare:dump");
|
||||
output = new OutputAnalyzer(pb.start());
|
||||
output = CDSTestUtils.createArchive("-XX:SharedMiscCodeSize=1066924031",
|
||||
"-XX:+UnlockDiagnosticVMOptions");
|
||||
try {
|
||||
output.shouldContain("Loading classes to share");
|
||||
} catch (RuntimeException e1) {
|
||||
@ -64,12 +62,10 @@ public class LargeSharedSpace {
|
||||
//
|
||||
// The dumping process should not crash.
|
||||
if (Platform.is64bit()) {
|
||||
pb = ProcessTools.createJavaProcessBuilder(
|
||||
"-XX:+UseCompressedClassPointers", "-XX:CompressedClassSpaceSize=3G",
|
||||
"-XX:SharedMiscCodeSize=1600386047", "-XX:+UnlockDiagnosticVMOptions",
|
||||
"-XX:SharedArchiveFile=./LargeSharedSpace.jsa", "-Xshare:dump");
|
||||
output = new OutputAnalyzer(pb.start());
|
||||
output.shouldContain("larger than compressed klass limit");
|
||||
CDSTestUtils.createArchive(
|
||||
"-XX:+UseCompressedClassPointers", "-XX:CompressedClassSpaceSize=3G",
|
||||
"-XX:SharedMiscCodeSize=1600386047")
|
||||
.shouldContain("larger than compressed klass limit");
|
||||
}
|
||||
|
||||
// Test case 3: -XX:SharedMiscCodeSize=1600386047
|
||||
@ -79,15 +75,12 @@ public class LargeSharedSpace {
|
||||
//
|
||||
// The dumping process should not crash.
|
||||
if (Platform.is32bit()) {
|
||||
pb = ProcessTools.createJavaProcessBuilder(
|
||||
"-XX:SharedMiscCodeSize=1600386047", "-XX:+UnlockDiagnosticVMOptions",
|
||||
"-XX:SharedArchiveFile=./LargeSharedSpace.jsa", "-Xshare:dump");
|
||||
output = new OutputAnalyzer(pb.start());
|
||||
try {
|
||||
output.shouldContain("Loading classes to share");
|
||||
} catch (RuntimeException e3) {
|
||||
output.shouldContain("Unable to allocate memory for shared space");
|
||||
}
|
||||
output = CDSTestUtils.createArchive("-XX:SharedMiscCodeSize=1600386047");
|
||||
try {
|
||||
output.shouldContain("Loading classes to share");
|
||||
} catch (RuntimeException e3) {
|
||||
output.shouldContain("Unable to allocate memory for shared space");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2014, 2017, 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
|
||||
@ -30,41 +30,38 @@
|
||||
* java.management
|
||||
*/
|
||||
|
||||
import jdk.test.lib.cds.CDSOptions;
|
||||
import jdk.test.lib.cds.CDSTestUtils;
|
||||
import jdk.test.lib.process.ProcessTools;
|
||||
import jdk.test.lib.process.OutputAnalyzer;
|
||||
|
||||
|
||||
public class PrintSharedArchiveAndExit {
|
||||
public static void main(String[] args) throws Exception {
|
||||
String filename = "./PrintSharedArchiveAndExit.jsa";
|
||||
public static void main(String[] args) throws Exception {
|
||||
String archiveName = "PrintSharedArchiveAndExit.jsa";
|
||||
CDSOptions opts = (new CDSOptions()).setArchiveName(archiveName);
|
||||
OutputAnalyzer out = CDSTestUtils.createArchive(opts);
|
||||
CDSTestUtils.checkDump(out);
|
||||
|
||||
ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
|
||||
"-XX:+UnlockDiagnosticVMOptions", "-XX:SharedArchiveFile=" + filename, "-Xshare:dump");
|
||||
OutputAnalyzer output = new OutputAnalyzer(pb.start());
|
||||
try {
|
||||
output.shouldContain("Loading classes to share");
|
||||
output.shouldHaveExitValue(0);
|
||||
// (1) With a valid archive
|
||||
ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
|
||||
"-XX:+UnlockDiagnosticVMOptions", "-XX:SharedArchiveFile=./" + archiveName,
|
||||
"-XX:+PrintSharedArchiveAndExit", "-version");
|
||||
out = CDSTestUtils.executeAndLog(pb, "print-shared-archive-and-version");
|
||||
if (!CDSTestUtils.isUnableToMap(out)) {
|
||||
out.shouldContain("archive is valid")
|
||||
.shouldNotContain("java version") // Should not print JVM version
|
||||
.shouldHaveExitValue(0); // Should report success in error code.
|
||||
}
|
||||
|
||||
// (1) With a valid archive
|
||||
pb = ProcessTools.createJavaProcessBuilder(
|
||||
"-XX:+UnlockDiagnosticVMOptions", "-XX:SharedArchiveFile=" + filename,
|
||||
"-XX:+PrintSharedArchiveAndExit", "-version");
|
||||
output = new OutputAnalyzer(pb.start());
|
||||
output.shouldContain("archive is valid");
|
||||
output.shouldNotContain("java version"); // Should not print JVM version
|
||||
output.shouldHaveExitValue(0); // Should report success in error code.
|
||||
|
||||
pb = ProcessTools.createJavaProcessBuilder(
|
||||
"-XX:+UnlockDiagnosticVMOptions", "-XX:SharedArchiveFile=" + filename,
|
||||
"-XX:+PrintSharedArchiveAndExit");
|
||||
output = new OutputAnalyzer(pb.start());
|
||||
output.shouldContain("archive is valid");
|
||||
output.shouldNotContain("Usage:"); // Should not print JVM help message
|
||||
output.shouldHaveExitValue(0); // Should report success in error code.
|
||||
|
||||
} catch (RuntimeException e) {
|
||||
e.printStackTrace();
|
||||
output.shouldContain("Unable to use shared archive");
|
||||
output.shouldHaveExitValue(1);
|
||||
pb = ProcessTools.createJavaProcessBuilder(
|
||||
"-XX:+UnlockDiagnosticVMOptions", "-XX:SharedArchiveFile=./" + archiveName,
|
||||
"-XX:+PrintSharedArchiveAndExit");
|
||||
out = CDSTestUtils.executeAndLog(pb, "print-shared-archive");
|
||||
if (!CDSTestUtils.isUnableToMap(out)) {
|
||||
out.shouldContain("archive is valid")
|
||||
.shouldNotContain("Usage:") // Should not print JVM help message
|
||||
.shouldHaveExitValue(0); // Should report success in error code.
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2016, 2017, 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
|
||||
@ -37,6 +37,7 @@
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import jdk.test.lib.cds.CDSTestUtils;
|
||||
import jdk.test.lib.process.ProcessTools;
|
||||
import jdk.test.lib.process.OutputAnalyzer;
|
||||
import jdk.test.lib.JDKToolFinder;
|
||||
@ -55,26 +56,18 @@ public class SASymbolTableTest {
|
||||
static String jsaName = "./SASymbolTableTest.jsa";
|
||||
private static LingeredApp theApp = null;
|
||||
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
if (!Platform.shouldSAAttach()) {
|
||||
System.out.println("SA attach not expected to work - test skipped.");
|
||||
return;
|
||||
}
|
||||
createArchive();
|
||||
|
||||
CDSTestUtils.createArchiveAndCheck();
|
||||
run(true);
|
||||
run(false);
|
||||
}
|
||||
|
||||
private static void createArchive() throws Exception {
|
||||
ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
|
||||
"-XX:+UnlockDiagnosticVMOptions",
|
||||
"-XX:SharedArchiveFile=" + jsaName,
|
||||
"-Xshare:dump");
|
||||
|
||||
OutputAnalyzer output = new OutputAnalyzer(pb.start());
|
||||
output.shouldContain("Loading classes to share");
|
||||
output.shouldHaveExitValue(0);
|
||||
}
|
||||
|
||||
private static void run(boolean useArchive) throws Exception {
|
||||
String flag = useArchive ? "auto" : "off";
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2013, 2017, 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
|
||||
@ -30,27 +30,28 @@
|
||||
* java.management
|
||||
*/
|
||||
|
||||
import jdk.test.lib.cds.CDSTestUtils;
|
||||
import jdk.test.lib.process.ProcessTools;
|
||||
import jdk.test.lib.process.OutputAnalyzer;
|
||||
|
||||
|
||||
// NOTE: This test serves as a sanity test and also as an example for simple
|
||||
// use of SharedArchiveFile argument. For this reason it DOES NOT use the utility
|
||||
// methods to form command line to create/use shared archive.
|
||||
public class SharedArchiveFile {
|
||||
public static void main(String[] args) throws Exception {
|
||||
ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
|
||||
"-XX:+UnlockDiagnosticVMOptions", "-XX:SharedArchiveFile=./SharedArchiveFile.jsa", "-Xshare:dump");
|
||||
OutputAnalyzer output = new OutputAnalyzer(pb.start());
|
||||
try {
|
||||
output.shouldContain("Loading classes to share");
|
||||
output.shouldHaveExitValue(0);
|
||||
public static void main(String[] args) throws Exception {
|
||||
ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
|
||||
"-XX:+UnlockDiagnosticVMOptions",
|
||||
"-XX:SharedArchiveFile=./SharedArchiveFile.jsa",
|
||||
"-Xshare:dump");
|
||||
OutputAnalyzer out = CDSTestUtils.executeAndLog(pb, "SharedArchiveFile");
|
||||
CDSTestUtils.checkDump(out);
|
||||
|
||||
pb = ProcessTools.createJavaProcessBuilder(
|
||||
"-XX:+UnlockDiagnosticVMOptions", "-XX:SharedArchiveFile=./SharedArchiveFile.jsa", "-Xshare:on", "-version");
|
||||
output = new OutputAnalyzer(pb.start());
|
||||
output.shouldContain("sharing");
|
||||
output.shouldHaveExitValue(0);
|
||||
|
||||
} catch (RuntimeException e) {
|
||||
output.shouldContain("Unable to use shared archive");
|
||||
output.shouldHaveExitValue(1);
|
||||
pb = ProcessTools.createJavaProcessBuilder(
|
||||
"-XX:+UnlockDiagnosticVMOptions",
|
||||
"-XX:SharedArchiveFile=./SharedArchiveFile.jsa",
|
||||
"-Xshare:on", "-version");
|
||||
out = CDSTestUtils.executeAndLog(pb, "SharedArchiveFile");
|
||||
CDSTestUtils.checkExec(out);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2014, 2017, 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
|
||||
@ -31,7 +31,8 @@
|
||||
* @run main SharedBaseAddress
|
||||
*/
|
||||
|
||||
import jdk.test.lib.process.ProcessTools;
|
||||
import jdk.test.lib.cds.CDSTestUtils;
|
||||
import jdk.test.lib.cds.CDSOptions;
|
||||
import jdk.test.lib.process.OutputAnalyzer;
|
||||
|
||||
public class SharedBaseAddress {
|
||||
@ -48,30 +49,12 @@ public class SharedBaseAddress {
|
||||
for (String testEntry : testTable) {
|
||||
String filename = "SharedBaseAddress" + testEntry + ".jsa";
|
||||
System.out.println("sharedBaseAddress = " + testEntry);
|
||||
CDSOptions opts = (new CDSOptions())
|
||||
.setArchiveName(filename)
|
||||
.addPrefix("-XX:SharedBaseAddress=" + testEntry);
|
||||
|
||||
ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
|
||||
"-XX:+UnlockDiagnosticVMOptions",
|
||||
"-XX:SharedArchiveFile=" + filename,
|
||||
"-XX:SharedBaseAddress=" + testEntry,
|
||||
"-Xshare:dump");
|
||||
|
||||
OutputAnalyzer output = new OutputAnalyzer(pb.start());
|
||||
|
||||
output.shouldContain("Loading classes to share");
|
||||
|
||||
try {
|
||||
pb = ProcessTools.createJavaProcessBuilder(
|
||||
"-XX:+UnlockDiagnosticVMOptions",
|
||||
"-XX:SharedArchiveFile=" + filename,
|
||||
"-Xshare:on",
|
||||
"-version");
|
||||
output = new OutputAnalyzer(pb.start());
|
||||
output.shouldContain("sharing");
|
||||
output.shouldHaveExitValue(0);
|
||||
} catch (RuntimeException e) {
|
||||
output.shouldContain("Unable to use shared archive");
|
||||
output.shouldHaveExitValue(1);
|
||||
}
|
||||
CDSTestUtils.createArchiveAndCheck(opts);
|
||||
CDSTestUtils.runWithArchiveAndCheck(opts);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2015, 2017, 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
|
||||
@ -36,12 +36,17 @@
|
||||
* @run main ClassFileInstaller -jar whitebox.jar sun.hotspot.WhiteBox
|
||||
* @run main SharedStrings
|
||||
*/
|
||||
|
||||
import jdk.test.lib.cds.CDSTestUtils;
|
||||
import jdk.test.lib.process.ProcessTools;
|
||||
import jdk.test.lib.process.OutputAnalyzer;
|
||||
|
||||
public class SharedStrings {
|
||||
public static void main(String[] args) throws Exception {
|
||||
boolean test_runtime = true;
|
||||
// Note: This is a basic sanity test for Shared Strings feature.
|
||||
// This also serves as a reference on how to use this feature,
|
||||
// hence the command lines are spelled out instead of using the
|
||||
// test utils methods.
|
||||
ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
|
||||
"-XX:+UnlockDiagnosticVMOptions",
|
||||
"-XX:SharedArchiveFile=./SharedStrings.jsa",
|
||||
@ -52,22 +57,11 @@ public class SharedStrings {
|
||||
"-Xbootclasspath/a:" + ClassFileInstaller.getJarPath("whitebox.jar"),
|
||||
"-Xshare:dump");
|
||||
|
||||
OutputAnalyzer dumpOutput = new OutputAnalyzer(pb.start());
|
||||
try {
|
||||
dumpOutput.shouldContain("Loading classes to share");
|
||||
dumpOutput.shouldContain("Shared string table stats");
|
||||
dumpOutput.shouldHaveExitValue(0);
|
||||
} catch (RuntimeException e) {
|
||||
if (dumpOutput.getOutput().indexOf("Shared strings are excluded") != -1 ||
|
||||
dumpOutput.getOutput().indexOf("Cannot dump shared archive") != -1) {
|
||||
test_runtime = false;
|
||||
} else {
|
||||
throw new RuntimeException("Unexpected failure");
|
||||
}
|
||||
}
|
||||
OutputAnalyzer out = CDSTestUtils.executeAndLog(pb, "dump");
|
||||
CDSTestUtils.checkDump(out, "Shared string table stats");
|
||||
|
||||
if (test_runtime) {
|
||||
pb = ProcessTools.createJavaProcessBuilder(
|
||||
|
||||
pb = ProcessTools.createJavaProcessBuilder(
|
||||
"-XX:+UnlockDiagnosticVMOptions",
|
||||
"-XX:SharedArchiveFile=./SharedStrings.jsa",
|
||||
// these are required modes for shared strings
|
||||
@ -77,15 +71,7 @@ public class SharedStrings {
|
||||
"-XX:+UnlockDiagnosticVMOptions", "-XX:+WhiteBoxAPI",
|
||||
"-Xshare:on", "-showversion", "SharedStringsWb");
|
||||
|
||||
OutputAnalyzer output = new OutputAnalyzer(pb.start());
|
||||
|
||||
try {
|
||||
output.shouldContain("sharing");
|
||||
output.shouldHaveExitValue(0);
|
||||
} catch (RuntimeException e) {
|
||||
output.shouldContain("Unable to use shared archive");
|
||||
output.shouldHaveExitValue(1);
|
||||
}
|
||||
}
|
||||
out = CDSTestUtils.executeAndLog(pb, "exec");
|
||||
CDSTestUtils.checkExec(out);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2016, 2017, 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
|
||||
@ -34,7 +34,7 @@
|
||||
* @run main SharedStringsDedup
|
||||
*/
|
||||
|
||||
import jdk.test.lib.process.ProcessTools;
|
||||
import jdk.test.lib.cds.CDSTestUtils;
|
||||
import jdk.test.lib.process.OutputAnalyzer;
|
||||
import java.io.File;
|
||||
|
||||
@ -44,30 +44,10 @@ import java.io.File;
|
||||
// doesn't happen often so it won't impact coverage).
|
||||
public class SharedStringsDedup {
|
||||
public static void main(String[] args) throws Exception {
|
||||
// Dump
|
||||
ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
|
||||
"-XX:+UnlockDiagnosticVMOptions",
|
||||
"-XX:SharedArchiveFile=./SharedStringsDedup.jsa",
|
||||
"-XX:+UseCompressedOops", "-XX:+UseG1GC",
|
||||
"-XX:+PrintSharedSpaces",
|
||||
"-Xshare:dump");
|
||||
|
||||
new OutputAnalyzer(pb.start())
|
||||
.shouldContain("Loading classes to share")
|
||||
.shouldContain("Shared string table stats")
|
||||
.shouldHaveExitValue(0);
|
||||
|
||||
// Run with -Xshare:auto
|
||||
pb = ProcessTools.createJavaProcessBuilder(
|
||||
"-XX:+UnlockDiagnosticVMOptions",
|
||||
"-XX:SharedArchiveFile=./SharedStringsDedup.jsa",
|
||||
"-XX:+UseCompressedOops", "-XX:+UseG1GC",
|
||||
"-XX:+UseStringDeduplication",
|
||||
"-Xshare:auto",
|
||||
"-version");
|
||||
|
||||
new OutputAnalyzer(pb.start())
|
||||
.shouldMatch("(java|openjdk) version")
|
||||
.shouldHaveExitValue(0);
|
||||
OutputAnalyzer out =
|
||||
CDSTestUtils.createArchive("-XX:+UseCompressedOops", "-XX:+UseG1GC");
|
||||
CDSTestUtils.checkDump(out, "Shared string table stats");
|
||||
CDSTestUtils.runWithArchiveAndCheck("-XX:+UseCompressedOops", "-XX:+UseG1GC",
|
||||
"-XX:+UseStringDeduplication");
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2015, 2017, 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
|
||||
@ -34,35 +34,15 @@
|
||||
* @run main SharedStringsRunAuto
|
||||
*/
|
||||
|
||||
import jdk.test.lib.process.ProcessTools;
|
||||
import jdk.test.lib.cds.CDSTestUtils;
|
||||
import jdk.test.lib.process.OutputAnalyzer;
|
||||
import java.io.File;
|
||||
|
||||
public class SharedStringsRunAuto {
|
||||
public static void main(String[] args) throws Exception {
|
||||
// Dump
|
||||
ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
|
||||
"-XX:+UnlockDiagnosticVMOptions",
|
||||
"-XX:SharedArchiveFile=./SharedStringsRunAuto.jsa",
|
||||
"-XX:+UseCompressedOops", "-XX:+UseG1GC",
|
||||
"-XX:+PrintSharedSpaces",
|
||||
"-Xshare:dump");
|
||||
|
||||
new OutputAnalyzer(pb.start())
|
||||
.shouldContain("Loading classes to share")
|
||||
.shouldContain("Shared string table stats")
|
||||
.shouldHaveExitValue(0);
|
||||
|
||||
// Run with -Xshare:auto
|
||||
pb = ProcessTools.createJavaProcessBuilder(
|
||||
"-XX:+UnlockDiagnosticVMOptions",
|
||||
"-XX:SharedArchiveFile=./SharedStringsRunAuto.jsa",
|
||||
"-XX:+UseCompressedOops", "-XX:+UseG1GC",
|
||||
"-Xshare:auto",
|
||||
"-version");
|
||||
|
||||
new OutputAnalyzer(pb.start())
|
||||
.shouldMatch("(java|openjdk) version")
|
||||
.shouldHaveExitValue(0);
|
||||
OutputAnalyzer out =
|
||||
CDSTestUtils.createArchive("-XX:+UseCompressedOops", "-XX:+UseG1GC");
|
||||
CDSTestUtils.checkDump(out, "Shared string table stats");
|
||||
CDSTestUtils.runWithArchiveAndCheck("-XX:+UseCompressedOops", "-XX:+UseG1GC");
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2014, 2017, 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
|
||||
@ -30,41 +30,35 @@
|
||||
* java.management
|
||||
*/
|
||||
|
||||
import jdk.test.lib.process.ProcessTools;
|
||||
import jdk.test.lib.cds.CDSTestUtils;
|
||||
import jdk.test.lib.process.OutputAnalyzer;
|
||||
|
||||
public class SharedSymbolTableBucketSize {
|
||||
public static void main(String[] args) throws Exception {
|
||||
int bucket_size = 8;
|
||||
ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
|
||||
"-Xshare:dump", "-XX:+PrintSharedSpaces",
|
||||
"-XX:+UnlockDiagnosticVMOptions",
|
||||
"-XX:SharedArchiveFile=./SharedSymbolTableBucketSize.jsa",
|
||||
"-XX:SharedSymbolTableBucketSize=" + Integer.valueOf(bucket_size));
|
||||
OutputAnalyzer output = new OutputAnalyzer(pb.start());
|
||||
output.shouldContain("Loading classes to share");
|
||||
output.shouldHaveExitValue(0);
|
||||
|
||||
String s = output.firstMatch("Average bucket size : .*");
|
||||
Float f = Float.parseFloat(s.substring(25));
|
||||
int size = Math.round(f);
|
||||
if (size != bucket_size) {
|
||||
throw new Exception("FAILED: incorrect bucket size " + size +
|
||||
", expect " + bucket_size);
|
||||
OutputAnalyzer output =
|
||||
CDSTestUtils.createArchive("-XX:SharedSymbolTableBucketSize="
|
||||
+ Integer.valueOf(bucket_size));
|
||||
CDSTestUtils.checkDump(output);
|
||||
|
||||
if (!CDSTestUtils.isUnableToMap(output)) {
|
||||
String s = output.firstMatch("Average bucket size : .*");
|
||||
Float f = Float.parseFloat(s.substring(25));
|
||||
int size = Math.round(f);
|
||||
if (size != bucket_size) {
|
||||
throw new Exception("FAILED: incorrect bucket size " + size +
|
||||
", expect " + bucket_size);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Invalid SharedSymbolTableBucketSize input
|
||||
String input[] = {"-XX:SharedSymbolTableBucketSize=-1",
|
||||
"-XX:SharedSymbolTableBucketSize=2.5"};
|
||||
for (int i = 0; i < input.length; i++) {
|
||||
pb = ProcessTools.createJavaProcessBuilder(
|
||||
"-Xshare:dump", "-XX:+PrintSharedSpaces",
|
||||
"-XX:+UnlockDiagnosticVMOptions",
|
||||
"-XX:SharedArchiveFile=./SharedSymbolTableBucketSize.jsa",
|
||||
input[i]);
|
||||
output = new OutputAnalyzer(pb.start());
|
||||
output.shouldContain("Improperly specified VM option");
|
||||
}
|
||||
}
|
||||
CDSTestUtils.createArchive(input[i])
|
||||
.shouldContain("Improperly specified VM option")
|
||||
.shouldHaveExitValue(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2014, 2017, 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
|
||||
@ -30,7 +30,7 @@
|
||||
* @run main SpaceUtilizationCheck
|
||||
*/
|
||||
|
||||
import jdk.test.lib.process.ProcessTools;
|
||||
import jdk.test.lib.cds.CDSTestUtils;
|
||||
import jdk.test.lib.process.OutputAnalyzer;
|
||||
|
||||
import java.util.regex.Pattern;
|
||||
@ -49,12 +49,9 @@ public class SpaceUtilizationCheck {
|
||||
private static final int NUMBER_OF_CHECKED_SHARED_REGIONS = 2;
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
|
||||
"-XX:+UnlockDiagnosticVMOptions",
|
||||
"-XX:SharedArchiveFile=./SpaceUtilizationCheck.jsa",
|
||||
"-Xshare:dump");
|
||||
OutputAnalyzer output = CDSTestUtils.createArchive();
|
||||
CDSTestUtils.checkDump(output);
|
||||
|
||||
OutputAnalyzer output = new OutputAnalyzer(pb.start());
|
||||
String stdout = output.getStdout();
|
||||
ArrayList<String> utilization = findUtilization(stdout);
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2016, 2017, 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
|
||||
@ -35,7 +35,8 @@
|
||||
import java.lang.Math;
|
||||
import java.util.zip.CRC32;
|
||||
import java.util.zip.CRC32C;
|
||||
import jdk.test.lib.process.ProcessTools;
|
||||
import jdk.test.lib.cds.CDSOptions;
|
||||
import jdk.test.lib.cds.CDSTestUtils;
|
||||
import jdk.test.lib.process.OutputAnalyzer;
|
||||
|
||||
public class TestInterpreterMethodEntries {
|
||||
@ -68,29 +69,13 @@ public class TestInterpreterMethodEntries {
|
||||
String useCRC32 = "-XX:" + use + "UseCRC32Intrinsics";
|
||||
String useCRC32C = "-XX:" + use + "UseCRC32CIntrinsics";
|
||||
|
||||
// Dump shared archive
|
||||
String filename = "./TestInterpreterMethodEntries" + dump + ".jsa";
|
||||
ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
|
||||
"-XX:+UnlockDiagnosticVMOptions",
|
||||
"-XX:SharedArchiveFile=" + filename,
|
||||
"-Xshare:dump",
|
||||
dumpFMA, dumpCRC32, dumpCRC32C);
|
||||
OutputAnalyzer output = new OutputAnalyzer(pb.start());
|
||||
CDSTestUtils.checkDump(output);
|
||||
CDSTestUtils.createArchiveAndCheck(dumpFMA, dumpCRC32, dumpCRC32C);
|
||||
|
||||
// Use shared archive
|
||||
pb = ProcessTools.createJavaProcessBuilder(
|
||||
"-XX:+UnlockDiagnosticVMOptions",
|
||||
"-XX:SharedArchiveFile=" + filename,
|
||||
"-Xshare:on",
|
||||
useFMA, useCRC32, useCRC32C,
|
||||
"TestInterpreterMethodEntries", "run");
|
||||
output = new OutputAnalyzer(pb.start());
|
||||
if (CDSTestUtils.isUnableToMap(output)) {
|
||||
System.out.println("Unable to map shared archive: test did not complete; assumed PASS");
|
||||
return;
|
||||
}
|
||||
output.shouldHaveExitValue(0);
|
||||
CDSOptions opts = (new CDSOptions())
|
||||
.addPrefix(useFMA, useCRC32, useCRC32C, "-showversion")
|
||||
.addSuffix("TestInterpreterMethodEntries", "run")
|
||||
.setUseVersion(false);
|
||||
CDSTestUtils.runWithArchiveAndCheck(opts);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2016, 2017, 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
|
||||
@ -56,10 +56,11 @@
|
||||
// TransformerAgent - an agent that is used when JVM-under-test is executed
|
||||
// to transform specific strings inside specified classes
|
||||
// TransformerAgent.mf - accompanies transformer agent
|
||||
// CDSTestUtils - Test Utilities common to all CDS tests
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import jdk.test.lib.cds.CDSOptions;
|
||||
import jdk.test.lib.cds.CDSTestUtils;
|
||||
import jdk.test.lib.process.OutputAnalyzer;
|
||||
import jdk.test.lib.process.ProcessTools;
|
||||
|
||||
@ -143,18 +144,11 @@ public class TransformRelatedClasses {
|
||||
testClasses);
|
||||
|
||||
// create an archive
|
||||
File classList = CDSTestUtils.makeClassList("transform-" + parent,
|
||||
testNames);
|
||||
ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(true,
|
||||
"-Xbootclasspath/a:" + testJar,
|
||||
"-XX:+UnlockDiagnosticVMOptions",
|
||||
"-XX:ExtraSharedClassListFile=" +
|
||||
classList.getPath(),
|
||||
"-XX:SharedArchiveFile=" + archiveName,
|
||||
"-XX:+PrintSharedSpaces",
|
||||
"-Xshare:dump");
|
||||
OutputAnalyzer out = new OutputAnalyzer(pb.start());
|
||||
CDSTestUtils.checkDump(out);
|
||||
String classList =
|
||||
CDSTestUtils.makeClassList("transform-" + parent, testNames).getPath();
|
||||
|
||||
CDSTestUtils.createArchiveAndCheck("-Xbootclasspath/a:" + testJar,
|
||||
"-XX:ExtraSharedClassListFile=" + classList);
|
||||
}
|
||||
|
||||
|
||||
@ -165,15 +159,12 @@ public class TransformRelatedClasses {
|
||||
String agentParam = "-javaagent:" + agentJar + "=" +
|
||||
TransformTestCommon.getAgentParams(entry, parent, child);
|
||||
|
||||
ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(true,
|
||||
"-Xbootclasspath/a:" + testJar,
|
||||
"-XX:+UnlockDiagnosticVMOptions",
|
||||
"-XX:SharedArchiveFile=" + archiveName,
|
||||
"-Xlog:class+load=info",
|
||||
"-Xshare:on", "-showversion",
|
||||
agentParam, child);
|
||||
OutputAnalyzer out = new OutputAnalyzer(pb.start());
|
||||
CDSOptions opts = new CDSOptions()
|
||||
.addPrefix("-Xbootclasspath/a:" + testJar, "-Xlog:class+load=info")
|
||||
.setUseVersion(false)
|
||||
.addSuffix( "-showversion",agentParam, child);
|
||||
|
||||
OutputAnalyzer out = CDSTestUtils.runWithArchive(opts);
|
||||
TransformTestCommon.checkResults(entry, out, parent, child);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2016, 2017, 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
|
||||
@ -21,6 +21,7 @@
|
||||
* questions.
|
||||
*/
|
||||
|
||||
import jdk.test.lib.cds.CDSTestUtils;
|
||||
import jdk.test.lib.process.OutputAnalyzer;
|
||||
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user