diff --git a/mockwebserver/src/main/java/okhttp3/mockwebserver/MockResponse.java b/mockwebserver/src/main/java/okhttp3/mockwebserver/MockResponse.java index acc227966..9f56b34f9 100644 --- a/mockwebserver/src/main/java/okhttp3/mockwebserver/MockResponse.java +++ b/mockwebserver/src/main/java/okhttp3/mockwebserver/MockResponse.java @@ -28,7 +28,7 @@ import okio.Buffer; public final class MockResponse implements Cloneable { private static final String CHUNKED_BODY_HEADER = "Transfer-encoding: chunked"; - private String status = "HTTP/1.1 200 OK"; + private String status; private Headers.Builder headers = new Headers.Builder(); private Buffer body; @@ -48,6 +48,7 @@ public final class MockResponse implements Cloneable { /** Creates a new mock response with an empty body. */ public MockResponse() { + setResponseCode(200); setHeader("Content-Length", 0); } @@ -68,7 +69,19 @@ public final class MockResponse implements Cloneable { } public MockResponse setResponseCode(int code) { - return setStatus("HTTP/1.1 " + code + " OK"); + String reason = "Mock Response"; + if (code >= 100 && code < 200) { + reason = "Informational"; + } else if (code >= 200 && code < 300) { + reason = "OK"; + } else if (code >= 300 && code < 400) { + reason = "Redirection"; + } else if (code >= 400 && code < 500) { + reason = "Client Error"; + } else if (code >= 500 && code < 600) { + reason = "Server Error"; + } + return setStatus("HTTP/1.1 " + code + " " + reason); } public MockResponse setStatus(String status) { diff --git a/mockwebserver/src/test/java/okhttp3/mockwebserver/MockWebServerTest.java b/mockwebserver/src/test/java/okhttp3/mockwebserver/MockWebServerTest.java index 608bce3bf..b178622d1 100644 --- a/mockwebserver/src/test/java/okhttp3/mockwebserver/MockWebServerTest.java +++ b/mockwebserver/src/test/java/okhttp3/mockwebserver/MockWebServerTest.java @@ -55,11 +55,34 @@ public final class MockWebServerTest { assertEquals("HTTP/1.1 200 OK", response.getStatus()); } + @Test public void setResponseMockReason() { + String[] reasons = { + "Mock Response", + "Informational", + "OK", + "Redirection", + "Client Error", + "Server Error", + "Mock Response" + }; + for (int i = 0; i < 600; i++) { + MockResponse response = new MockResponse().setResponseCode(i); + String expectedReason = reasons[i / 100]; + assertEquals("HTTP/1.1 " + i + " " + expectedReason, response.getStatus()); + assertEquals(Arrays.asList("Content-Length: 0"), headersToList(response)); + } + } + + @Test public void setStatusControlsWholeStatusLine() { + MockResponse response = new MockResponse().setStatus("HTTP/1.1 202 That'll do pig"); + assertEquals(Arrays.asList("Content-Length: 0"), headersToList(response)); + assertEquals("HTTP/1.1 202 That'll do pig", response.getStatus()); + } + @Test public void setBodyAdjustsHeaders() throws IOException { MockResponse response = new MockResponse().setBody("ABC"); assertEquals(Arrays.asList("Content-Length: 3"), headersToList(response)); assertEquals("ABC", response.getBody().readUtf8()); - assertEquals("HTTP/1.1 200 OK", response.getStatus()); } @Test public void mockResponseAddHeader() { diff --git a/okhttp-ws-tests/src/test/java/okhttp3/ws/WebSocketCallTest.java b/okhttp-ws-tests/src/test/java/okhttp3/ws/WebSocketCallTest.java index c6d77c459..3665e241c 100644 --- a/okhttp-ws-tests/src/test/java/okhttp3/ws/WebSocketCallTest.java +++ b/okhttp-ws-tests/src/test/java/okhttp3/ws/WebSocketCallTest.java @@ -89,7 +89,7 @@ public final class WebSocketCallTest { } @Test public void okButNotOk() { - server.enqueue(new MockResponse()); + server.enqueue(new MockResponse().setResponseCode(200)); awaitWebSocket(); listener.assertFailure(ProtocolException.class, "Expected HTTP 101 response but was '200 OK'"); }