From 2b67e7069c8a547210bc78135ef7aec92f598833 Mon Sep 17 00:00:00 2001 From: "limpbizkit@gmail.com" Date: Fri, 27 Jul 2012 22:59:24 +0000 Subject: [PATCH] Don't exit the server just because the response queue is empty. git-svn-id: https://mockwebserver.googlecode.com/svn/trunk@16 cf848351-439f-e86a-257f-67fa721851d5 --- pom.xml | 4 ++-- .../google/mockwebserver/MockWebServer.java | 14 ++++------- .../mockwebserver/MockWebServerTest.java | 23 +++++++++++++++++++ 3 files changed, 30 insertions(+), 11 deletions(-) diff --git a/pom.xml b/pom.xml index 341ee7cac..f513d0c65 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ com.google.mockwebserver mockwebserver - 20120127 + 20120727 mockwebserver http://code.google.com/p/mockwebserver @@ -87,4 +87,4 @@ scm:svn:https://code.google.com/p/mockwebserver/ http://code.google.com/p/mockwebserver/source/browse - \ No newline at end of file + diff --git a/src/main/java/com/google/mockwebserver/MockWebServer.java b/src/main/java/com/google/mockwebserver/MockWebServer.java index a013d9717..5116991d3 100644 --- a/src/main/java/com/google/mockwebserver/MockWebServer.java +++ b/src/main/java/com/google/mockwebserver/MockWebServer.java @@ -228,12 +228,12 @@ public final class MockWebServer { } private void acceptConnections() throws Exception { - do { + while (true) { Socket socket; try { socket = serverSocket.accept(); - } catch (SocketException ignored) { - continue; + } catch (SocketException e) { + return; } MockResponse peek = responseQueue.peek(); if (peek != null && peek.getSocketPolicy() == DISCONNECT_AT_START) { @@ -243,7 +243,7 @@ public final class MockWebServer { openClientSockets.add(socket); serveConnection(socket); } - } while (!responseQueue.isEmpty()); + } } })); } @@ -290,7 +290,7 @@ public final class MockWebServer { InputStream in = new BufferedInputStream(socket.getInputStream()); OutputStream out = new BufferedOutputStream(socket.getOutputStream()); - while (!responseQueue.isEmpty() && processOneRequest(socket, in, out)) {} + while (processOneRequest(socket, in, out)) {} if (sequenceNumber == 0) { logger.warning("MockWebServer connection didn't make a request"); @@ -450,10 +450,6 @@ public final class MockWebServer { * Returns a response to satisfy {@code request}. */ private MockResponse dispatch(RecordedRequest request) throws InterruptedException { - if (responseQueue.isEmpty()) { - throw new IllegalStateException("Unexpected request: " + request); - } - // to permit interactive/browser testing, ignore requests for favicons if (request.getRequestLine().equals("GET /favicon.ico HTTP/1.1")) { System.out.println("served " + request.getRequestLine()); diff --git a/src/test/java/com/google/mockwebserver/MockWebServerTest.java b/src/test/java/com/google/mockwebserver/MockWebServerTest.java index 353361b92..760cee0ac 100644 --- a/src/test/java/com/google/mockwebserver/MockWebServerTest.java +++ b/src/test/java/com/google/mockwebserver/MockWebServerTest.java @@ -75,6 +75,29 @@ public final class MockWebServerTest extends TestCase { assertEquals("GET /new-path HTTP/1.1", redirect.getRequestLine()); } + /** + * Test that MockWebServer blocks for a call to enqueue() if a request + * is made before a mock response is ready. + */ + public void testDispatchBlocksWaitingForEnqueue() throws Exception { + server.play(); + + new Thread() { + @Override public void run() { + try { + Thread.sleep(1000); + } catch (InterruptedException ignored) { + } + server.enqueue(new MockResponse().setBody("enqueued in the background")); + } + }.start(); + + URLConnection connection = server.getUrl("/").openConnection(); + InputStream in = connection.getInputStream(); + BufferedReader reader = new BufferedReader(new InputStreamReader(in)); + assertEquals("enqueued in the background", reader.readLine()); + } + public void testNonHexadecimalChunkSize() throws Exception { server.enqueue(new MockResponse() .setBody("G\r\nxxxxxxxxxxxxxxxx\r\n0\r\n\r\n")