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:
4
pom.xml
4
pom.xml
@@ -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>
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user