test/hotspot/jtreg/runtime/cds/appcds/ExtraSymbols.java
changeset 58923 2938e0a4e954
parent 57705 7cf02b2c1455
--- a/test/hotspot/jtreg/runtime/cds/appcds/ExtraSymbols.java	Mon Nov 04 11:42:24 2019 -0800
+++ b/test/hotspot/jtreg/runtime/cds/appcds/ExtraSymbols.java	Mon Nov 04 12:36:54 2019 -0800
@@ -34,6 +34,7 @@
 
 import java.io.*;
 import jdk.test.lib.process.OutputAnalyzer;
+import jdk.test.lib.cds.CDSTestUtils;
 
 public class ExtraSymbols {
     static final String CDS_LOGGING = "-Xlog:cds,cds+hashtables";
@@ -46,10 +47,9 @@
         checkOutput(output);
         int numEntries1 = numOfEntries(output);
 
-        // 2. Dump an archive with extra symbols. All symbols in
-        // ExtraSymbols.symbols.txt are valid. Dumping should succeed.
+        // 2. Dump an archive with lots of extra symbols.
         output = TestCommon.dump(appJar, TestCommon.list("Hello"), CDS_LOGGING,
-            "-XX:SharedArchiveConfigFile=" + TestCommon.getSourceFile("ExtraSymbols.symbols.txt"));
+            "-XX:SharedArchiveConfigFile=" + makeLotsExtraSymbols());
         checkOutput(output);
         int numEntries2 = numOfEntries(output);
         if (numEntries2 <= numEntries1) {
@@ -86,4 +86,30 @@
         output.shouldContain("Shared symbol table stats -------- base:");
         output.shouldHaveExitValue(0);
     }
+
+    static String makeLotsExtraSymbols() throws Exception {
+        String fileName = "LotsExtraSymbols.txt";
+        File f = new File(fileName);
+        try (FileWriter fw = new FileWriter(f)) {
+            fw.write("VERSION: 1.0\n");
+            fw.write("@SECTION: Symbol\n");
+            appendSymbol(fw, "This file is auto-generated by test/hotspot/jtreg/runtime/cds/appcds/ExtraSymbols.java. Do not edit.");
+            appendSymbol(fw, "Hello");
+            appendSymbol(fw, ""); // empty string
+            appendSymbol(fw, "Hello_\u0001");   // <128 escaping with \x
+            appendSymbol(fw, "Hello_\u00ff");   // <256 escaping with \x
+            appendSymbol(fw, "Hello_\u1234");   // >= 256 escaping with \x
+            appendSymbol(fw, "Hello_\uffff");   // >= 256 escaping with \x
+
+            for (int i = 0; i < 10000; i++) {
+                appendSymbol(fw, "NewSymbol" + Integer.toString(i));
+            }
+        }
+        return fileName;
+    }
+
+    private static void appendSymbol(FileWriter fw, String symbol) throws Exception {
+        fw.write(CDSTestUtils.formatArchiveConfigSymbol(symbol));
+        fw.write("\n");
+    }
 }