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:
Mikhailo Seledtsov 2017-04-18 14:18:43 -07:00
parent ca72444bf9
commit ca99a2ef45
20 changed files with 258 additions and 606 deletions

View File

@ -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);
}
}
}

View File

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

View 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);
}
}
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

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

View File

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

View File

@ -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.
}
}
}
}

View File

@ -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";

View File

@ -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);
}
}
}

View File

@ -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);
}
}
}

View File

@ -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);
}
}

View File

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

View File

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

View File

@ -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);
}
}
}

View File

@ -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);

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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;