test/runtime/SharedArchiveFile/LimitSharedSizes.java
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File
*** old/test/runtime/SharedArchiveFile/LimitSharedSizes.java Tue Nov 10 11:06:24 2015
--- new/test/runtime/SharedArchiveFile/LimitSharedSizes.java Tue Nov 10 11:06:24 2015
*** 21,158 ****
--- 21,163 ----
* questions.
*/
/* @test LimitSharedSizes
* @summary Test handling of limits on shared space size
! * @library /testlibrary /runtime/CommandLine/OptionsValidation/common
* @modules java.base/sun.misc
* java.management
* @run main LimitSharedSizes
*/
import jdk.test.lib.*;
+ import optionsvalidation.JVMOptionsUtils;
public class LimitSharedSizes {
+ static enum Result {
+ OUT_OF_RANGE,
+ TOO_SMALL,
+ VALID,
+ VALID_ARCHIVE
+ }
+
static enum Region {
RO, RW, MD, MC
}
+ private static final boolean fitsRange(String name, String value) throws RuntimeException {
+ boolean fits = true;
+ try {
+ fits = JVMOptionsUtils.fitsRange(name, value);
+ } catch (Exception e) {
+ throw new RuntimeException(e.getMessage());
+ }
+ return fits;
+ }
+
private static class SharedSizeTestData {
public String optionName;
public String optionValue;
! public String expectedErrorMsg;
! public Result optionResult;
- public SharedSizeTestData(Region region, String value, String msg) {
! optionName = "-XX:"+getName(region);
optionValue = value;
expectedErrorMsg = msg;
+ if (fitsRange(getName(region), value) == false) {
+ optionResult = Result.OUT_OF_RANGE;
+ } else {
+ optionResult = Result.TOO_SMALL;
+ }
}
! public SharedSizeTestData(Region region, String msg) {
! optionName = getName(region);
! optionValue = getValue(region);
! expectedErrorMsg = msg;
! public SharedSizeTestData(Region region, String value, Result result) {
! optionName = "-XX:"+getName(region);
! optionValue = value;
! optionResult = result;
}
private String getName(Region region) {
String name;
switch (region) {
case RO:
- name = "-XX:SharedReadOnlySize";
break;
case RW:
- name = "-XX:SharedReadWriteSize";
break;
case MD:
- name = "-XX:SharedMiscDataSize";
break;
case MC:
- name = "-XX:SharedMiscCodeSize";
break;
default:
name = "Unknown";
break;
}
return name;
}
! private String getValue(Region region) {
! String value;
switch (region) {
case RO:
value = Platform.is64bit() ? "9M" : "8M";
break;
case RW:
value = Platform.is64bit() ? "12M" : "7M";
break;
case MD:
value = Platform.is64bit() ? "4M" : "2M";
break;
case MC:
value = "120k";
break;
default:
value = "0M";
break;
}
return value;
! public Result getResult() {
! return optionResult;
}
}
private static final SharedSizeTestData[] testTable = {
// Too small of a region size should not cause a vm crash.
! // It should result in an error message either like the following #1:
// The shared miscellaneous code space is not large enough
// to preload requested classes. Use -XX:SharedMiscCodeSize=
// to increase the initial size of shared miscellaneous code space.
new SharedSizeTestData(Region.RO, "4M", "read only"),
new SharedSizeTestData(Region.RW, "4M", "read write"),
! new SharedSizeTestData(Region.MD, "50k", "miscellaneous data"),
! new SharedSizeTestData(Region.MC, "20k", "miscellaneous code"),
+ // or #2:
+ // The shared miscellaneous code space is outside the allowed range
! new SharedSizeTestData(Region.RO, "4M"),
! new SharedSizeTestData(Region.RW, "4M"),
+ new SharedSizeTestData(Region.MD, "50k"),
+ new SharedSizeTestData(Region.MC, "20k"),
! // these values are larger than default ones, but should
! // these values are larger than default ones, and should
// be acceptable and not cause failure
! new SharedSizeTestData(Region.RO, "20M", null),
! new SharedSizeTestData(Region.RW, "20M", null),
! new SharedSizeTestData(Region.MD, "20M", null),
! new SharedSizeTestData(Region.MC, "20M", null),
! new SharedSizeTestData(Region.RO, "20M", Result.VALID),
! new SharedSizeTestData(Region.RW, "20M", Result.VALID),
! new SharedSizeTestData(Region.MD, "20M", Result.VALID),
! new SharedSizeTestData(Region.MC, "20M", Result.VALID),
// test with sizes which just meet the minimum required sizes
// the following tests also attempt to use the shared archive
! new SharedSizeTestData(Region.RO, "UseArchive"),
! new SharedSizeTestData(Region.RW, "UseArchive"),
! new SharedSizeTestData(Region.MD, "UseArchive"),
! new SharedSizeTestData(Region.MC, "UseArchive")
! new SharedSizeTestData(Region.RO, Platform.is64bit() ? "9M":"8M", Result.VALID_ARCHIVE),
! new SharedSizeTestData(Region.RW, Platform.is64bit() ? "12M":"7M", Result.VALID_ARCHIVE),
! new SharedSizeTestData(Region.MD, Platform.is64bit() ? "4M":"2M", Result.VALID_ARCHIVE),
! new SharedSizeTestData(Region.MC, "120k", Result.VALID_ARCHIVE),
};
public static void main(String[] args) throws Exception {
int counter = 0;
for (SharedSizeTestData td : testTable) {
String fileName = "LimitSharedSizes" + counter + ".jsa";
counter++;
String option = td.optionName + "=" + td.optionValue;
+ System.out.println("testing option number <" + counter + ">");
System.out.println("testing option <" + option + ">");
ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
"-XX:+UnlockDiagnosticVMOptions",
"-XX:SharedArchiveFile=./" + fileName,
option,
"-Xshare:dump");
OutputAnalyzer output = new OutputAnalyzer(pb.start());
! if (td.expectedErrorMsg != null) {
if (!td.expectedErrorMsg.equals("UseArchive")) {
output.shouldContain("The shared " + td.expectedErrorMsg
+ " space is not large enough");
output.shouldHaveExitValue(2);
} else {
! switch (td.getResult()) {
+ case VALID:
+ case VALID_ARCHIVE:
+ {
output.shouldNotContain("space is not large enough");
output.shouldHaveExitValue(0);
+ if (td.getResult() == Result.VALID_ARCHIVE) {
// try to use the archive
pb = ProcessTools.createJavaProcessBuilder(
"-XX:+UnlockDiagnosticVMOptions",
"-XX:SharedArchiveFile=./" + fileName,
"-XX:+PrintSharedArchiveAndExit",
*** 173,184 ****
--- 178,200 ----
return;
}
}
output.shouldHaveExitValue(0);
}
} else {
! output.shouldNotContain("space is not large enough");
output.shouldHaveExitValue(0);
+ }
! break;
+ case TOO_SMALL:
+ {
+ output.shouldContain("space is not large enough");
+ output.shouldHaveExitValue(2);
+ }
+ break;
+ case OUT_OF_RANGE:
+ {
+ output.shouldContain("outside the allowed range");
+ output.shouldHaveExitValue(1);
+ }
+ break;
}
}
}
}
test/runtime/SharedArchiveFile/LimitSharedSizes.java
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File