提交 090aaac3 编写于 作者: J jbachorik

8004126: TEST_BUG: com/sun/jdi/BadHandshakeTest.java fails intermittently

Reviewed-by: dholmes, ykantser
上级 257253a0
......@@ -24,16 +24,12 @@
/* @test
* @bug 6306165 6432567
* @summary Check that a bad handshake doesn't cause a debuggee to abort
* @library /lib/testlibrary
*
* @build VMConnection BadHandshakeTest Exit0
* @run main BadHandshakeTest
*
*/
import java.io.InputStream;
import java.io.IOException;
import java.io.File;
import java.io.BufferedInputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.InetAddress;
import com.sun.jdi.Bootstrap;
......@@ -44,50 +40,13 @@ import com.sun.jdi.connect.AttachingConnector;
import java.util.Map;
import java.util.List;
import java.util.Iterator;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
public class BadHandshakeTest {
static volatile boolean ready = false;
/*
* Helper class to redirect process output/error
*/
static class IOHandler implements Runnable {
InputStream in;
IOHandler(InputStream in) {
this.in = in;
}
static void handle(InputStream in) {
IOHandler handler = new IOHandler(in);
Thread thr = new Thread(handler);
thr.setDaemon(true);
thr.start();
}
public void run() {
try {
byte b[] = new byte[100];
for (;;) {
int n = in.read(b, 0, 100);
// The first thing that will get read is
// Listening for transport dt_socket at address: xxxxx
// which shows the debuggee is ready to accept connections.
ready = true;
if (n < 0) {
break;
}
String s = new String(b, 0, n, "UTF-8");
System.out.print(s);
}
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
}
import jdk.testlibrary.Utils;
import jdk.testlibrary.ProcessTools;
public class BadHandshakeTest {
/*
* Find a connector by name
*/
......@@ -106,22 +65,31 @@ public class BadHandshakeTest {
/*
* Launch a server debuggee with the given address
*/
private static Process launch(String address, String class_name) throws IOException {
String exe = System.getProperty("java.home")
+ File.separator + "bin" + File.separator + "java";
String cmd = exe + " " + VMConnection.getDebuggeeVMOptions() +
" -agentlib:jdwp=transport=dt_socket" +
",server=y" + ",suspend=y" + ",address=" + address +
" " + class_name;
System.out.println("Starting: " + cmd);
Process p = Runtime.getRuntime().exec(cmd);
IOHandler.handle(p.getInputStream());
IOHandler.handle(p.getErrorStream());
return p;
private static Process launch(String address, String class_name) throws Exception {
String[] args = VMConnection.insertDebuggeeVMOptions(new String[] {
"-agentlib:jdwp=transport=dt_socket" +
",server=y" + ",suspend=y" + ",address=" + address,
class_name
});
ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(args);
final AtomicBoolean success = new AtomicBoolean();
Process p = ProcessTools.startProcess(
class_name,
pb,
(line) -> {
// The first thing that will get read is
// Listening for transport dt_socket at address: xxxxx
// which shows the debuggee is ready to accept connections.
success.set(line.contains("Listening for transport dt_socket at address:"));
return true;
},
1500,
TimeUnit.MILLISECONDS
);
return success.get() ? p : null;
}
/*
......@@ -131,23 +99,14 @@ public class BadHandshakeTest {
* - verify we saw no error
*/
public static void main(String args[]) throws Exception {
// find a free port
ServerSocket ss = new ServerSocket(0);
int port = ss.getLocalPort();
ss.close();
int port = Utils.getFreePort();
String address = String.valueOf(port);
// launch the server debuggee
Process process = launch(address, "Exit0");
// wait for the debugge to be ready
while (!ready) {
try {
Thread.sleep(1000);
} catch(Exception ee) {
throw ee;
}
if (process == null) {
throw new RuntimeException("Unable to start debugee");
}
// Connect to the debuggee and handshake with garbage
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册