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
--- a/jdk/test/ProblemList.txt Thu Aug 25 12:24:16 2016 +0900
+++ b/jdk/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/jdk/test/sun/tools/jhsdb/BasicLauncherTest.java Thu Aug 25 12:24:16 2016 +0900
+++ b/jdk/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/jdk/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/jdk/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);
+ }
+ }