diff options
Diffstat (limited to 'luni/src/test/java/libcore/java/net/SocketTest.java')
-rw-r--r-- | luni/src/test/java/libcore/java/net/SocketTest.java | 69 |
1 files changed, 68 insertions, 1 deletions
diff --git a/luni/src/test/java/libcore/java/net/SocketTest.java b/luni/src/test/java/libcore/java/net/SocketTest.java index 42b7250..fb09be0 100644 --- a/luni/src/test/java/libcore/java/net/SocketTest.java +++ b/luni/src/test/java/libcore/java/net/SocketTest.java @@ -20,6 +20,7 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ConnectException; +import java.net.Inet4Address; import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.ServerSocket; @@ -109,10 +110,12 @@ public class SocketTest extends junit.framework.TestCase { in.socket().setTcpNoDelay(false); } + InetSocketAddress listenAddress = (InetSocketAddress) in.socket().getLocalSocketAddress(); InetSocketAddress outRemoteAddress = (InetSocketAddress) out.socket().getRemoteSocketAddress(); InetSocketAddress outLocalAddress = (InetSocketAddress) out.socket().getLocalSocketAddress(); InetSocketAddress inLocalAddress = (InetSocketAddress) in.socket().getLocalSocketAddress(); InetSocketAddress inRemoteAddress = (InetSocketAddress) in.socket().getRemoteSocketAddress(); + System.err.println("listenAddress: " + listenAddr); System.err.println("inLocalAddress: " + inLocalAddress); System.err.println("inRemoteAddress: " + inRemoteAddress); System.err.println("outLocalAddress: " + outLocalAddress); @@ -127,14 +130,42 @@ public class SocketTest extends junit.framework.TestCase { assertEquals(outLocalAddress.getAddress(), ss.getInetAddress()); assertEquals(outRemoteAddress.getAddress(), ss.getInetAddress()); + assertFalse(ssc.socket().isClosed()); + assertTrue(ssc.socket().isBound()); + assertTrue(in.isConnected()); + assertTrue(in.socket().isConnected()); + assertTrue(out.socket().isConnected()); + assertTrue(out.isConnected()); + in.close(); out.close(); ssc.close(); + assertTrue(ssc.socket().isClosed()); + assertTrue(ssc.socket().isBound()); + assertFalse(in.isConnected()); + assertFalse(in.socket().isConnected()); + assertFalse(out.socket().isConnected()); + assertFalse(out.isConnected()); + assertNull(in.socket().getRemoteSocketAddress()); assertNull(out.socket().getRemoteSocketAddress()); - assertEquals(in.socket().getLocalSocketAddress(), ss.getLocalSocketAddress()); + // As per docs and RI - server socket local address methods continue to return the bind() + // addresses even after close(). + assertEquals(listenAddress, ssc.socket().getLocalSocketAddress()); + + // As per docs and RI - socket local address methods return the wildcard address before + // bind() and after close(), but the port will be the same as it was before close(). + InetSocketAddress inLocalAddressAfterClose = + (InetSocketAddress) in.socket().getLocalSocketAddress(); + assertTrue(inLocalAddressAfterClose.getAddress().isAnyLocalAddress()); + assertEquals(inLocalAddress.getPort(), inLocalAddressAfterClose.getPort()); + + InetSocketAddress outLocalAddressAfterClose = + (InetSocketAddress) out.socket().getLocalSocketAddress(); + assertTrue(outLocalAddressAfterClose.getAddress().isAnyLocalAddress()); + assertEquals(outLocalAddress.getPort(), outLocalAddressAfterClose.getPort()); } // SocketOptions.setOption has weird behavior for setSoLinger/SO_LINGER. @@ -286,6 +317,42 @@ public class SocketTest extends junit.framework.TestCase { serverSocket.close(); } + public void testInitialState() throws Exception { + Socket s = new Socket(); + try { + assertFalse(s.isBound()); + assertFalse(s.isClosed()); + assertFalse(s.isConnected()); + assertEquals(-1, s.getLocalPort()); + assertTrue(s.getLocalAddress().isAnyLocalAddress()); + assertNull(s.getLocalSocketAddress()); + assertNull(s.getInetAddress()); + assertEquals(0, s.getPort()); + assertNull(s.getRemoteSocketAddress()); + assertFalse(s.getReuseAddress()); + assertNull(s.getChannel()); + } finally { + s.close(); + } + } + + public void testStateAfterClose() throws Exception { + Socket s = new Socket(); + s.bind(new InetSocketAddress(Inet4Address.getLocalHost(), 0)); + InetSocketAddress boundAddress = (InetSocketAddress) s.getLocalSocketAddress(); + s.close(); + + assertTrue(s.isBound()); + assertTrue(s.isClosed()); + assertFalse(s.isConnected()); + assertTrue(s.getLocalAddress().isAnyLocalAddress()); + assertEquals(boundAddress.getPort(), s.getLocalPort()); + + InetSocketAddress localAddressAfterClose = (InetSocketAddress) s.getLocalSocketAddress(); + assertTrue(localAddressAfterClose.getAddress().isAnyLocalAddress()); + assertEquals(boundAddress.getPort(), localAddressAfterClose.getPort()); + } + static class MockServer { private ExecutorService executor; private ServerSocket serverSocket; |