8015765: TEST_BUG: java/nio/channels/ServerSocketChannel/AdaptServerSocket.java failing intermittently
Reviewed-by: chegar, dholmes, alanb
This commit is contained in:
parent
9aceb41d6d
commit
ab37de55bf
@ -35,7 +35,7 @@ import java.nio.charset.*;
|
|||||||
public class AdaptServerSocket {
|
public class AdaptServerSocket {
|
||||||
|
|
||||||
static java.io.PrintStream out = System.out;
|
static java.io.PrintStream out = System.out;
|
||||||
|
static volatile boolean clientStarted = false;
|
||||||
static volatile Exception clientException = null;
|
static volatile Exception clientException = null;
|
||||||
static volatile Thread client = null;
|
static volatile Thread client = null;
|
||||||
|
|
||||||
@ -44,15 +44,14 @@ public class AdaptServerSocket {
|
|||||||
{
|
{
|
||||||
Thread t = new Thread() {
|
Thread t = new Thread() {
|
||||||
public void run() {
|
public void run() {
|
||||||
try {
|
try (Socket so = new Socket()) {
|
||||||
Socket so = new Socket();
|
|
||||||
out.println("client: " + so);
|
out.println("client: " + so);
|
||||||
|
clientStarted = true;
|
||||||
if (dally > 0)
|
if (dally > 0)
|
||||||
Thread.sleep(dally);
|
Thread.sleep(dally);
|
||||||
so.connect(new InetSocketAddress(port));
|
so.connect(new InetSocketAddress(port));
|
||||||
if (Thread.interrupted()) {
|
if (Thread.interrupted()) {
|
||||||
out.println("client interrupted");
|
out.println("client interrupted");
|
||||||
so.close();
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
out.println("client: " + so);
|
out.println("client: " + so);
|
||||||
@ -61,7 +60,6 @@ public class AdaptServerSocket {
|
|||||||
a += 1;
|
a += 1;
|
||||||
so.getOutputStream().write(a);
|
so.getOutputStream().write(a);
|
||||||
out.println("client: wrote " + a);
|
out.println("client: wrote " + a);
|
||||||
so.close();
|
|
||||||
} catch (Exception x) {
|
} catch (Exception x) {
|
||||||
if (x instanceof InterruptedException)
|
if (x instanceof InterruptedException)
|
||||||
return;
|
return;
|
||||||
@ -78,43 +76,44 @@ public class AdaptServerSocket {
|
|||||||
static void test(int clientDally, int timeout, boolean shouldTimeout)
|
static void test(int clientDally, int timeout, boolean shouldTimeout)
|
||||||
throws Exception
|
throws Exception
|
||||||
{
|
{
|
||||||
|
clientStarted = false;
|
||||||
out.println();
|
out.println();
|
||||||
|
|
||||||
ServerSocketChannel ssc = ServerSocketChannel.open();
|
try (ServerSocketChannel ssc = ServerSocketChannel.open();
|
||||||
ServerSocket sso = ssc.socket();
|
ServerSocket sso = ssc.socket()) {
|
||||||
out.println("created: " + ssc);
|
out.println("created: " + ssc);
|
||||||
out.println(" " + sso);
|
out.println(" " + sso);
|
||||||
if (timeout != 0)
|
if (timeout != 0)
|
||||||
sso.setSoTimeout(timeout);
|
sso.setSoTimeout(timeout);
|
||||||
out.println("timeout: " + sso.getSoTimeout());
|
out.println("timeout: " + sso.getSoTimeout());
|
||||||
sso.bind(null);
|
sso.bind(null);
|
||||||
out.println("bound: " + ssc);
|
out.println("bound: " + ssc);
|
||||||
out.println(" " + sso);
|
out.println(" " + sso);
|
||||||
startClient(sso.getLocalPort(), clientDally);
|
startClient(sso.getLocalPort(), clientDally);
|
||||||
Thread.sleep(10);
|
while (!clientStarted) {
|
||||||
|
Thread.sleep(20);
|
||||||
|
}
|
||||||
|
Socket so = null;
|
||||||
|
try {
|
||||||
|
so = sso.accept();
|
||||||
|
} catch (SocketTimeoutException x) {
|
||||||
|
if (shouldTimeout)
|
||||||
|
out.println("Accept timed out, as expected");
|
||||||
|
else
|
||||||
|
throw x;
|
||||||
|
}
|
||||||
|
if (shouldTimeout && (so != null))
|
||||||
|
throw new Exception("Accept did not time out");
|
||||||
|
|
||||||
Socket so = null;
|
if (so != null) {
|
||||||
try {
|
int a = 42;
|
||||||
so = sso.accept();
|
so.getOutputStream().write(a);
|
||||||
} catch (SocketTimeoutException x) {
|
int b = so.getInputStream().read();
|
||||||
if (shouldTimeout)
|
if (b != a + 1)
|
||||||
out.println("Accept timed out, as expected");
|
throw new Exception("Read incorrect data");
|
||||||
else
|
out.println("server: read " + b);
|
||||||
throw x;
|
}
|
||||||
}
|
}
|
||||||
if (shouldTimeout && (so != null))
|
|
||||||
throw new Exception("Accept did not time out");
|
|
||||||
|
|
||||||
if (so != null) {
|
|
||||||
int a = 42;
|
|
||||||
so.getOutputStream().write(a);
|
|
||||||
int b = so.getInputStream().read();
|
|
||||||
if (b != a + 1)
|
|
||||||
throw new Exception("Read incorrect data");
|
|
||||||
out.println("server: read " + b);
|
|
||||||
sso.close();
|
|
||||||
}
|
|
||||||
|
|
||||||
client.interrupt();
|
client.interrupt();
|
||||||
client.join();
|
client.join();
|
||||||
if (clientException != null)
|
if (clientException != null)
|
||||||
|
Loading…
Reference in New Issue
Block a user