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:
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user