8208658: Make CDS archived heap regions usable even if compressed oop encoding has changed
authoriklam
Thu, 23 Aug 2018 21:16:45 -0700
changeset 51527 dda0f219dafa
parent 51526 42d36db61500
child 51528 2418b305aa01
8208658: Make CDS archived heap regions usable even if compressed oop encoding has changed Summary: Move different execution modes to IncompatibleOptions_stringDedup.java and IncompatibleOptions_noCompactStrings.java Reviewed-by: jiangli, coleenp
test/hotspot/jtreg/runtime/appcds/sharedStrings/IncompatibleOptions.java
test/hotspot/jtreg/runtime/appcds/sharedStrings/IncompatibleOptions_noCompactStrings.java
test/hotspot/jtreg/runtime/appcds/sharedStrings/IncompatibleOptions_stringDedup.java
--- a/test/hotspot/jtreg/runtime/appcds/sharedStrings/IncompatibleOptions.java	Fri Aug 24 13:30:56 2018 -0700
+++ b/test/hotspot/jtreg/runtime/appcds/sharedStrings/IncompatibleOptions.java	Thu Aug 23 21:16:45 2018 -0700
@@ -29,15 +29,11 @@
  * @requires vm.cds.archived.java.heap
  * @requires (vm.gc=="null")
  * @library /test/lib /test/hotspot/jtreg/runtime/appcds
- * @modules java.base/jdk.internal.misc
- * @modules java.management
- *          jdk.jartool/sun.tools.jar
+ * @modules jdk.jartool/sun.tools.jar
  * @build sun.hotspot.WhiteBox
  * @run driver ClassFileInstaller sun.hotspot.WhiteBox sun.hotspot.WhiteBox$WhiteBoxPermission
  * @build HelloString
  * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xbootclasspath/a:. IncompatibleOptions
- * @run main/othervm -XX:+UseStringDeduplication -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xbootclasspath/a:. IncompatibleOptions
- * @run main/othervm -XX:-CompactStrings -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xbootclasspath/a:. IncompatibleOptions
  */
 
 import jdk.test.lib.Asserts;
@@ -59,8 +55,10 @@
         "The shared archive file's CompactStrings setting .* does not equal the current CompactStrings setting";
 
     static String appJar;
+    static String[] globalVmOptions;
 
     public static void main(String[] args) throws Exception {
+        globalVmOptions = args; // specified by "@run main" in IncompatibleOptions_*.java
         appJar = JarBuilder.build("IncompatibleOptions", "HelloString");
 
         // Uncompressed OOPs
@@ -116,14 +114,16 @@
 
         System.out.println("Testcase: " + testCaseNr);
         OutputAnalyzer output = TestCommon.dump(appJar, TestCommon.list("Hello"),
-            "-XX:+UseCompressedOops",
-            collectorOption,
-            "-XX:SharedArchiveConfigFile=" + TestCommon.getSourceFile("SharedStringsBasic.txt"),
-            "-Xlog:cds,cds+hashtables",
-            extraOption);
+            TestCommon.concat(globalVmOptions,
+                "-XX:+UseCompressedOops",
+                collectorOption,
+                "-XX:SharedArchiveConfigFile=" + TestCommon.getSourceFile("SharedStringsBasic.txt"),
+                "-Xlog:cds,cds+hashtables",
+                extraOption));
 
-        if (expectedWarning != null)
+        if (expectedWarning != null) {
             output.shouldContain(expectedWarning);
+        }
 
         if (expectedToFail) {
             Asserts.assertNE(output.getExitValue(), 0,
@@ -140,19 +140,25 @@
         // needed, otherwise system considers empty extra option as a
         // main class param, and fails with "Could not find or load main class"
         if (!extraOption.isEmpty()) {
-            output = TestCommon.exec(appJar, "-XX:+UseCompressedOops",
-                collectorOption, "-Xlog:cds", extraOption, "HelloString");
+            output = TestCommon.exec(appJar,
+                TestCommon.concat(globalVmOptions,
+                    "-XX:+UseCompressedOops",
+                    collectorOption, "-Xlog:cds", extraOption, "HelloString"));
         } else {
-            output = TestCommon.exec(appJar, "-XX:+UseCompressedOops",
-                collectorOption, "-Xlog:cds", "HelloString");
+            output = TestCommon.exec(appJar,
+                TestCommon.concat(globalVmOptions,
+                    "-XX:+UseCompressedOops",
+                    collectorOption, "-Xlog:cds", "HelloString"));
         }
 
-        if (expectedWarning != null)
+        if (expectedWarning != null) {
             output.shouldMatch(expectedWarning);
+        }
 
-        if (expectedToFail)
+        if (expectedToFail) {
             Asserts.assertNE(output.getExitValue(), 0);
-        else
+        } else {
             SharedStringsUtils.checkExec(output);
+        }
     }
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/sharedStrings/IncompatibleOptions_noCompactStrings.java	Thu Aug 23 21:16:45 2018 -0700
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2018, 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
+ * @summary Test options that are incompatible with use of shared strings
+ *          Also test mismatch in oops encoding between dump time and run time
+ * @requires vm.cds.archived.java.heap
+ * @requires (vm.gc=="null")
+ * @library /test/lib /test/hotspot/jtreg/runtime/appcds
+ * @modules jdk.jartool/sun.tools.jar
+ * @build sun.hotspot.WhiteBox
+ * @run driver ClassFileInstaller sun.hotspot.WhiteBox sun.hotspot.WhiteBox$WhiteBoxPermission
+ * @build HelloString
+ * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xbootclasspath/a:. IncompatibleOptions -XX:-CompactStrings
+ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/sharedStrings/IncompatibleOptions_stringDedup.java	Thu Aug 23 21:16:45 2018 -0700
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2018, 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
+ * @summary Test options that are incompatible with use of shared strings
+ *          Also test mismatch in oops encoding between dump time and run time
+ * @requires vm.cds.archived.java.heap
+ * @requires (vm.gc=="null")
+ * @library /test/lib /test/hotspot/jtreg/runtime/appcds
+ * @modules jdk.jartool/sun.tools.jar
+ * @build sun.hotspot.WhiteBox
+ * @run driver ClassFileInstaller sun.hotspot.WhiteBox sun.hotspot.WhiteBox$WhiteBoxPermission
+ * @build HelloString
+ * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xbootclasspath/a:. IncompatibleOptions -XX:+UseStringDeduplication
+ */