changeset 15626:659f01da7ec0

8163346: Update jmap-hashcode/Test8028623.java for better diagnostic of timeout. Summary: Update jmap-hashcode/Test8028623.java to use LingeredApp and rename it to jhsdb/HeapDumpTest.java Reviewed-by: dsamersoff, dholmes Contributed-by: sharath.ballal@oracle.com
author dsamersoff
date Fri, 26 Aug 2016 13:11:39 +0300
parents bcd1edb52592
children 6840c15304e7
files test/ProblemList.txt test/sun/tools/jhsdb/BasicLauncherTest.java test/sun/tools/jhsdb/HeapDumpTest.java test/sun/tools/jhsdb/LingeredAppWithExtendedChars.java
diffstat 4 files changed, 165 insertions(+), 20 deletions(-) [+]
line wrap: on
line diff
--- a/test/ProblemList.txt	Thu Aug 25 12:24:16 2016 +0900
+++ b/test/ProblemList.txt	Fri Aug 26 13:11:39 2016 +0300
@@ -367,6 +367,8 @@
 
 sun/tools/jhsdb/BasicLauncherTest.java                          8160376 macosx-all
 
+sun/tools/jhsdb/HeapDumpTest.java                               8160376 macosx-all
+
 sun/tools/jhsdb/heapconfig/JMapHeapConfigTest.java              8160376 macosx-all
 
 sun/tools/jps/TestJpsJar.java                                   8160923 generic-all
--- a/test/sun/tools/jhsdb/BasicLauncherTest.java	Thu Aug 25 12:24:16 2016 +0900
+++ b/test/sun/tools/jhsdb/BasicLauncherTest.java	Fri Aug 26 13:11:39 2016 +0300
@@ -31,13 +31,10 @@
  * @run main BasicLauncherTest
  */
 
-import static jdk.testlibrary.Asserts.assertTrue;
-
 import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.io.InputStreamReader;
-import java.io.File;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Arrays;
@@ -197,21 +194,6 @@
                                                        Arrays.asList(toolArgs));
     }
 
-    public static void testHeapDump() throws IOException {
-        File dump = new File("jhsdb.jmap.dump." +
-                             System.currentTimeMillis() + ".hprof");
-        if (dump.exists()) {
-            dump.delete();
-        }
-        dump.deleteOnExit();
-
-        launch("heap written to", null, "jmap",
-               "--binaryheap", "--dumpfile=" + dump.getAbsolutePath());
-
-        assertTrue(dump.exists() && dump.isFile(),
-                   "Could not create dump file " + dump.getAbsolutePath());
-    }
-
     public static void main(String[] args)
         throws IOException {
 
@@ -230,8 +212,6 @@
                "System Properties info not available", "jinfo");
         launch("java.threads", null, "jsnap");
 
-        testHeapDump();
-
         // The test throws RuntimeException on error.
         // IOException is thrown if LingeredApp can't start because of some bad
         // environment condition
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/sun/tools/jhsdb/HeapDumpTest.java	Fri Aug 26 13:11:39 2016 +0300
@@ -0,0 +1,131 @@
+/*
+ * Copyright (c) 2016, 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
+ * @bug 8163346
+ * @summary Test hashing of extended characters in Serviceability Agent.
+ * @library /test/lib/share/classes
+ * @library /lib/testlibrary
+ * @build jdk.testlibrary.*
+ * @build jdk.test.lib.apps.*
+ * @compile -encoding utf8 HeapDumpTest.java
+ * @run main/timeout=240 HeapDumpTest
+ */
+
+import static jdk.testlibrary.Asserts.assertTrue;
+
+import java.io.IOException;
+import java.io.File;
+import java.util.List;
+import java.util.Arrays;
+import jdk.testlibrary.JDKToolLauncher;
+import jdk.testlibrary.OutputAnalyzer;
+import jdk.testlibrary.ProcessTools;
+import jdk.test.lib.apps.LingeredApp;
+import jdk.testlibrary.Platform;
+
+public class HeapDumpTest {
+
+    private static LingeredAppWithExtendedChars theApp = null;
+
+    /**
+     *
+     * @param vmArgs  - tool arguments to launch jhsdb
+     * @return exit code of tool
+     */
+    public static void launch(String expectedMessage, List<String> toolArgs)
+        throws IOException {
+
+        System.out.println("Starting LingeredApp");
+        try {
+            theApp = new LingeredAppWithExtendedChars();
+            LingeredApp.startApp(Arrays.asList("-Xmx256m"), theApp);
+
+            System.out.println(theApp.\u00CB);
+            System.out.println("Starting " + toolArgs.get(0) + " against " + theApp.getPid());
+            JDKToolLauncher launcher = JDKToolLauncher.createUsingTestJDK("jhsdb");
+
+            for (String cmd : toolArgs) {
+                launcher.addToolArg(cmd);
+            }
+
+            launcher.addToolArg("--pid=" + Long.toString(theApp.getPid()));
+
+            ProcessBuilder processBuilder = new ProcessBuilder(launcher.getCommand());
+            processBuilder.redirectError(ProcessBuilder.Redirect.INHERIT);
+            OutputAnalyzer output = ProcessTools.executeProcess(processBuilder);
+            System.out.println("stdout:");
+            System.out.println(output.getStdout());
+            System.out.println("stderr:");
+            System.out.println(output.getStderr());
+            output.shouldContain(expectedMessage);
+            output.shouldHaveExitValue(0);
+
+        } catch (Exception ex) {
+            throw new RuntimeException("Test ERROR " + ex, ex);
+        } finally {
+            LingeredApp.stopApp(theApp);
+        }
+    }
+
+    public static void launch(String expectedMessage, String... toolArgs)
+        throws IOException {
+
+        launch(expectedMessage, Arrays.asList(toolArgs));
+    }
+
+    public static void testHeapDump() throws IOException {
+        File dump = new File("jhsdb.jmap.heap." +
+                             System.currentTimeMillis() + ".hprof");
+        if (dump.exists()) {
+            dump.delete();
+        }
+
+        launch("heap written to", "jmap",
+               "--binaryheap", "--dumpfile=" + dump.getAbsolutePath());
+
+        assertTrue(dump.exists() && dump.isFile(),
+                   "Could not create dump file " + dump.getAbsolutePath());
+
+        dump.delete();
+    }
+
+    public static void main(String[] args)
+        throws IOException {
+
+        if (!Platform.shouldSAAttach()) {
+            // Silently skip the test if we don't have enough permissions to attach
+            System.err.println("Error! Insufficient permissions to attach - test skipped.");
+            return;
+        }
+
+
+        testHeapDump();
+
+        // The test throws RuntimeException on error.
+        // IOException is thrown if LingeredApp can't start because of some bad
+        // environment condition
+        System.out.println("Test PASSED");
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/sun/tools/jhsdb/LingeredAppWithExtendedChars.java	Fri Aug 26 13:11:39 2016 +0300
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2016, 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.
+ */
+import jdk.test.lib.apps.LingeredApp;
+
+public class LingeredAppWithExtendedChars extends LingeredApp {
+
+    public static int \u00CB = 1;
+
+    public static void main(String args[]) {
+        LingeredApp.main(args);
+    }
+ }