use of okhttp3.Connection in project okhttp by square.
the class ResponseCacheTest method requestMinFresh.
@Test
public void requestMinFresh() throws IOException {
server.enqueue(new MockResponse().setBody("A").addHeader("Cache-Control: max-age=60").addHeader("Date: " + formatDate(0, TimeUnit.MINUTES)));
server.enqueue(new MockResponse().setBody("B"));
assertEquals("A", readAscii(openConnection(server.url("/").url())));
URLConnection connection = openConnection(server.url("/").url());
connection.addRequestProperty("Cache-Control", "min-fresh=120");
assertEquals("B", readAscii(connection));
}
use of okhttp3.Connection in project okhttp by square.
the class ResponseCacheTest method otherStacks_cacheMissWithVaryAsterisk.
// Other stacks (e.g. older versions of OkHttp bundled inside Android apps) can interact with the
// default ResponseCache. We can't keep the Vary case working, because we can't get to the Vary
// request headers after connect().
@Test
public void otherStacks_cacheMissWithVaryAsterisk() throws Exception {
server.enqueue(new MockResponse().addHeader("Cache-Control: max-age=60").addHeader("Vary: *").setBody("A"));
server.enqueue(new MockResponse().setBody("B"));
// Set the cache as the shared cache.
ResponseCache.setDefault(cache);
// Use the platform's HTTP stack.
URLConnection connection = server.url("/").url().openConnection();
assertFalse(connection instanceof OkHttpURLConnection);
assertEquals("A", readAscii(connection));
URLConnection connection2 = server.url("/").url().openConnection();
assertFalse(connection2 instanceof OkHttpURLConnection);
assertEquals("B", readAscii(connection2));
}
use of okhttp3.Connection in project okhttp by square.
the class ResponseCacheTest method responseCacheReturnsNullOutputStream.
/** Don't explode if the cache returns a null body. http://b/3373699 */
@Test
public void responseCacheReturnsNullOutputStream() throws Exception {
final AtomicBoolean aborted = new AtomicBoolean();
setInternalCache(new CacheAdapter(new AbstractResponseCache() {
@Override
public CacheRequest put(URI uri, URLConnection connection) {
return new CacheRequest() {
@Override
public void abort() {
aborted.set(true);
}
@Override
public OutputStream getBody() throws IOException {
return null;
}
};
}
}));
server.enqueue(new MockResponse().setBody("abcdef"));
HttpURLConnection connection = openConnection(server.url("/").url());
assertEquals("abc", readAscii(connection, 3));
connection.getInputStream().close();
// The best behavior is ambiguous, but RI 6 doesn't abort here
assertFalse(aborted.get());
}
use of okhttp3.Connection in project okhttp by square.
the class HttpOverHttp2Test method connectionTimeout.
@Test
public void connectionTimeout() throws Exception {
server.enqueue(new MockResponse().setBody("A").setBodyDelay(1, SECONDS));
OkHttpClient client1 = client.newBuilder().readTimeout(2000, MILLISECONDS).build();
Call call1 = client1.newCall(new Request.Builder().url(server.url("/")).build());
OkHttpClient client2 = client.newBuilder().readTimeout(200, MILLISECONDS).build();
Call call2 = client2.newCall(new Request.Builder().url(server.url("/")).build());
Response response1 = call1.execute();
assertEquals("A", response1.body().string());
try {
call2.execute();
fail();
} catch (IOException expected) {
}
// Confirm that the connection was reused.
assertEquals(0, server.takeRequest().getSequenceNumber());
assertEquals(1, server.takeRequest().getSequenceNumber());
}
use of okhttp3.Connection in project okhttp by square.
the class HttpOverHttp2Test method concurrentHttp2ConnectionsDeduplicated.
/**
* We don't know if the connection will support HTTP/2 until after we've connected. When multiple
* connections are requested concurrently OkHttp will pessimistically connect multiple times, then
* close any unnecessary connections. This test confirms that behavior works as intended.
*
* <p>This test uses proxy tunnels to get a hook while a connection is being established.
*/
@Test
public void concurrentHttp2ConnectionsDeduplicated() throws Exception {
server.useHttps(sslClient.socketFactory, true);
// Force a fresh connection pool for the test.
client.connectionPool().evictAll();
final QueueDispatcher queueDispatcher = new QueueDispatcher();
queueDispatcher.enqueueResponse(new MockResponse().setSocketPolicy(SocketPolicy.UPGRADE_TO_SSL_AT_END).clearHeaders());
queueDispatcher.enqueueResponse(new MockResponse().setSocketPolicy(SocketPolicy.UPGRADE_TO_SSL_AT_END).clearHeaders());
queueDispatcher.enqueueResponse(new MockResponse().setBody("call2 response"));
queueDispatcher.enqueueResponse(new MockResponse().setBody("call1 response"));
// We use a re-entrant dispatcher to initiate one HTTPS connection while the other is in flight.
server.setDispatcher(new Dispatcher() {
int requestCount;
@Override
public MockResponse dispatch(RecordedRequest request) throws InterruptedException {
MockResponse result = queueDispatcher.dispatch(request);
requestCount++;
if (requestCount == 1) {
// Before handling call1's CONNECT we do all of call2. This part re-entrant!
try {
Call call2 = client.newCall(new Request.Builder().url("https://android.com/call2").build());
Response response2 = call2.execute();
assertEquals("call2 response", response2.body().string());
} catch (IOException e) {
throw new RuntimeException(e);
}
}
return result;
}
@Override
public MockResponse peek() {
return queueDispatcher.peek();
}
@Override
public void shutdown() {
queueDispatcher.shutdown();
}
});
client = client.newBuilder().proxy(server.toProxyAddress()).build();
Call call1 = client.newCall(new Request.Builder().url("https://android.com/call1").build());
Response response2 = call1.execute();
assertEquals("call1 response", response2.body().string());
RecordedRequest call1Connect = server.takeRequest();
assertEquals("CONNECT", call1Connect.getMethod());
assertEquals(0, call1Connect.getSequenceNumber());
RecordedRequest call2Connect = server.takeRequest();
assertEquals("CONNECT", call2Connect.getMethod());
assertEquals(0, call2Connect.getSequenceNumber());
RecordedRequest call2Get = server.takeRequest();
assertEquals("GET", call2Get.getMethod());
assertEquals("/call2", call2Get.getPath());
assertEquals(0, call2Get.getSequenceNumber());
RecordedRequest call1Get = server.takeRequest();
assertEquals("GET", call1Get.getMethod());
assertEquals("/call1", call1Get.getPath());
assertEquals(1, call1Get.getSequenceNumber());
assertEquals(1, client.connectionPool().connectionCount());
}
Aggregations