< prev index next >

test/hotspot/jtreg/runtime/appcds/jvmti/InstrumentationTest.java

Print this page

*** 1,7 **** /* ! * Copyright (c) 2014, 2017, 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. --- 1,7 ---- /* ! * Copyright (c) 2014, 2019, 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.
*** 27,54 **** * @summary Exercise the java.lang.instrument.Instrumentation APIs on classes archived * using CDS/AppCDSv1/AppCDSv2. * @library /test/lib /test/hotspot/jtreg/runtime/appcds /test/hotspot/jtreg/runtime/appcds/test-classes * @requires vm.cds * @requires vm.flavor != "minimal" - * @modules java.base/jdk.internal.misc - * jdk.jartool/sun.tools.jar - * java.management * @build sun.hotspot.WhiteBox * InstrumentationApp * InstrumentationClassFileTransformer * InstrumentationRegisterClassFileTransformer * @run main/othervm InstrumentationTest */ // Note: TestCommon is from /test/hotspot/jtreg/runtime/appcds/TestCommon.java ! // Note: Util is from /test/hotspot/jtreg/runtime/appcds/test-classes/TestCommon.java import com.sun.tools.attach.VirtualMachine; - import com.sun.tools.attach.VirtualMachineDescriptor; import java.io.File; import java.io.FileOutputStream; - import java.util.List; import jdk.test.lib.Asserts; import jdk.test.lib.cds.CDSOptions; import jdk.test.lib.process.OutputAnalyzer; import jdk.test.lib.process.ProcessTools; --- 27,49 ---- * @summary Exercise the java.lang.instrument.Instrumentation APIs on classes archived * using CDS/AppCDSv1/AppCDSv2. * @library /test/lib /test/hotspot/jtreg/runtime/appcds /test/hotspot/jtreg/runtime/appcds/test-classes * @requires vm.cds * @requires vm.flavor != "minimal" * @build sun.hotspot.WhiteBox * InstrumentationApp * InstrumentationClassFileTransformer * InstrumentationRegisterClassFileTransformer * @run main/othervm InstrumentationTest */ // Note: TestCommon is from /test/hotspot/jtreg/runtime/appcds/TestCommon.java ! // Note: Util is from /test/hotspot/jtreg/runtime/appcds/test-classes/Util.java import com.sun.tools.attach.VirtualMachine; import java.io.File; import java.io.FileOutputStream; import jdk.test.lib.Asserts; import jdk.test.lib.cds.CDSOptions; import jdk.test.lib.process.OutputAnalyzer; import jdk.test.lib.process.ProcessTools;
*** 119,129 **** "-XX:+UnlockDiagnosticVMOptions", "-XX:+WhiteBoxAPI", "-Xshare:off", agentCmdArg, "InstrumentationApp", flagFile, bootJar, appJar, custJar); ! TestCommon.executeAndLog(pb, "no-sharing").shouldHaveExitValue(0); checkAttach(t); // Dump the AppCDS archive. On some platforms AppCDSv2 may not be enabled, so we // first try the v2 classlist, and if that fails, revert to the v1 classlist. // Note that the InstrumentationApp$ArchivedIfAppCDSv2Enabled class is archived --- 114,128 ---- "-XX:+UnlockDiagnosticVMOptions", "-XX:+WhiteBoxAPI", "-Xshare:off", agentCmdArg, "InstrumentationApp", flagFile, bootJar, appJar, custJar); ! Process process = pb.start(); ! if (t != null) { ! t.setPid(process.pid()); ! } ! TestCommon.executeAndLog(process, "no-sharing").shouldHaveExitValue(0); checkAttach(t); // Dump the AppCDS archive. On some platforms AppCDSv2 may not be enabled, so we // first try the v2 classlist, and if that fails, revert to the v1 classlist. // Note that the InstrumentationApp$ArchivedIfAppCDSv2Enabled class is archived
*** 148,164 **** System.out.println("============================================================"); System.out.println(""); flagFile = getFlagFile(attachAgent); t = doAttach(attachAgent, flagFile, agentJar); ! out = TestCommon.execAuto("-cp", appJar, bootCP, "-XX:+UnlockDiagnosticVMOptions", "-XX:+WhiteBoxAPI", agentCmdArg, "InstrumentationApp", flagFile, bootJar, appJar, custJar); ! CDSOptions opts = (new CDSOptions()).setXShareMode("auto"); TestCommon.checkExec(out, opts); checkAttach(t); } --- 147,167 ---- System.out.println("============================================================"); System.out.println(""); flagFile = getFlagFile(attachAgent); t = doAttach(attachAgent, flagFile, agentJar); ! pb = TestCommon.createProcessBuilderWithAutoArchive("-cp", appJar, bootCP, "-XX:+UnlockDiagnosticVMOptions", "-XX:+WhiteBoxAPI", agentCmdArg, "InstrumentationApp", flagFile, bootJar, appJar, custJar); ! process = pb.start(); ! if (t != null) { ! t.setPid(process.pid()); ! } ! out = TestCommon.executeAndLog(process, "auto"); CDSOptions opts = (new CDSOptions()).setXShareMode("auto"); TestCommon.checkExec(out, opts); checkAttach(t); }
*** 210,248 **** static class AgentAttachThread extends Thread { String flagFile; String agentJar; volatile boolean succeeded; AgentAttachThread(String flagFile, String agentJar) { this.flagFile = flagFile; this.agentJar = agentJar; this.succeeded = false; } ! static String getPid(String flagFile) throws Throwable { ! while (true) { ! // Keep polling until the child process has been launched. If for some ! // reason the child process fails to launch, this test will be terminated // by JTREG's time-out mechanism. Thread.sleep(100); - List<VirtualMachineDescriptor> vmds = VirtualMachine.list(); - for (VirtualMachineDescriptor vmd : vmds) { - if (vmd.displayName().contains(flagFile) && vmd.displayName().contains("InstrumentationApp")) { - // We use flagFile (which has the PID of this process) as a unique identifier - // to ident the child process, which we want to attach to. - System.out.println("Process found: " + vmd.id() + " " + vmd.displayName()); - return vmd.id(); - } - } } } public void run() { try { ! String pid = getPid(flagFile); ! VirtualMachine vm = VirtualMachine.attach(pid); System.out.println(agentJar); vm.loadAgent(agentJar); } catch (Throwable t) { t.printStackTrace(); throw new RuntimeException(t); --- 213,252 ---- static class AgentAttachThread extends Thread { String flagFile; String agentJar; volatile boolean succeeded; + volatile long pid; + volatile boolean pidIsKnown; AgentAttachThread(String flagFile, String agentJar) { this.flagFile = flagFile; this.agentJar = agentJar; this.succeeded = false; + this.pidIsKnown = false; } ! void setPid(long pid) { ! this.pid = pid; ! this.pidIsKnown = true; ! } ! ! String getPid() throws Throwable { ! while (!pidIsKnown) { ! // Keep polling until the child process has been launched, and its pid is known. ! // If for some reason the child process fails to launch, this test will be terminated // by JTREG's time-out mechanism. Thread.sleep(100); } + System.out.println("pid = " + pid); + return Long.toString(pid); } public void run() { try { ! String pidStr = getPid(); ! VirtualMachine vm = VirtualMachine.attach(pidStr); System.out.println(agentJar); vm.loadAgent(agentJar); } catch (Throwable t) { t.printStackTrace(); throw new RuntimeException(t);
< prev index next >