8156002: java/nio/channels/SocketChannel/AdaptSocket.java Fails in Mesos on OSX

Reviewed-by: dfuchs
This commit is contained in:
Hamlin Li 2016-05-10 15:12:04 +08:00
parent 155e6796dd
commit 26ba99921f
2 changed files with 30 additions and 7 deletions

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2001, 2016, 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
@ -22,6 +22,7 @@
*/
/* @test
* @bug 8156002
* @summary Unit test for socket-channel adaptors
* @library ..
*/
@ -29,6 +30,7 @@
import java.io.*;
import java.net.*;
import java.nio.channels.*;
import java.util.Arrays;
public class AdaptSocket {
@ -100,10 +102,15 @@ public class AdaptSocket {
try {
byte[] b = new byte[100];
int n = is.read(b);
if (n != 5)
if (shouldTimeout) {
throw new Exception("Should time out, but not, data: " + Arrays.toString(b));
}
if (n != 5) {
throw new Exception("Incorrect number of bytes read: " + n);
if (!dataString.equals(new String(b, 0, n, "US-ASCII")))
}
if (!dataString.equals(new String(b, 0, n, "US-ASCII"))) {
throw new Exception("Incorrect data read: " + n);
}
} catch (SocketTimeoutException x) {
if (shouldTimeout) {
out.println("Read timed out, as expected");
@ -135,6 +142,7 @@ public class AdaptSocket {
testRead(so, shouldTimeout);
for (int i = 0; i < 4; i++) {
out.println("loop: " + i);
testRead(so, shouldTimeout);
}
@ -163,9 +171,9 @@ public class AdaptSocket {
testRead(echoServer, 8000, false);
}
try (TestServers.EchoServer lingerEchoServer
= TestServers.EchoServer.startNewServer(100)) {
testRead(lingerEchoServer, 10, true);
try (TestServers.NoResponseServer noResponseServer
= TestServers.NoResponseServer.startNewServer()) {
testRead(noResponseServer, 10, true);
}
}
}

View File

@ -340,7 +340,7 @@ public class TestServers {
* exactly matches the RFC - the only purpose of this server is to have
* something that responds to nio tests...
*/
static final class EchoServer extends AbstractTcpServer {
static class EchoServer extends AbstractTcpServer {
public EchoServer() {
this(0L);
@ -399,6 +399,21 @@ public class TestServers {
}
}
/**
* A small TCP Server that accept connections but does not response to any input.
*/
static final class NoResponseServer extends EchoServer {
public NoResponseServer() {
super(Long.MAX_VALUE);
}
public static NoResponseServer startNewServer() throws IOException {
final NoResponseServer noResponseServer = new NoResponseServer();
noResponseServer.start();
return noResponseServer;
}
}
/**
* A small TCP server that emulates the Day & Time service for tests
* purposes. See http://en.wikipedia.org/wiki/Daytime_Protocol This server