From 3aa708978d83c272e2a24348dfdd7d6695c3d27b Mon Sep 17 00:00:00 2001 From: "lingming.yb" Date: Wed, 8 Jan 2014 11:46:32 +0800 Subject: [PATCH] Testcase for spdy connection socket timeout. --- .../okhttp/mockwebserver/MockResponse.java | 13 +++++++++++++ .../okhttp/mockwebserver/MockWebServer.java | 7 +++++++ .../okhttp/internal/http/HttpOverSpdyTest.java | 15 +++++++++++++++ 3 files changed, 35 insertions(+) diff --git a/mockwebserver/src/main/java/com/squareup/okhttp/mockwebserver/MockResponse.java b/mockwebserver/src/main/java/com/squareup/okhttp/mockwebserver/MockResponse.java index b073c11a7..74e6db01a 100644 --- a/mockwebserver/src/main/java/com/squareup/okhttp/mockwebserver/MockResponse.java +++ b/mockwebserver/src/main/java/com/squareup/okhttp/mockwebserver/MockResponse.java @@ -40,6 +40,7 @@ public final class MockResponse implements Cloneable { private int bytesPerSecond = Integer.MAX_VALUE; private SocketPolicy socketPolicy = SocketPolicy.KEEP_OPEN; + private int bodyDelayTimeMs = 0; /** Creates a new mock response with an empty body. */ public MockResponse() { setBody(new byte[0]); @@ -216,6 +217,18 @@ public final class MockResponse implements Cloneable { this.bytesPerSecond = bytesPerSecond; return this; } + /** + * Set the delayed time of the response body to {@code delay}. This applies to the + * response body only; response headers are not affected. + */ + public MockResponse setBodyDelayTimeMs(int delay) { + bodyDelayTimeMs = delay; + return this; + } + + public int getBodyDelayTimeMs() { + return bodyDelayTimeMs; + } @Override public String toString() { return status; diff --git a/mockwebserver/src/main/java/com/squareup/okhttp/mockwebserver/MockWebServer.java b/mockwebserver/src/main/java/com/squareup/okhttp/mockwebserver/MockWebServer.java index 9d5ffb182..cf4ffc180 100644 --- a/mockwebserver/src/main/java/com/squareup/okhttp/mockwebserver/MockWebServer.java +++ b/mockwebserver/src/main/java/com/squareup/okhttp/mockwebserver/MockWebServer.java @@ -720,6 +720,13 @@ public final class MockWebServer { byte[] body = response.getBody(); stream.reply(spdyHeaders, body.length > 0); if (body.length > 0) { + if (response.getBodyDelayTimeMs() != 0) { + try { + Thread.sleep(response.getBodyDelayTimeMs()); + } catch (InterruptedException e) { + throw new AssertionError(e); + } + } stream.getOutputStream().write(body); stream.getOutputStream().close(); } diff --git a/okhttp/src/test/java/com/squareup/okhttp/internal/http/HttpOverSpdyTest.java b/okhttp/src/test/java/com/squareup/okhttp/internal/http/HttpOverSpdyTest.java index eaa59ec16..72e1461a9 100644 --- a/okhttp/src/test/java/com/squareup/okhttp/internal/http/HttpOverSpdyTest.java +++ b/okhttp/src/test/java/com/squareup/okhttp/internal/http/HttpOverSpdyTest.java @@ -271,6 +271,21 @@ public abstract class HttpOverSpdyTest { assertContent("A", connection, Integer.MAX_VALUE); } + @Test public void spdyConnectionTimeout() throws Exception { + MockResponse response = new MockResponse().setBody("A"); + response.setBodyDelayTimeMs(1000); + server.enqueue(response); + server.play(); + + HttpURLConnection connection1 = client.open(server.getUrl("/")); + connection1.setReadTimeout(2000); + HttpURLConnection connection2 = client.open(server.getUrl("/")); + connection2.setReadTimeout(200); + connection1.connect(); + connection2.connect(); + assertContent("A", connection1, Integer.MAX_VALUE); + } + @Test public void responsesAreCached() throws IOException { client.setResponseCache(cache);