# HG changeset patch # User ykantser # Date 1429860824 -7200 # Fri Apr 24 09:33:44 2015 +0200 # Node ID fec7bec3563d2adb87180132880f90f416128ac5 # Parent 9bf9b322ae5a881db044c75c55e461e7bd5da2c8 8059047: Extract parser/validator from jhat for use in tests diff --git a/test/serviceability/dcmd/gc/HeapDumpTest.java b/test/serviceability/dcmd/gc/HeapDumpTest.java --- a/test/serviceability/dcmd/gc/HeapDumpTest.java +++ b/test/serviceability/dcmd/gc/HeapDumpTest.java @@ -24,8 +24,12 @@ import org.testng.annotations.Test; import org.testng.Assert; +import java.io.File; import java.io.IOException; +import jdk.test.lib.hprof.HprofParser; +import jdk.test.lib.hprof.model.Snapshot; + import com.oracle.java.testlibrary.JDKToolFinder; import com.oracle.java.testlibrary.OutputAnalyzer; import com.oracle.java.testlibrary.dcmd.CommandExecutor; @@ -35,53 +39,39 @@ * @test * @summary Test of diagnostic command GC.heap_dump * @library /testlibrary + * @library /../../test/lib/share/classes * @modules java.base/sun.misc * java.compiler * java.management * jdk.jvmstat/sun.jvmstat.monitor * @build com.oracle.java.testlibrary.* * @build com.oracle.java.testlibrary.dcmd.* + * @build jdk.test.lib.hprof.* + * @build jdk.test.lib.hprof.module.* + * @build jdk.test.lib.hprof.parser.* + * @build jdk.test.lib.hprof.utils.* * @run testng HeapDumpTest */ public class HeapDumpTest { protected String heapDumpArgs = ""; public void run(CommandExecutor executor) { - String fileName = "jcmd.gc.heap_dump." + System.currentTimeMillis() + ".hprof"; - String cmd = "GC.heap_dump " + heapDumpArgs + " " + fileName; + File dump = new File("jcmd.gc.heap_dump." + System.currentTimeMillis() + ".hprof"); + String cmd = "GC.heap_dump " + heapDumpArgs + " " + dump.getAbsolutePath(); executor.execute(cmd); - verifyHeapDump(fileName); + verifyHeapDump(dump); + + dump.deleteOnExit(); } - private void verifyHeapDump(String fileName) { - String jhat = JDKToolFinder.getJDKTool("jhat"); - String[] cmd = { jhat, "-parseonly", "true", fileName }; - - ProcessBuilder pb = new ProcessBuilder(cmd); - pb.redirectErrorStream(true); - Process p = null; - OutputAnalyzer output = null; - + private void verifyHeapDump(File dump) { + Assert.assertTrue(dump.exists() && dump.isFile(), "Could not create dump file " + dump.getAbsolutePath()); try { - p = pb.start(); - output = new OutputAnalyzer(p); - - /* - * Some hprof dumps of all objects contain constantPoolOop references that cannot be resolved, so we ignore - * failures about resolving constantPoolOop fields using a negative lookahead - */ - output.shouldNotMatch(".*WARNING(?!.*Failed to resolve object.*constantPoolOop.*).*"); - } catch (IOException e) { - Assert.fail("Test error: Caught exception while reading stdout/err of jhat", e); - } finally { - if (p != null) { - p.destroy(); - } - } - - if (output.getExitValue() != 0) { - Assert.fail("Test error: jhat exit code was nonzero"); + HprofParser.parse(dump); + } catch (Exception e) { + e.printStackTrace(); + Assert.fail("Could not parse dump file " + dump.getAbsolutePath()); } }