diff options
author | Jesse Wilson <jessewilson@google.com> | 2011-11-25 13:31:58 -0500 |
---|---|---|
committer | Jesse Wilson <jessewilson@google.com> | 2011-12-12 18:27:44 -0500 |
commit | b1c31fbbba0ff96366b35ab40fd49cce55c9f489 (patch) | |
tree | 45c5bbaf221afb42bc12302630a1981aa8fb0325 /luni | |
parent | 9f11f5ad715d4ba09860000a74f99561d5a0cbf8 (diff) | |
download | libcore-b1c31fbbba0ff96366b35ab40fd49cce55c9f489.zip libcore-b1c31fbbba0ff96366b35ab40fd49cce55c9f489.tar.gz libcore-b1c31fbbba0ff96366b35ab40fd49cce55c9f489.tar.bz2 |
Test for available() returning 0 when the input is exhausted.
This test typically fails before 3 reps. I've seen it run as many
as 30 reps before it fails. It probably isn't a problem with libcore;
the test also fails on the RI after several reps.
Change-Id: I28cc109898dbfcadd2ed434dd9d590ebd22c9596
http://b/5534202
Diffstat (limited to 'luni')
-rw-r--r-- | luni/src/test/java/libcore/java/net/SocketTest.java | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/luni/src/test/java/libcore/java/net/SocketTest.java b/luni/src/test/java/libcore/java/net/SocketTest.java index e796e1e..42b7250 100644 --- a/luni/src/test/java/libcore/java/net/SocketTest.java +++ b/luni/src/test/java/libcore/java/net/SocketTest.java @@ -248,6 +248,44 @@ public class SocketTest extends junit.framework.TestCase { server.shutdown(); } + // http://b/5534202 + public void testAvailable() throws Exception { + for (int i = 0; i < 100; i++) { + assertAvailableReturnsZeroAfterSocketReadsAllData(); + System.out.println("Success on rep " + i); + } + } + + private void assertAvailableReturnsZeroAfterSocketReadsAllData() throws Exception { + final byte[] data = "foo".getBytes(); + final ServerSocket serverSocket = new ServerSocket(0); + + new Thread() { + @Override public void run() { + try { + Socket socket = serverSocket.accept(); + socket.getOutputStream().write(data); + socket.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + }.start(); + + Socket socket = new Socket("localhost", serverSocket.getLocalPort()); + byte[] readBuffer = new byte[128]; + InputStream in = socket.getInputStream(); + int total = 0; + // to prevent available() from cheating after EOF, stop reading before -1 is returned + while (total < data.length) { + total += in.read(readBuffer); + } + assertEquals(0, in.available()); + + socket.close(); + serverSocket.close(); + } + static class MockServer { private ExecutorService executor; private ServerSocket serverSocket; |