1
0
mirror of https://github.com/square/okhttp.git synced 2026-01-18 20:40:58 +03:00

Merge pull request #1140 from the4thfloor/delayedHTTPResponse

fix the delayed transfer for HTTP requests
This commit is contained in:
Jesse Wilson
2014-11-12 00:11:03 -05:00
2 changed files with 37 additions and 0 deletions

View File

@@ -581,9 +581,20 @@ public final class MockWebServer {
InputStream in = response.getBodyStream();
if (in == null) return;
sleepIfDelayed(response);
throttledTransfer(response, socket, in, out, Long.MAX_VALUE);
}
private void sleepIfDelayed(MockResponse response) {
if (response.getBodyDelayTimeMs() != 0) {
try {
Thread.sleep(response.getBodyDelayTimeMs());
} catch (InterruptedException e) {
throw new AssertionError(e);
}
}
}
/**
* Transfer bytes from {@code in} to {@code out} until either {@code length}
* bytes have been transferred or {@code in} is exhausted. The transfer is

View File

@@ -338,4 +338,30 @@ public final class MockWebServerTest extends TestCase {
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.
*/
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);
assertTrue(String.format("Request + Response: %sms", elapsedMillis), elapsedMillis >= 1000);
assertTrue(String.format("Request + Response: %sms", elapsedMillis), elapsedMillis <= 1100);
}
}