mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-21 19:44:41 +02:00
8015324: Create tests for CDS feature
Wrote tests for use of CDS with ObjectAlignmentInBytes CL option Reviewed-by: coleenp, ctornqvi, hseigel
This commit is contained in:
parent
e72f763439
commit
e1219b994d
4 changed files with 243 additions and 3 deletions
|
@ -0,0 +1,88 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2013, 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @test CdsDifferentObjectAlignment
|
||||||
|
* @summary Testing CDS (class data sharing) using varying object alignment.
|
||||||
|
* Using different object alignment for each dump/load pair.
|
||||||
|
* This is a negative test; using object alignment for loading that
|
||||||
|
* is different from object alignment for creating a CDS file
|
||||||
|
* should fail when loading.
|
||||||
|
* @library /testlibrary
|
||||||
|
*/
|
||||||
|
|
||||||
|
import com.oracle.java.testlibrary.*;
|
||||||
|
|
||||||
|
public class CdsDifferentObjectAlignment {
|
||||||
|
public static void main(String[] args) throws Exception {
|
||||||
|
String nativeWordSize = System.getProperty("sun.arch.data.model");
|
||||||
|
if (!Platform.is64bit()) {
|
||||||
|
System.out.println("ObjectAlignmentInBytes for CDS is only " +
|
||||||
|
"supported on 64bit platforms; this plaform is " +
|
||||||
|
nativeWordSize);
|
||||||
|
System.out.println("Skipping the test");
|
||||||
|
} else {
|
||||||
|
createAndLoadSharedArchive(16, 64);
|
||||||
|
createAndLoadSharedArchive(64, 32);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Parameters are object alignment expressed in bytes
|
||||||
|
private static void
|
||||||
|
createAndLoadSharedArchive(int createAlignment, int loadAlignment)
|
||||||
|
throws Exception {
|
||||||
|
String createAlignmentArgument = "-XX:ObjectAlignmentInBytes=" +
|
||||||
|
createAlignment;
|
||||||
|
String loadAlignmentArgument = "-XX:ObjectAlignmentInBytes=" +
|
||||||
|
loadAlignment;
|
||||||
|
|
||||||
|
ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
|
||||||
|
"-XX:+UnlockDiagnosticVMOptions",
|
||||||
|
"-XX:SharedArchiveFile=./sample.jsa",
|
||||||
|
"-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=./sample.jsa",
|
||||||
|
"-Xshare:on",
|
||||||
|
loadAlignmentArgument,
|
||||||
|
"-version");
|
||||||
|
|
||||||
|
output = new OutputAnalyzer(pb.start());
|
||||||
|
String expectedErrorMsg =
|
||||||
|
String.format(
|
||||||
|
"The shared archive file's ObjectAlignmentInBytes of %d " +
|
||||||
|
"does not equal the current ObjectAlignmentInBytes of %d",
|
||||||
|
createAlignment,
|
||||||
|
loadAlignment);
|
||||||
|
|
||||||
|
output.shouldContain(expectedErrorMsg);
|
||||||
|
output.shouldHaveExitValue(1);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,92 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2013, 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @test CdsSameObjectAlignment
|
||||||
|
* @summary Testing CDS (class data sharing) using varying object alignment.
|
||||||
|
* Using same object alignment for each dump/load pair
|
||||||
|
* @library /testlibrary
|
||||||
|
*/
|
||||||
|
|
||||||
|
import com.oracle.java.testlibrary.*;
|
||||||
|
|
||||||
|
public class CdsSameObjectAlignment {
|
||||||
|
public static void main(String[] args) throws Exception {
|
||||||
|
String nativeWordSize = System.getProperty("sun.arch.data.model");
|
||||||
|
if (!Platform.is64bit()) {
|
||||||
|
System.out.println("ObjectAlignmentInBytes for CDS is only " +
|
||||||
|
"supported on 64bit platforms; this plaform is " +
|
||||||
|
nativeWordSize);
|
||||||
|
System.out.println("Skipping the test");
|
||||||
|
} else {
|
||||||
|
dumpAndLoadSharedArchive(8);
|
||||||
|
dumpAndLoadSharedArchive(16);
|
||||||
|
dumpAndLoadSharedArchive(32);
|
||||||
|
dumpAndLoadSharedArchive(64);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void
|
||||||
|
dumpAndLoadSharedArchive(int objectAlignmentInBytes) throws Exception {
|
||||||
|
String objectAlignmentArg = "-XX:ObjectAlignmentInBytes="
|
||||||
|
+ objectAlignmentInBytes;
|
||||||
|
System.out.println("dumpAndLoadSharedArchive(): objectAlignmentInBytes = "
|
||||||
|
+ objectAlignmentInBytes);
|
||||||
|
|
||||||
|
// create shared archive
|
||||||
|
ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
|
||||||
|
"-XX:+UnlockDiagnosticVMOptions",
|
||||||
|
"-XX:SharedArchiveFile=./sample.jsa",
|
||||||
|
"-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=./sample.jsa",
|
||||||
|
"-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 reserve shared space at required address");
|
||||||
|
output.shouldHaveExitValue(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,62 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2013, 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.oracle.java.testlibrary;
|
||||||
|
|
||||||
|
public class Platform {
|
||||||
|
private static final String osName = System.getProperty("os.name");
|
||||||
|
private static final String dataModel = System.getProperty("sun.arch.data.model");
|
||||||
|
private static final String vmVersion = System.getProperty("java.vm.version");
|
||||||
|
|
||||||
|
public static boolean is64bit() {
|
||||||
|
return dataModel.equals("64");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isSolaris() {
|
||||||
|
return osName.toLowerCase().startsWith("sunos");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isWindows() {
|
||||||
|
return osName.toLowerCase().startsWith("win");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isOSX() {
|
||||||
|
return osName.toLowerCase().startsWith("mac");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isLinux() {
|
||||||
|
return osName.toLowerCase().startsWith("linux");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getOsName() {
|
||||||
|
return osName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isDebugBuild() {
|
||||||
|
return vmVersion.toLowerCase().contains("debug");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getVMVersion() {
|
||||||
|
return vmVersion;
|
||||||
|
}
|
||||||
|
}
|
|
@ -112,10 +112,8 @@ public final class ProcessTools {
|
||||||
* @return String[] with platform specific arguments, empty if there are none
|
* @return String[] with platform specific arguments, empty if there are none
|
||||||
*/
|
*/
|
||||||
public static String[] getPlatformSpecificVMArgs() {
|
public static String[] getPlatformSpecificVMArgs() {
|
||||||
String osName = System.getProperty("os.name");
|
|
||||||
String dataModel = System.getProperty("sun.arch.data.model");
|
|
||||||
|
|
||||||
if (osName.equals("SunOS") && dataModel.equals("64")) {
|
if (Platform.is64bit() && Platform.isSolaris()) {
|
||||||
return new String[] { "-d64" };
|
return new String[] { "-d64" };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue