6755586: Test com/sun/jdi/NoLaunchOptionTest.java may erroneously fail
authorykantser
Fri, 08 May 2015 09:14:18 +0200
changeset 30672 304ed79789c7
parent 30670 9663e1b741df
child 30673 d0dc762e56a5
6755586: Test com/sun/jdi/NoLaunchOptionTest.java may erroneously fail Reviewed-by: sla, dsamersoff
jdk/test/com/sun/jdi/NoLaunchOptionTest.java
--- a/jdk/test/com/sun/jdi/NoLaunchOptionTest.java	Thu May 07 11:01:37 2015 +0200
+++ b/jdk/test/com/sun/jdi/NoLaunchOptionTest.java	Fri May 08 09:14:18 2015 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2015, 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
@@ -21,133 +21,33 @@
  * questions.
  */
 
-/*
- *   @test       NoLaunchOptionTest.java
- *   @bug        4554734 4724714
- *   @summary    Test for -Xrunjdwp:[onthrow,onuncaught] suboptions require launch suboption
- *   @author     Tim Bell
- *
- *  @run compile -g NoLaunchOptionTest.java
- *  @build VMConnection
- *  @run driver NoLaunchOptionTest
- */
-
-import java.net.ServerSocket;
-
-public class NoLaunchOptionTest extends Object {
-    private Process subprocess;
-    private int subprocessStatus;
-    private static final String CR = System.getProperty("line.separator");
-    private static final int BUFFERSIZE = 4096;
-    public static final int RETSTAT = 0;
-    public static final int STDOUT = 1;
-    public static final int STDERR = 2;
-
-    /**
-     * Run an arbitrary command and return the results to caller.
-     *
-     * @param an array of String containing the command
-     *        to run and any flags or parameters to the command.
-     *
-     * @return completion status, stderr and stdout as array of String
-     *  Look for:
-     *    return status in result[NoLaunchOptionTest.RETSTAT]
-     *    standard out in result[NoLaunchOptionTest.STDOUT]
-     *    standard err in result[NoLaunchOptionTest.STDERR]
-     *
-     */
-    public String[] run (String[] cmdStrings) {
-        StringBuffer stdoutBuffer = new StringBuffer();
-        StringBuffer stderrBuffer = new StringBuffer();
+import static jdk.testlibrary.Asserts.assertFalse;
+import jdk.testlibrary.OutputAnalyzer;
+import jdk.testlibrary.ProcessTools;
 
-        System.out.print(CR + "runCommand method about to execute: ");
-        for (int iNdx = 0; iNdx < cmdStrings.length; iNdx++) {
-            System.out.print(" ");
-            System.out.print(cmdStrings[iNdx]);
-        }
-        System.out.println(CR);
-        try {
-            Process process = Runtime.getRuntime().exec(cmdStrings);
-            /*
-             * Gather up the output of the subprocess using non-blocking
-             * reads so we can get both the subprocess stdout and the
-             * subprocess stderr without overfilling any buffers.
-             */
-            java.io.BufferedInputStream is =
-                new java.io.BufferedInputStream(process.getInputStream());
-            int isLen = 0;
-            byte[] isBuf = new byte[BUFFERSIZE];
-
-            java.io.BufferedInputStream es =
-                new java.io.BufferedInputStream(process.getErrorStream());
-            int esLen = 0;
-            byte[] esBuf = new byte[BUFFERSIZE];
-
-            do {
-                isLen = is.read(isBuf);
-                if (isLen > 0) {
-                    stdoutBuffer.append(
-                                        new String(isBuf, 0, isLen));
-                }
-                esLen = es.read(esBuf);
-                if (esLen > 0) {
-                    stderrBuffer.append(
-                                        new String(esBuf, 0, esLen));
-                }
-            } while ((isLen > -1) || (esLen > -1));
-            try {
-                process.waitFor();
-                subprocessStatus = process.exitValue();
-                process = null;
-            } catch(java.lang.InterruptedException e) {
-                System.err.println("InterruptedException: " + e);
-            }
-
-        } catch(java.io.IOException ex) {
-            System.err.println("IO error: " + ex);
-        }
-        String[] result =
-            new String[] {
-                Integer.toString(subprocessStatus),
-                stdoutBuffer.toString(),
-                stderrBuffer.toString()
-        };
-
-        System.out.println(CR + "--- Return code was: " +
-                           CR + result[RETSTAT]);
-        System.out.println(CR + "--- Return stdout was: " +
-                           CR + result[STDOUT]);
-        System.out.println(CR + "--- Return stderr was: " +
-                           CR + result[STDERR]);
-
-        return result;
-    }
+/*
+ * @test NoLaunchOptionTest.java
+ * @bug 4554734 4724714
+ * @summary Test for -Xrunjdwp:[onthrow,onuncaught] suboptions require launch suboption
+ * @library /lib/testlibrary
+ * @run compile -g NoLaunchOptionTest.java
+ * @build jdk.testlibrary.* VMConnection
+ * @run driver NoLaunchOptionTest
+ */
+public class NoLaunchOptionTest extends Object {
 
     public static void main(String[] args) throws Exception {
-        // find a free port
-        ServerSocket ss = new ServerSocket(0);
-        int port = ss.getLocalPort();
-        ss.close();
-        String address = String.valueOf(port);
+        String[] cmd = VMConnection.insertDebuggeeVMOptions(new String[] {
+                "-agentlib:jdwp=transport=dt_socket,address=5555," +
+                "onthrow=java.lang.ClassNotFoundException,suspend=n",
+                "NotAClass" });
 
-        String javaExe = System.getProperty("java.home") +
-            java.io.File.separator + "bin" +
-            java.io.File.separator + "java";
-        String targetClass = "NotAClass";
-        String cmds [] = {javaExe,
-                          "-agentlib:jdwp=transport=dt_socket,address=" +
-                          address + "," +
-                          "onthrow=java.lang.ClassNotFoundException,suspend=n",
-                          targetClass};
-        NoLaunchOptionTest myTest = new NoLaunchOptionTest();
-        String results [] = myTest.run(VMConnection.insertDebuggeeVMOptions(cmds));
-        if ((results[RETSTAT].equals("1")) &&
-            (results[STDERR].contains("ERROR:"))) {
-            System.out.println("Test passed: status = 1 with warning messages " +
-                               "is expected and normal for this test");
-        } else {
-            throw new Exception("Test failed: unspecified test failure");
-        }
+        ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(cmd);
+        OutputAnalyzer output = ProcessTools.executeProcess(pb);
+        System.out.println(output.getOutput());
+
+        assertFalse(output.getExitValue() == 0, "Exit code should not be 0");
+        output.shouldContain("ERROR: JDWP Specify launch=<command line> when using onthrow or onuncaught suboption");
     }
 
 }