mirror of
https://github.com/square/okhttp.git
synced 2026-01-18 20:40:58 +03:00
Merge pull request #1217 from square/jw/mws-style
Update MWS test style to match project.
This commit is contained in:
@@ -13,9 +13,9 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.squareup.okhttp.mockwebserver;
|
||||
|
||||
import com.squareup.okhttp.mockwebserver.rule.MockWebServerRule;
|
||||
import java.io.BufferedReader;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.IOException;
|
||||
@@ -29,339 +29,320 @@ import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import junit.framework.TestCase;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
|
||||
import static java.util.concurrent.TimeUnit.NANOSECONDS;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.junit.Assert.fail;
|
||||
|
||||
public final class MockWebServerTest extends TestCase {
|
||||
public final class MockWebServerTest {
|
||||
@Rule public final MockWebServerRule server = new MockWebServerRule();
|
||||
|
||||
private MockWebServer server = new MockWebServer();
|
||||
@Test public void recordedRequestAccessors() {
|
||||
List<String> headers = Arrays.asList(
|
||||
"User-Agent: okhttp",
|
||||
"Cookie: s=square",
|
||||
"Cookie: a=android",
|
||||
"X-Whitespace: left",
|
||||
"X-Whitespace:right ",
|
||||
"X-Whitespace: both "
|
||||
);
|
||||
List<Integer> chunkSizes = Collections.emptyList();
|
||||
byte[] body = {'A', 'B', 'C'};
|
||||
String requestLine = "GET / HTTP/1.1";
|
||||
RecordedRequest request = new RecordedRequest(
|
||||
requestLine, headers, chunkSizes, body.length, body, 0, null);
|
||||
assertEquals("s=square", request.getHeader("cookie"));
|
||||
assertEquals(Arrays.asList("s=square", "a=android"), request.getHeaders("cookie"));
|
||||
assertEquals("left", request.getHeader("x-whitespace"));
|
||||
assertEquals(Arrays.asList("left", "right", "both"), request.getHeaders("x-whitespace"));
|
||||
assertEquals("ABC", request.getUtf8Body());
|
||||
}
|
||||
|
||||
@Override protected void tearDown() throws Exception {
|
||||
server.shutdown();
|
||||
super.tearDown();
|
||||
}
|
||||
@Test public void defaultMockResponse() {
|
||||
MockResponse response = new MockResponse();
|
||||
assertEquals(Arrays.asList("Content-Length: 0"), response.getHeaders());
|
||||
assertEquals("HTTP/1.1 200 OK", response.getStatus());
|
||||
}
|
||||
|
||||
public void testRecordedRequestAccessors() {
|
||||
List<String> headers = Arrays.asList(
|
||||
"User-Agent: okhttp",
|
||||
"Cookie: s=square",
|
||||
"Cookie: a=android",
|
||||
"X-Whitespace: left",
|
||||
"X-Whitespace:right ",
|
||||
"X-Whitespace: both "
|
||||
);
|
||||
List<Integer> chunkSizes = Collections.emptyList();
|
||||
byte[] body = {'A', 'B', 'C'};
|
||||
String requestLine = "GET / HTTP/1.1";
|
||||
RecordedRequest request = new RecordedRequest(
|
||||
requestLine, headers, chunkSizes, body.length, body, 0, null);
|
||||
assertEquals("s=square", request.getHeader("cookie"));
|
||||
assertEquals(Arrays.asList("s=square", "a=android"), request.getHeaders("cookie"));
|
||||
assertEquals("left", request.getHeader("x-whitespace"));
|
||||
assertEquals(Arrays.asList("left", "right", "both"), request.getHeaders("x-whitespace"));
|
||||
assertEquals("ABC", request.getUtf8Body());
|
||||
}
|
||||
@Test public void setBodyAdjustsHeaders() throws IOException {
|
||||
MockResponse response = new MockResponse().setBody("ABC");
|
||||
assertEquals(Arrays.asList("Content-Length: 3"), response.getHeaders());
|
||||
InputStream in = response.getBodyStream();
|
||||
assertEquals('A', in.read());
|
||||
assertEquals('B', in.read());
|
||||
assertEquals('C', in.read());
|
||||
assertEquals(-1, in.read());
|
||||
assertEquals("HTTP/1.1 200 OK", response.getStatus());
|
||||
}
|
||||
|
||||
public void testDefaultMockResponse() {
|
||||
MockResponse response = new MockResponse();
|
||||
assertEquals(Arrays.asList("Content-Length: 0"), response.getHeaders());
|
||||
assertEquals("HTTP/1.1 200 OK", response.getStatus());
|
||||
}
|
||||
@Test public void mockResponseAddHeader() {
|
||||
MockResponse response = new MockResponse()
|
||||
.clearHeaders()
|
||||
.addHeader("Cookie: s=square")
|
||||
.addHeader("Cookie", "a=android");
|
||||
assertEquals(Arrays.asList("Cookie: s=square", "Cookie: a=android"), response.getHeaders());
|
||||
}
|
||||
|
||||
public void testSetBodyAdjustsHeaders() throws IOException {
|
||||
MockResponse response = new MockResponse().setBody("ABC");
|
||||
assertEquals(Arrays.asList("Content-Length: 3"), response.getHeaders());
|
||||
InputStream in = response.getBodyStream();
|
||||
assertEquals('A', in.read());
|
||||
assertEquals('B', in.read());
|
||||
assertEquals('C', in.read());
|
||||
assertEquals(-1, in.read());
|
||||
assertEquals("HTTP/1.1 200 OK", response.getStatus());
|
||||
}
|
||||
@Test public void mockResponseSetHeader() {
|
||||
MockResponse response = new MockResponse()
|
||||
.clearHeaders()
|
||||
.addHeader("Cookie: s=square")
|
||||
.addHeader("Cookie: a=android")
|
||||
.addHeader("Cookies: delicious");
|
||||
response.setHeader("cookie", "r=robot");
|
||||
assertEquals(Arrays.asList("Cookies: delicious", "cookie: r=robot"), response.getHeaders());
|
||||
}
|
||||
|
||||
public void testMockResponseAddHeader() {
|
||||
MockResponse response = new MockResponse()
|
||||
.clearHeaders()
|
||||
.addHeader("Cookie: s=square")
|
||||
.addHeader("Cookie", "a=android");
|
||||
assertEquals(Arrays.asList("Cookie: s=square", "Cookie: a=android"),
|
||||
response.getHeaders());
|
||||
}
|
||||
/**
|
||||
* Clients who adhere to <a
|
||||
* href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec8.html#sec8.2.3">100
|
||||
* Status</a> expect the server to send an interim response with status code
|
||||
* 100 before they send their payload.
|
||||
*
|
||||
* <h4>Note</h4>
|
||||
*
|
||||
* JRE 6 only passes this test if
|
||||
* {@code -Dsun.net.http.allowRestrictedHeaders=true} is set.
|
||||
*/
|
||||
@Test public void expect100ContinueWithBody() throws Exception {
|
||||
server.enqueue(new MockResponse());
|
||||
|
||||
public void testMockResponseSetHeader() {
|
||||
MockResponse response = new MockResponse()
|
||||
.clearHeaders()
|
||||
.addHeader("Cookie: s=square")
|
||||
.addHeader("Cookie: a=android")
|
||||
.addHeader("Cookies: delicious");
|
||||
response.setHeader("cookie", "r=robot");
|
||||
assertEquals(Arrays.asList("Cookies: delicious", "cookie: r=robot"),
|
||||
response.getHeaders());
|
||||
}
|
||||
URL url = server.getUrl("/");
|
||||
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
|
||||
connection.setRequestMethod("PUT");
|
||||
connection.setAllowUserInteraction(false);
|
||||
connection.setRequestProperty("Expect", "100-continue");
|
||||
connection.setDoOutput(true);
|
||||
connection.getOutputStream().write("hello".getBytes());
|
||||
assertEquals(HttpURLConnection.HTTP_OK, connection.getResponseCode());
|
||||
|
||||
/**
|
||||
* Clients who adhere to <a
|
||||
* href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec8.html#sec8.2.3">100
|
||||
* Status</a> expect the server to send an interim response with status code
|
||||
* 100 before they send their payload.
|
||||
*
|
||||
* <h4>Note</h4>
|
||||
*
|
||||
* JRE 6 only passes this test if
|
||||
* {@code -Dsun.net.http.allowRestrictedHeaders=true} is set.
|
||||
*/
|
||||
public void testExpect100ContinueWithBody() throws Exception {
|
||||
server.enqueue(new MockResponse());
|
||||
server.play();
|
||||
assertEquals(server.getRequestCount(), 1);
|
||||
RecordedRequest request = server.takeRequest();
|
||||
assertEquals(request.getRequestLine(), "PUT / HTTP/1.1");
|
||||
assertEquals("5", request.getHeader("Content-Length"));
|
||||
assertEquals(5, request.getBodySize());
|
||||
assertEquals("hello", new String(request.getBody()));
|
||||
// below fails on JRE 6 unless -Dsun.net.http.allowRestrictedHeaders=true is set
|
||||
assertEquals("100-continue", request.getHeader("Expect"));
|
||||
}
|
||||
|
||||
URL url = server.getUrl("/");
|
||||
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
|
||||
connection.setRequestMethod("PUT");
|
||||
connection.setAllowUserInteraction(false);
|
||||
connection.setRequestProperty("Expect", "100-continue");
|
||||
connection.setDoOutput(true);
|
||||
connection.getOutputStream().write("hello".getBytes());
|
||||
assertEquals(HttpURLConnection.HTTP_OK, connection.getResponseCode());
|
||||
@Test public void expect100ContinueWithNoBody() throws Exception {
|
||||
server.enqueue(new MockResponse());
|
||||
|
||||
assertEquals(server.getRequestCount(), 1);
|
||||
RecordedRequest request = server.takeRequest();
|
||||
assertEquals(request.getRequestLine(), "PUT / HTTP/1.1");
|
||||
assertEquals("5", request.getHeader("Content-Length"));
|
||||
assertEquals(5, request.getBodySize());
|
||||
assertEquals("hello", new String(request.getBody()));
|
||||
// below fails on JRE 6 unless -Dsun.net.http.allowRestrictedHeaders=true is set
|
||||
assertEquals("100-continue", request.getHeader("Expect"));
|
||||
}
|
||||
URL url = server.getUrl("/");
|
||||
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
|
||||
connection.setRequestMethod("PUT");
|
||||
connection.setAllowUserInteraction(false);
|
||||
connection.setRequestProperty("Expect", "100-continue");
|
||||
connection.setRequestProperty("Content-Length", "0");
|
||||
connection.setDoOutput(true);
|
||||
connection.setFixedLengthStreamingMode(0);
|
||||
assertEquals(HttpURLConnection.HTTP_OK, connection.getResponseCode());
|
||||
|
||||
public void testExpect100ContinueWithNoBody() throws Exception {
|
||||
server.enqueue(new MockResponse());
|
||||
server.play();
|
||||
assertEquals(server.getRequestCount(), 1);
|
||||
RecordedRequest request = server.takeRequest();
|
||||
assertEquals(request.getRequestLine(), "PUT / HTTP/1.1");
|
||||
assertEquals("0", request.getHeader("Content-Length"));
|
||||
assertEquals(0, request.getBodySize());
|
||||
// below fails on JRE 6 unless -Dsun.net.http.allowRestrictedHeaders=true is set
|
||||
assertEquals("100-continue", request.getHeader("Expect"));
|
||||
}
|
||||
|
||||
URL url = server.getUrl("/");
|
||||
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
|
||||
connection.setRequestMethod("PUT");
|
||||
connection.setAllowUserInteraction(false);
|
||||
connection.setRequestProperty("Expect", "100-continue");
|
||||
connection.setRequestProperty("Content-Length", "0");
|
||||
connection.setDoOutput(true);
|
||||
connection.setFixedLengthStreamingMode(0);
|
||||
assertEquals(HttpURLConnection.HTTP_OK, connection.getResponseCode());
|
||||
@Test public void regularResponse() throws Exception {
|
||||
server.enqueue(new MockResponse().setBody("hello world"));
|
||||
|
||||
assertEquals(server.getRequestCount(), 1);
|
||||
RecordedRequest request = server.takeRequest();
|
||||
assertEquals(request.getRequestLine(), "PUT / HTTP/1.1");
|
||||
assertEquals("0", request.getHeader("Content-Length"));
|
||||
assertEquals(0, request.getBodySize());
|
||||
// below fails on JRE 6 unless -Dsun.net.http.allowRestrictedHeaders=true is set
|
||||
assertEquals("100-continue", request.getHeader("Expect"));
|
||||
}
|
||||
URL url = server.getUrl("/");
|
||||
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
|
||||
connection.setRequestProperty("Accept-Language", "en-US");
|
||||
InputStream in = connection.getInputStream();
|
||||
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
|
||||
assertEquals(HttpURLConnection.HTTP_OK, connection.getResponseCode());
|
||||
assertEquals("hello world", reader.readLine());
|
||||
|
||||
public void testRegularResponse() throws Exception {
|
||||
server.enqueue(new MockResponse().setBody("hello world"));
|
||||
server.play();
|
||||
RecordedRequest request = server.takeRequest();
|
||||
assertEquals("GET / HTTP/1.1", request.getRequestLine());
|
||||
assertTrue(request.getHeaders().contains("Accept-Language: en-US"));
|
||||
}
|
||||
|
||||
URL url = server.getUrl("/");
|
||||
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
|
||||
connection.setRequestProperty("Accept-Language", "en-US");
|
||||
InputStream in = connection.getInputStream();
|
||||
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
|
||||
assertEquals(HttpURLConnection.HTTP_OK, connection.getResponseCode());
|
||||
assertEquals("hello world", reader.readLine());
|
||||
@Test public void redirect() throws Exception {
|
||||
server.enqueue(new MockResponse()
|
||||
.setResponseCode(HttpURLConnection.HTTP_MOVED_TEMP)
|
||||
.addHeader("Location: " + server.getUrl("/new-path"))
|
||||
.setBody("This page has moved!"));
|
||||
server.enqueue(new MockResponse().setBody("This is the new location!"));
|
||||
|
||||
RecordedRequest request = server.takeRequest();
|
||||
assertEquals("GET / HTTP/1.1", request.getRequestLine());
|
||||
assertTrue(request.getHeaders().contains("Accept-Language: en-US"));
|
||||
}
|
||||
URLConnection connection = server.getUrl("/").openConnection();
|
||||
InputStream in = connection.getInputStream();
|
||||
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
|
||||
assertEquals("This is the new location!", reader.readLine());
|
||||
|
||||
public void testRedirect() throws Exception {
|
||||
server.play();
|
||||
server.enqueue(new MockResponse()
|
||||
.setResponseCode(HttpURLConnection.HTTP_MOVED_TEMP)
|
||||
.addHeader("Location: " + server.getUrl("/new-path"))
|
||||
.setBody("This page has moved!"));
|
||||
server.enqueue(new MockResponse().setBody("This is the new location!"));
|
||||
RecordedRequest first = server.takeRequest();
|
||||
assertEquals("GET / HTTP/1.1", first.getRequestLine());
|
||||
RecordedRequest redirect = server.takeRequest();
|
||||
assertEquals("GET /new-path HTTP/1.1", redirect.getRequestLine());
|
||||
}
|
||||
|
||||
URLConnection connection = server.getUrl("/").openConnection();
|
||||
InputStream in = connection.getInputStream();
|
||||
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
|
||||
assertEquals("This is the new location!", reader.readLine());
|
||||
|
||||
RecordedRequest first = server.takeRequest();
|
||||
assertEquals("GET / HTTP/1.1", first.getRequestLine());
|
||||
RecordedRequest redirect = server.takeRequest();
|
||||
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")
|
||||
.clearHeaders()
|
||||
.addHeader("Transfer-encoding: chunked"));
|
||||
server.play();
|
||||
|
||||
URLConnection connection = server.getUrl("/").openConnection();
|
||||
InputStream in = connection.getInputStream();
|
||||
/**
|
||||
* Test that MockWebServer blocks for a call to enqueue() if a request
|
||||
* is made before a mock response is ready.
|
||||
*/
|
||||
@Test public void dispatchBlocksWaitingForEnqueue() throws Exception {
|
||||
new Thread() {
|
||||
@Override public void run() {
|
||||
try {
|
||||
in.read();
|
||||
fail();
|
||||
} catch (IOException expected) {
|
||||
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());
|
||||
}
|
||||
|
||||
@Test public void nonHexadecimalChunkSize() throws Exception {
|
||||
server.enqueue(new MockResponse()
|
||||
.setBody("G\r\nxxxxxxxxxxxxxxxx\r\n0\r\n\r\n")
|
||||
.clearHeaders()
|
||||
.addHeader("Transfer-encoding: chunked"));
|
||||
|
||||
URLConnection connection = server.getUrl("/").openConnection();
|
||||
InputStream in = connection.getInputStream();
|
||||
try {
|
||||
in.read();
|
||||
fail();
|
||||
} catch (IOException expected) {
|
||||
}
|
||||
}
|
||||
|
||||
@Test public void responseTimeout() throws Exception {
|
||||
server.enqueue(new MockResponse()
|
||||
.setBody("ABC")
|
||||
.clearHeaders()
|
||||
.addHeader("Content-Length: 4"));
|
||||
server.enqueue(new MockResponse().setBody("DEF"));
|
||||
|
||||
URLConnection urlConnection = server.getUrl("/").openConnection();
|
||||
urlConnection.setReadTimeout(1000);
|
||||
InputStream in = urlConnection.getInputStream();
|
||||
assertEquals('A', in.read());
|
||||
assertEquals('B', in.read());
|
||||
assertEquals('C', in.read());
|
||||
try {
|
||||
in.read(); // if Content-Length was accurate, this would return -1 immediately
|
||||
fail();
|
||||
} catch (SocketTimeoutException expected) {
|
||||
}
|
||||
|
||||
public void testResponseTimeout() throws Exception {
|
||||
server.enqueue(new MockResponse()
|
||||
.setBody("ABC")
|
||||
.clearHeaders()
|
||||
.addHeader("Content-Length: 4"));
|
||||
server.enqueue(new MockResponse()
|
||||
.setBody("DEF"));
|
||||
server.play();
|
||||
URLConnection urlConnection2 = server.getUrl("/").openConnection();
|
||||
InputStream in2 = urlConnection2.getInputStream();
|
||||
assertEquals('D', in2.read());
|
||||
assertEquals('E', in2.read());
|
||||
assertEquals('F', in2.read());
|
||||
assertEquals(-1, in2.read());
|
||||
|
||||
URLConnection urlConnection = server.getUrl("/").openConnection();
|
||||
urlConnection.setReadTimeout(1000);
|
||||
InputStream in = urlConnection.getInputStream();
|
||||
assertEquals('A', in.read());
|
||||
assertEquals('B', in.read());
|
||||
assertEquals('C', in.read());
|
||||
try {
|
||||
in.read(); // if Content-Length was accurate, this would return -1 immediately
|
||||
fail();
|
||||
} catch (SocketTimeoutException expected) {
|
||||
}
|
||||
assertEquals(0, server.takeRequest().getSequenceNumber());
|
||||
assertEquals(0, server.takeRequest().getSequenceNumber());
|
||||
}
|
||||
|
||||
URLConnection urlConnection2 = server.getUrl("/").openConnection();
|
||||
InputStream in2 = urlConnection2.getInputStream();
|
||||
assertEquals('D', in2.read());
|
||||
assertEquals('E', in2.read());
|
||||
assertEquals('F', in2.read());
|
||||
assertEquals(-1, in2.read());
|
||||
|
||||
assertEquals(0, server.takeRequest().getSequenceNumber());
|
||||
assertEquals(0, server.takeRequest().getSequenceNumber());
|
||||
@Test public void disconnectAtStart() throws Exception {
|
||||
server.enqueue(new MockResponse().setSocketPolicy(SocketPolicy.DISCONNECT_AT_START));
|
||||
server.enqueue(new MockResponse()); // The jdk's HttpUrlConnection is a bastard.
|
||||
server.enqueue(new MockResponse());
|
||||
try {
|
||||
server.getUrl("/a").openConnection().getInputStream();
|
||||
} catch (IOException expected) {
|
||||
}
|
||||
server.getUrl("/b").openConnection().getInputStream(); // Should succeed.
|
||||
}
|
||||
|
||||
public void testDisconnectAtStart() throws Exception {
|
||||
server.enqueue(new MockResponse().setSocketPolicy(SocketPolicy.DISCONNECT_AT_START));
|
||||
server.enqueue(new MockResponse()); // The jdk's HttpUrlConnection is a bastard.
|
||||
server.enqueue(new MockResponse());
|
||||
server.play();
|
||||
try {
|
||||
server.getUrl("/a").openConnection().getInputStream();
|
||||
} catch (IOException e) {
|
||||
// Expected.
|
||||
}
|
||||
server.getUrl("/b").openConnection().getInputStream(); // Should succeed.
|
||||
}
|
||||
@Test public void streamingResponseBody() throws Exception {
|
||||
InputStream responseBody = new ByteArrayInputStream("ABC".getBytes("UTF-8"));
|
||||
server.enqueue(new MockResponse().setBody(responseBody, 3));
|
||||
|
||||
public void testStreamingResponseBody() throws Exception {
|
||||
InputStream responseBody = new ByteArrayInputStream("ABC".getBytes("UTF-8"));
|
||||
server.enqueue(new MockResponse().setBody(responseBody, 3));
|
||||
server.play();
|
||||
InputStream in = server.getUrl("/").openConnection().getInputStream();
|
||||
assertEquals('A', in.read());
|
||||
assertEquals('B', in.read());
|
||||
assertEquals('C', in.read());
|
||||
|
||||
InputStream in = server.getUrl("/").openConnection().getInputStream();
|
||||
assertEquals('A', in.read());
|
||||
assertEquals('B', in.read());
|
||||
assertEquals('C', in.read());
|
||||
assertEquals(-1, responseBody.read()); // The body is exhausted.
|
||||
}
|
||||
|
||||
assertEquals(-1, responseBody.read()); // The body is exhausted.
|
||||
}
|
||||
/**
|
||||
* Throttle the request body by sleeping 500ms after every 3 bytes. With a
|
||||
* 6-byte request, this should yield one sleep for a total delay of 500ms.
|
||||
*/
|
||||
@Test public void throttleRequest() throws Exception {
|
||||
server.enqueue(new MockResponse()
|
||||
.throttleBody(3, 500, TimeUnit.MILLISECONDS));
|
||||
|
||||
/**
|
||||
* Throttle the request body by sleeping 500ms after every 3 bytes. With a
|
||||
* 6-byte request, this should yield one sleep for a total delay of 500ms.
|
||||
*/
|
||||
public void testThrottleRequest() throws Exception {
|
||||
server.enqueue(new MockResponse()
|
||||
.throttleBody(3, 500, TimeUnit.MILLISECONDS));
|
||||
server.play();
|
||||
long startNanos = System.nanoTime();
|
||||
URLConnection connection = server.getUrl("/").openConnection();
|
||||
connection.setDoOutput(true);
|
||||
connection.getOutputStream().write("ABCDEF".getBytes("UTF-8"));
|
||||
InputStream in = connection.getInputStream();
|
||||
assertEquals(-1, in.read());
|
||||
long elapsedNanos = System.nanoTime() - startNanos;
|
||||
long elapsedMillis = NANOSECONDS.toMillis(elapsedNanos);
|
||||
|
||||
long startNanos = System.nanoTime();
|
||||
URLConnection connection = server.getUrl("/").openConnection();
|
||||
connection.setDoOutput(true);
|
||||
connection.getOutputStream().write("ABCDEF".getBytes("UTF-8"));
|
||||
InputStream in = connection.getInputStream();
|
||||
assertEquals(-1, in.read());
|
||||
long elapsedNanos = System.nanoTime() - startNanos;
|
||||
long elapsedMillis = NANOSECONDS.toMillis(elapsedNanos);
|
||||
assertTrue(String.format("Request + Response: %sms", elapsedMillis), elapsedMillis >= 500);
|
||||
assertTrue(String.format("Request + Response: %sms", elapsedMillis), elapsedMillis < 1000);
|
||||
}
|
||||
|
||||
assertTrue(String.format("Request + Response: %sms", elapsedMillis), elapsedMillis >= 500);
|
||||
assertTrue(String.format("Request + Response: %sms", elapsedMillis), elapsedMillis < 1000);
|
||||
}
|
||||
/**
|
||||
* Throttle the response body by sleeping 500ms after every 3 bytes. With a
|
||||
* 6-byte response, this should yield one sleep for a total delay of 500ms.
|
||||
*/
|
||||
@Test public void throttleResponse() throws Exception {
|
||||
server.enqueue(new MockResponse()
|
||||
.setBody("ABCDEF")
|
||||
.throttleBody(3, 500, TimeUnit.MILLISECONDS));
|
||||
|
||||
/**
|
||||
* Throttle the response body by sleeping 500ms after every 3 bytes. With a
|
||||
* 6-byte response, this should yield one sleep for a total delay of 500ms.
|
||||
*/
|
||||
public void testThrottleResponse() throws Exception {
|
||||
server.enqueue(new MockResponse()
|
||||
.setBody("ABCDEF")
|
||||
.throttleBody(3, 500, TimeUnit.MILLISECONDS));
|
||||
server.play();
|
||||
long startNanos = System.nanoTime();
|
||||
URLConnection connection = server.getUrl("/").openConnection();
|
||||
InputStream in = connection.getInputStream();
|
||||
assertEquals('A', in.read());
|
||||
assertEquals('B', in.read());
|
||||
assertEquals('C', in.read());
|
||||
assertEquals('D', in.read());
|
||||
assertEquals('E', in.read());
|
||||
assertEquals('F', in.read());
|
||||
assertEquals(-1, in.read());
|
||||
long elapsedNanos = System.nanoTime() - startNanos;
|
||||
long elapsedMillis = NANOSECONDS.toMillis(elapsedNanos);
|
||||
|
||||
long startNanos = System.nanoTime();
|
||||
URLConnection connection = server.getUrl("/").openConnection();
|
||||
InputStream in = connection.getInputStream();
|
||||
assertEquals('A', in.read());
|
||||
assertEquals('B', in.read());
|
||||
assertEquals('C', in.read());
|
||||
assertEquals('D', in.read());
|
||||
assertEquals('E', in.read());
|
||||
assertEquals('F', in.read());
|
||||
assertEquals(-1, in.read());
|
||||
long elapsedNanos = System.nanoTime() - startNanos;
|
||||
long elapsedMillis = NANOSECONDS.toMillis(elapsedNanos);
|
||||
assertTrue(String.format("Request + Response: %sms", elapsedMillis), elapsedMillis >= 500);
|
||||
assertTrue(String.format("Request + Response: %sms", elapsedMillis), elapsedMillis < 1000);
|
||||
}
|
||||
|
||||
assertTrue(String.format("Request + Response: %sms", elapsedMillis), elapsedMillis >= 500);
|
||||
assertTrue(String.format("Request + Response: %sms", elapsedMillis), elapsedMillis < 1000);
|
||||
}
|
||||
/**
|
||||
* Delay the response body by sleeping 1000ms.
|
||||
*/
|
||||
@Test public void delayResponse() throws IOException {
|
||||
server.enqueue(new MockResponse()
|
||||
.setBody("ABCDEF")
|
||||
.setBodyDelayTimeMs(1000));
|
||||
|
||||
/**
|
||||
* Delay the response body by sleeping 1000ms.
|
||||
*/
|
||||
public void testDelayResponse() throws IOException {
|
||||
server.enqueue(new MockResponse()
|
||||
.setBody("ABCDEF")
|
||||
.setBodyDelayTimeMs(1000));
|
||||
server.play();
|
||||
long startNanos = System.nanoTime();
|
||||
URLConnection connection = server.getUrl("/").openConnection();
|
||||
InputStream in = connection.getInputStream();
|
||||
assertEquals('A', in.read());
|
||||
assertEquals('B', in.read());
|
||||
assertEquals('C', in.read());
|
||||
assertEquals('D', in.read());
|
||||
assertEquals('E', in.read());
|
||||
assertEquals('F', in.read());
|
||||
assertEquals(-1, in.read());
|
||||
long elapsedNanos = System.nanoTime() - startNanos;
|
||||
long elapsedMillis = NANOSECONDS.toMillis(elapsedNanos);
|
||||
|
||||
long startNanos = System.nanoTime();
|
||||
URLConnection connection = server.getUrl("/").openConnection();
|
||||
InputStream in = connection.getInputStream();
|
||||
assertEquals('A', in.read());
|
||||
assertEquals('B', in.read());
|
||||
assertEquals('C', in.read());
|
||||
assertEquals('D', in.read());
|
||||
assertEquals('E', in.read());
|
||||
assertEquals('F', in.read());
|
||||
assertEquals(-1, in.read());
|
||||
long elapsedNanos = System.nanoTime() - startNanos;
|
||||
long elapsedMillis = NANOSECONDS.toMillis(elapsedNanos);
|
||||
|
||||
assertTrue(String.format("Request + Response: %sms", elapsedMillis), elapsedMillis >= 1000);
|
||||
assertTrue(String.format("Request + Response: %sms", elapsedMillis), elapsedMillis <= 1100);
|
||||
}
|
||||
assertTrue(String.format("Request + Response: %sms", elapsedMillis), elapsedMillis >= 1000);
|
||||
assertTrue(String.format("Request + Response: %sms", elapsedMillis), elapsedMillis <= 1100);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user