test/runtime/SharedArchiveFile/LimitSharedSizes.java
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File hotspot Cdiff test/runtime/SharedArchiveFile/LimitSharedSizes.java

test/runtime/SharedArchiveFile/LimitSharedSizes.java

Print this page

        

*** 28,71 **** */ import com.oracle.java.testlibrary.*; public class LimitSharedSizes { private static class SharedSizeTestData { public String optionName; public String optionValue; public String expectedErrorMsg; ! public SharedSizeTestData(String name, String value, String msg) { ! optionName = name; optionValue = value; expectedErrorMsg = msg; } } ! private static final SharedSizeTestData[] testTable = { ! // values in this part of the test table should cause failure ! // (shared space sizes are deliberately too small) ! new SharedSizeTestData("-XX:SharedReadOnlySize", "4M", "read only"), ! new SharedSizeTestData("-XX:SharedReadWriteSize","4M", "read write"), ! // Known issue, JDK-8038422 (assert() on Windows) ! // new SharedSizeTestData("-XX:SharedMiscDataSize", "500k", "miscellaneous data"), ! // Too small of a misc code size should not cause a vm crash. ! // It should result in the following error message: // 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("-XX:SharedMiscCodeSize", "20k", "miscellaneous code"), // these values are larger than default ones, but should // be acceptable and not cause failure ! new SharedSizeTestData("-XX:SharedReadOnlySize", "20M", null), ! new SharedSizeTestData("-XX:SharedReadWriteSize", "20M", null), ! new SharedSizeTestData("-XX:SharedMiscDataSize", "20M", null), ! new SharedSizeTestData("-XX:SharedMiscCodeSize", "20M", null) }; public static void main(String[] args) throws Exception { String fileName = "test.jsa"; --- 28,127 ---- */ import com.oracle.java.testlibrary.*; public class LimitSharedSizes { + static enum Region { + RO, RW, MD, MC + } + private static class SharedSizeTestData { public String optionName; public String optionValue; public String expectedErrorMsg; ! public SharedSizeTestData(Region region, String value, String msg) { ! optionName = getName(region); optionValue = value; expectedErrorMsg = msg; } + + public SharedSizeTestData(Region region, String msg) { + optionName = getName(region); + optionValue = getValue(region); + expectedErrorMsg = msg; } ! 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; ! } ! } ! private static final SharedSizeTestData[] testTable = { ! // Too small of a region size should not cause a vm crash. ! // It should result in an error message like the following: // 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"), // these values are larger than default ones, but 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), ! ! // 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") }; public static void main(String[] args) throws Exception { String fileName = "test.jsa";
*** 80,95 **** --- 136,174 ---- "-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 { output.shouldNotContain("space is not large enough"); output.shouldHaveExitValue(0); + + // try to use the archive + pb = ProcessTools.createJavaProcessBuilder( + "-XX:+UnlockDiagnosticVMOptions", + "-XX:SharedArchiveFile=./" + fileName, + "-XX:+PrintSharedArchiveAndExit", + "-version"); + + output = new OutputAnalyzer(pb.start()); + try { + output.shouldContain("archive is valid"); + } catch (RuntimeException e) { + // if sharing failed due to ASLR or similar reasons, + // check whether sharing was attempted at all (UseSharedSpaces) + output.shouldContain("Unable to use shared archive"); + output.shouldHaveExitValue(1); + } + output.shouldHaveExitValue(0); + } + } else { + output.shouldNotContain("space is not large enough"); + output.shouldHaveExitValue(0); } } } }
test/runtime/SharedArchiveFile/LimitSharedSizes.java
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File