/*
* Copyright (C) 2014 Square, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package okhttp3;
import java.io.IOException;
import java.net.CookieHandler;
import java.net.CookieManager;
import java.net.ProxySelector;
import java.net.ResponseCache;
import java.util.Arrays;
import java.util.concurrent.TimeUnit;
import org.junit.After;
import org.junit.Test;
import static okhttp3.TestUtil.defaultClient;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.fail;
public final class OkHttpClientTest {
private static final ProxySelector DEFAULT_PROXY_SELECTOR = ProxySelector.getDefault();
private static final CookieHandler DEFAULT_COOKIE_HANDLER = CookieManager.getDefault();
private static final ResponseCache DEFAULT_RESPONSE_CACHE = ResponseCache.getDefault();
@After public void tearDown() throws Exception {
ProxySelector.setDefault(DEFAULT_PROXY_SELECTOR);
CookieManager.setDefault(DEFAULT_COOKIE_HANDLER);
ResponseCache.setDefault(DEFAULT_RESPONSE_CACHE);
}
@Test public void durationDefaults() {
OkHttpClient client = defaultClient();
assertEquals(10_000, client.connectTimeoutMillis());
assertEquals(10_000, client.readTimeoutMillis());
assertEquals(10_000, client.writeTimeoutMillis());
assertEquals(0, client.pingIntervalMillis());
}
@Test public void timeoutValidRange() {
OkHttpClient.Builder builder = new OkHttpClient.Builder();
try {
builder.connectTimeout(1, TimeUnit.NANOSECONDS);
} catch (IllegalArgumentException ignored) {
}
try {
builder.writeTimeout(1, TimeUnit.NANOSECONDS);
} catch (IllegalArgumentException ignored) {
}
try {
builder.readTimeout(1, TimeUnit.NANOSECONDS);
} catch (IllegalArgumentException ignored) {
}
try {
builder.connectTimeout(365, TimeUnit.DAYS);
} catch (IllegalArgumentException ignored) {
}
try {
builder.writeTimeout(365, TimeUnit.DAYS);
} catch (IllegalArgumentException ignored) {
}
try {
builder.readTimeout(365, TimeUnit.DAYS);
} catch (IllegalArgumentException ignored) {
}
}
@Test public void clonedInterceptorsListsAreIndependent() throws Exception {
Interceptor interceptor = new Interceptor() {
@Override public Response intercept(Chain chain) throws IOException {
return chain.proceed(chain.request());
}
};
OkHttpClient original = defaultClient();
original.newBuilder()
.addInterceptor(interceptor)
.addNetworkInterceptor(interceptor)
.build();
assertEquals(0, original.interceptors().size());
assertEquals(0, original.networkInterceptors().size());
}
/**
* When copying the client, stateful things like the connection pool are shared across all
* clients.
*/
@Test public void cloneSharesStatefulInstances() throws Exception {
OkHttpClient client = defaultClient();
// Values should be non-null.
OkHttpClient a = client.newBuilder().build();
assertNotNull(a.dispatcher());
assertNotNull(a.connectionPool());
assertNotNull(a.sslSocketFactory());
// Multiple clients share the instances.
OkHttpClient b = client.newBuilder().build();
assertSame(a.dispatcher(), b.dispatcher());
assertSame(a.connectionPool(), b.connectionPool());
assertSame(a.sslSocketFactory(), b.sslSocketFactory());
}
@Test public void setProtocolsRejectsHttp10() throws Exception {
OkHttpClient.Builder builder = new OkHttpClient.Builder();
try {
builder.protocols(Arrays.asList(Protocol.HTTP_1_0, Protocol.HTTP_1_1));
fail();
} catch (IllegalArgumentException expected) {
}
}
@Test public void certificatePinnerEquality() {
OkHttpClient clientA = TestUtil.defaultClient();
OkHttpClient clientB = TestUtil.defaultClient();
assertEquals(clientA.certificatePinner(), clientB.certificatePinner());
}
}