1
0
mirror of https://github.com/square/okhttp.git synced 2026-01-27 04:22:07 +03:00

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
This commit is contained in:
limpbizkit@gmail.com
2012-07-27 22:59:24 +00:00
parent d9f5a07579
commit 2b67e7069c
3 changed files with 30 additions and 11 deletions

View File

@@ -10,7 +10,7 @@
</parent>
<groupId>com.google.mockwebserver</groupId>
<artifactId>mockwebserver</artifactId>
<version>20120127</version>
<version>20120727</version>
<name>mockwebserver</name>
<url>http://code.google.com/p/mockwebserver</url>
<issueManagement>
@@ -87,4 +87,4 @@
<developerConnection>scm:svn:https://code.google.com/p/mockwebserver/</developerConnection>
<url>http://code.google.com/p/mockwebserver/source/browse</url>
</scm>
</project>
</project>

View File

@@ -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());

View File

@@ -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")