summaryrefslogtreecommitdiffstats
path: root/luni
diff options
context:
space:
mode:
authorJesse Wilson <jessewilson@google.com>2011-11-25 13:31:58 -0500
committerJesse Wilson <jessewilson@google.com>2011-12-12 18:27:44 -0500
commitb1c31fbbba0ff96366b35ab40fd49cce55c9f489 (patch)
tree45c5bbaf221afb42bc12302630a1981aa8fb0325 /luni
parent9f11f5ad715d4ba09860000a74f99561d5a0cbf8 (diff)
downloadlibcore-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.java38
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;