@Test public void silentRetryWhenIdempotentRequestFailsOnReusedConnection() throws Exception {
server.enqueue(new MockResponse().setBody("a"));
server.enqueue(new MockResponse().setSocketPolicy(SocketPolicy.DISCONNECT_AFTER_REQUEST));
server.enqueue(new MockResponse().setBody("b"));
Request request = new Request.Builder()
.url(server.url("/"))
.build();
Response responseA = client.newCall(request).execute();
assertEquals("a", responseA.body().string());
assertEquals(0, server.takeRequest().getSequenceNumber());
Response responseB = client.newCall(request).execute();
assertEquals("b", responseB.body().string());
assertEquals(1, server.takeRequest().getSequenceNumber());
assertEquals(0, server.takeRequest().getSequenceNumber());
}
java类okhttp3.mockwebserver.SocketPolicy的实例源码
ConnectionReuseTest.java 文件源码
项目:GitHub
阅读 23
收藏 0
点赞 0
评论 0
ConnectionReuseTest.java 文件源码
项目:GitHub
阅读 24
收藏 0
点赞 0
评论 0
@Test public void staleConnectionNotReusedForNonIdempotentRequest() throws Exception {
server.enqueue(new MockResponse().setBody("a")
.setSocketPolicy(SocketPolicy.SHUTDOWN_OUTPUT_AT_END));
server.enqueue(new MockResponse().setBody("b"));
Request requestA = new Request.Builder()
.url(server.url("/"))
.build();
Response responseA = client.newCall(requestA).execute();
assertEquals("a", responseA.body().string());
assertEquals(0, server.takeRequest().getSequenceNumber());
// Give the socket a chance to become stale.
Thread.sleep(250);
Request requestB = new Request.Builder()
.url(server.url("/"))
.post(RequestBody.create(MediaType.parse("text/plain"), "b"))
.build();
Response responseB = client.newCall(requestB).execute();
assertEquals("b", responseB.body().string());
assertEquals(0, server.takeRequest().getSequenceNumber());
}
URLConnectionTest.java 文件源码
项目:GitHub
阅读 27
收藏 0
点赞 0
评论 0
@Test public void streamedBodyIsNotRetried() throws Exception {
server.enqueue(new MockResponse()
.setSocketPolicy(SocketPolicy.DISCONNECT_AFTER_REQUEST));
urlFactory = new OkUrlFactory(defaultClient().newBuilder()
.dns(new DoubleInetAddressDns())
.build());
HttpURLConnection connection = urlFactory.open(server.url("/").url());
connection.setDoOutput(true);
connection.setChunkedStreamingMode(100);
OutputStream os = connection.getOutputStream();
os.write("OutputStream is no fun.".getBytes("UTF-8"));
os.close();
try {
connection.getResponseCode();
fail();
} catch (IOException expected) {
}
assertEquals(1, server.getRequestCount());
}
EventListenerTest.java 文件源码
项目:GitHub
阅读 21
收藏 0
点赞 0
评论 0
@Test public void multipleConnectsForSingleCall() throws IOException {
enableTlsWithTunnel(false);
server.enqueue(new MockResponse()
.setSocketPolicy(SocketPolicy.FAIL_HANDSHAKE));
server.enqueue(new MockResponse());
client = client.newBuilder()
.dns(new DoubleInetAddressDns())
.build();
Call call = client.newCall(new Request.Builder()
.url(server.url("/"))
.build());
Response response = call.execute();
assertEquals(200, response.code());
response.body().close();
listener.removeUpToEvent(ConnectStart.class);
listener.removeUpToEvent(ConnectFailed.class);
listener.removeUpToEvent(ConnectStart.class);
listener.removeUpToEvent(ConnectEnd.class);
}
EventListenerTest.java 文件源码
项目:GitHub
阅读 19
收藏 0
点赞 0
评论 0
@Test public void failedSecureConnect() {
enableTlsWithTunnel(false);
server.enqueue(new MockResponse()
.setSocketPolicy(SocketPolicy.FAIL_HANDSHAKE));
Call call = client.newCall(new Request.Builder()
.url(server.url("/"))
.build());
try {
call.execute();
fail();
} catch (IOException expected) {
}
SecureConnectStart secureStart = listener.removeUpToEvent(SecureConnectStart.class);
assertSame(call, secureStart.call);
CallFailed callFailed = listener.removeUpToEvent(CallFailed.class);
assertSame(call, callFailed.call);
assertNotNull(callFailed.ioe);
}
EventListenerTest.java 文件源码
项目:GitHub
阅读 20
收藏 0
点赞 0
评论 0
@Test public void secureConnectWithTunnel() throws IOException {
enableTlsWithTunnel(true);
server.enqueue(new MockResponse()
.setSocketPolicy(SocketPolicy.UPGRADE_TO_SSL_AT_END));
server.enqueue(new MockResponse());
client = client.newBuilder()
.proxy(server.toProxyAddress())
.build();
Call call = client.newCall(new Request.Builder()
.url(server.url("/"))
.build());
Response response = call.execute();
assertEquals(200, response.code());
response.body().close();
SecureConnectStart secureStart = listener.removeUpToEvent(SecureConnectStart.class);
assertSame(call, secureStart.call);
SecureConnectEnd secureEnd = listener.removeUpToEvent(SecureConnectEnd.class);
assertSame(call, secureEnd.call);
assertNotNull(secureEnd.handshake);
}
EventListenerTest.java 文件源码
项目:GitHub
阅读 19
收藏 0
点赞 0
评论 0
@Test public void multipleSecureConnectsForSingleCall() throws IOException {
enableTlsWithTunnel(false);
server.enqueue(new MockResponse()
.setSocketPolicy(SocketPolicy.FAIL_HANDSHAKE));
server.enqueue(new MockResponse());
client = client.newBuilder()
.dns(new DoubleInetAddressDns())
.build();
Call call = client.newCall(new Request.Builder()
.url(server.url("/"))
.build());
Response response = call.execute();
assertEquals(200, response.code());
response.body().close();
listener.removeUpToEvent(SecureConnectStart.class);
listener.removeUpToEvent(ConnectFailed.class);
listener.removeUpToEvent(SecureConnectStart.class);
listener.removeUpToEvent(SecureConnectEnd.class);
}
EventListenerTest.java 文件源码
项目:GitHub
阅读 26
收藏 0
点赞 0
评论 0
private void responseBodyFail(Protocol expectedProtocol) throws IOException {
// Use a 2 MiB body so the disconnect won't happen until the client has read some data.
int responseBodySize = 2 * 1024 * 1024; // 2 MiB
server.enqueue(new MockResponse()
.setBody(new Buffer().write(new byte[responseBodySize]))
.setSocketPolicy(SocketPolicy.DISCONNECT_DURING_RESPONSE_BODY));
Call call = client.newCall(new Request.Builder()
.url(server.url("/"))
.build());
Response response = call.execute();
if (expectedProtocol == Protocol.HTTP_2) {
// soft failure since client may not support depending on Platform
assumeThat(response, matchesProtocol(Protocol.HTTP_2));
}
assertEquals(expectedProtocol, response.protocol());
try {
response.body.string();
fail();
} catch (IOException expected) {
}
CallFailed callFailed = listener.removeUpToEvent(CallFailed.class);
assertNotNull(callFailed.ioe);
}
EventListenerTest.java 文件源码
项目:GitHub
阅读 22
收藏 0
点赞 0
评论 0
@Ignore("the CallEnd event is omitted")
@Test public void emptyResponseBody() throws IOException {
server.enqueue(new MockResponse()
.setBody("")
.setBodyDelay(1, TimeUnit.SECONDS)
.setSocketPolicy(SocketPolicy.DISCONNECT_DURING_RESPONSE_BODY));
Call call = client.newCall(new Request.Builder()
.url(server.url("/"))
.build());
Response response = call.execute();
response.body().close();
List<String> expectedEvents = Arrays.asList("CallStart", "DnsStart", "DnsEnd",
"ConnectStart", "ConnectEnd", "ConnectionAcquired", "RequestHeadersStart",
"RequestHeadersEnd", "ResponseHeadersStart", "ResponseHeadersEnd", "ResponseBodyStart",
"ResponseBodyEnd", "ConnectionReleased", "CallEnd");
assertEquals(expectedEvents, listener.recordedEventTypes());
}
EventListenerTest.java 文件源码
项目:GitHub
阅读 24
收藏 0
点赞 0
评论 0
@Ignore("this reports CallFailed not CallEnd")
@Test public void responseBodyClosedClosedWithoutReadingAllData() throws IOException {
server.enqueue(new MockResponse()
.setBody("abc")
.setBodyDelay(1, TimeUnit.SECONDS)
.setSocketPolicy(SocketPolicy.DISCONNECT_DURING_RESPONSE_BODY));
Call call = client.newCall(new Request.Builder()
.url(server.url("/"))
.build());
Response response = call.execute();
response.body().close();
List<String> expectedEvents = Arrays.asList("CallStart", "DnsStart", "DnsEnd",
"ConnectStart", "ConnectEnd", "ConnectionAcquired", "RequestHeadersStart",
"RequestHeadersEnd", "ResponseHeadersStart", "ResponseHeadersEnd", "ResponseBodyStart",
"ResponseBodyEnd", "ConnectionReleased", "CallEnd");
assertEquals(expectedEvents, listener.recordedEventTypes());
}