6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24 package jdk.testlibrary;
25
26 import java.util.ArrayList;
27
28 public class JcmdBase {
29
30 private static ProcessBuilder processBuilder = new ProcessBuilder();
31
32 /**
33 * Attach jcmd to the current process
34 *
35 * @param commandArgs
36 * jcmd command line parameters, e.g. JFR.start
37 * @return jcmd output
38 * @throws Exception
39 */
40 public final static OutputAnalyzer jcmd(String... commandArgs)
41 throws Exception {
42 ArrayList<String> cmd = new ArrayList<String>();
43 String cmdString = "";
44
45 // jcmd from the jdk to be tested
46 String jcmdPath = JdkFinder.getTool("jcmd", false);
47 cmd.add(jcmdPath);
48 cmdString += jcmdPath;
49
50 String pid = Integer.toString(ProcessTools.getProcessId());
51 cmd.add(pid);
52 cmdString += " " + pid;
53
54 for (int i = 0; i < commandArgs.length; i++) {
55 cmd.add(commandArgs[i]);
56 cmdString += " " + commandArgs[i];
57 }
58
59 // Log command line for debugging purpose
60 System.out.println("Command line:");
61 System.out.println(cmdString);
62
63 processBuilder.command(cmd);
64 OutputAnalyzer output = new OutputAnalyzer(processBuilder.start());
65
66 // Log output for debugging purpose
67 System.out.println("Command output:");
68 System.out.println(output.getOutput());
69
70 if (output.getExitValue() != 0) {
71 throw new Exception(processBuilder.command()
72 + " resulted in exit value " + output.getExitValue()
73 + " , expected to get 0");
74 }
75
76 return output;
77 }
78
79 }
|
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24 package jdk.testlibrary;
25
26 import java.util.Arrays;
27
28 /**
29 * Super class for tests which need to attach jcmd to the current process.
30 */
31 public class JcmdBase {
32
33 private static ProcessBuilder processBuilder = new ProcessBuilder();
34
35 /**
36 * Attach jcmd to the current process
37 *
38 * @param toolArgs
39 * jcmd command line parameters, e.g. VM.flags
40 * @return jcmd output
41 * @throws Exception
42 */
43 public final static OutputAnalyzer jcmd(String... toolArgs)
44 throws Exception {
45 JDKToolLauncher launcher = JDKToolLauncher.createUsingTestJDK("jcmd");
46 launcher.addToolArg(Integer.toString(ProcessTools.getProcessId()));
47 for (String toolArg : toolArgs) {
48 launcher.addToolArg(toolArg);
49 }
50 processBuilder.command(launcher.getCommand());
51 System.out.println(Arrays.toString(processBuilder.command().toArray()).replace(",", ""));
52 OutputAnalyzer output = new OutputAnalyzer(processBuilder.start());
53 System.out.println(output.getOutput());
54
55 output.shouldHaveExitValue(0);
56
57 return output;
58 }
59
60 }
|