< prev index next >

test/hotspot/jtreg/serviceability/sa/ClhsdbLauncher.java

Print this page

        

@@ -27,10 +27,11 @@
 import java.util.Map;
 
 import jdk.test.lib.apps.LingeredApp;
 import jdk.test.lib.Platform;
 import jdk.test.lib.JDKToolLauncher;
+import jdk.test.lib.JDKToolFinder;
 import jdk.test.lib.process.OutputAnalyzer;
 
 /**
  * This is a framework to run 'jhsdb clhsdb' commands.
  * See open/test/hotspot/jtreg/serviceability/sa/ClhsdbLongConstant.java for

@@ -66,10 +67,31 @@
         toolProcess = processBuilder.start();
     }
 
     /**
      *
+     * Launches 'jhsdb clhsdb' and loads a core file.
+     * @param coreFileName - Name of the corefile to be loaded.
+     */
+    private void loadCore(String coreFileName)
+        throws IOException {
+
+        JDKToolLauncher launcher = JDKToolLauncher.createUsingTestJDK("jhsdb");
+        launcher.addToolArg("clhsdb");
+        launcher.addToolArg("--core=" + coreFileName);
+        launcher.addToolArg("--exe=" + JDKToolFinder.getTestJDKTool("java"));
+        System.out.println("Starting clhsdb against corefile " + coreFileName +
+                           " and exe " + JDKToolFinder.getTestJDKTool("java"));
+
+        ProcessBuilder processBuilder = new ProcessBuilder(launcher.getCommand());
+        processBuilder.redirectError(ProcessBuilder.Redirect.INHERIT);
+
+        toolProcess = processBuilder.start();
+    }
+
+    /**
+     *
      * Runs 'jhsdb clhsdb' commands and checks for expected and unexpected strings.
      * @param commands  - clhsdb commands to execute.
      * @param expectedStrMap - Map of expected strings per command which need to
      *                         be checked in the output of the command.
      * @param unExpectedStrMap - Map of unexpected strings per command which should

@@ -157,6 +179,34 @@
         }
 
         attach(lingeredAppPid);
         return runCmd(commands, expectedStrMap, unExpectedStrMap);
     }
+
+    /**
+     *
+     * Launches 'jhsdb clhsdb', loads a core file, executes the commands,
+     * checks for expected and unexpected strings.
+     * @param coreFileName - Name of the core file to be debugged.
+     * @param commands  - clhsdb commands to execute.
+     * @param expectedStrMap - Map of expected strings per command which need to
+     *                         be checked in the output of the command.
+     * @param unExpectedStrMap - Map of unexpected strings per command which should
+     *                           not be present in the output of the command.
+     * @return Output of the commands as a String.
+     */
+    public String runOnCore(String coreFileName,
+                            List<String> commands,
+                            Map<String, List<String>> expectedStrMap,
+                            Map<String, List<String>> unExpectedStrMap)
+        throws IOException, InterruptedException {
+
+        if (!Platform.shouldSAAttach()) {
+            // Silently skip the test if we don't have enough permissions to attach
+            System.out.println("SA attach not expected to work - test skipped.");
+            return null;
+        }
+
+        loadCore(coreFileName);
+        return runCmd(commands, expectedStrMap, unExpectedStrMap);
+    }
 }
< prev index next >