mirror of
https://github.com/square/okhttp.git
synced 2025-08-07 12:42:57 +03:00
Test Android session reuse
This commit is contained in:
@@ -32,6 +32,7 @@ dependencies {
|
||||
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:${versions.kotlin}"
|
||||
implementation project(':okhttp')
|
||||
testImplementation 'junit:junit:4.12'
|
||||
androidTestImplementation project(':okhttp-testing-support')
|
||||
androidTestImplementation project(':mockwebserver')
|
||||
androidTestImplementation project(':okhttp-tls')
|
||||
androidTestImplementation 'com.android.support.test:runner:1.0.2'
|
||||
|
@@ -23,11 +23,13 @@ import okhttp3.Connection
|
||||
import okhttp3.EventListener
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Protocol
|
||||
import okhttp3.RecordingEventListener
|
||||
import okhttp3.Request
|
||||
import okhttp3.TlsVersion
|
||||
import okhttp3.mockwebserver.MockResponse
|
||||
import okhttp3.mockwebserver.MockWebServer
|
||||
import okhttp3.tls.internal.TlsUtil.localhost
|
||||
import okio.ByteString.Companion.toByteString
|
||||
import org.junit.After
|
||||
import org.junit.Assert.assertEquals
|
||||
import org.junit.Assert.assertTrue
|
||||
@@ -41,6 +43,7 @@ import org.junit.runner.RunWith
|
||||
import java.net.InetAddress
|
||||
import java.net.UnknownHostException
|
||||
import javax.net.ssl.SSLPeerUnverifiedException
|
||||
import javax.net.ssl.SSLSocket
|
||||
|
||||
/**
|
||||
* Run with "./gradlew :android-test:connectedCheck" and make sure ANDROID_SDK_ROOT is set.
|
||||
@@ -190,6 +193,75 @@ class OkHttpTest {
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testEventListener() {
|
||||
val eventListener = RecordingEventListener()
|
||||
|
||||
client = client.newBuilder().eventListener(eventListener).build()
|
||||
|
||||
enableTls()
|
||||
|
||||
server.enqueue(MockResponse().setBody("abc1"))
|
||||
server.enqueue(MockResponse().setBody("abc2"))
|
||||
|
||||
val request = Request.Builder().url(server.url("/")).build()
|
||||
|
||||
client.newCall(request).execute().use { response ->
|
||||
assertEquals(200, response.code)
|
||||
}
|
||||
|
||||
assertEquals(listOf("CallStart", "ProxySelectStart", "ProxySelectEnd", "DnsStart", "DnsEnd",
|
||||
"ConnectStart", "SecureConnectStart", "SecureConnectEnd", "ConnectEnd",
|
||||
"ConnectionAcquired", "RequestHeadersStart", "RequestHeadersEnd", "ResponseHeadersStart",
|
||||
"ResponseHeadersEnd", "ResponseBodyStart", "ResponseBodyEnd", "ConnectionReleased",
|
||||
"CallEnd"), eventListener.recordedEventTypes())
|
||||
|
||||
eventListener.clearAllEvents()
|
||||
|
||||
client.newCall(request).execute().use { response ->
|
||||
assertEquals(200, response.code)
|
||||
}
|
||||
|
||||
assertEquals(listOf("CallStart", "ProxySelectStart", "ProxySelectEnd",
|
||||
"ConnectionAcquired", "RequestHeadersStart", "RequestHeadersEnd", "ResponseHeadersStart",
|
||||
"ResponseHeadersEnd", "ResponseBodyStart", "ResponseBodyEnd", "ConnectionReleased",
|
||||
"CallEnd"), eventListener.recordedEventTypes())
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testSessionReuse() {
|
||||
val sessionIds = mutableListOf<String>()
|
||||
|
||||
client = client.newBuilder().eventListener(object : EventListener() {
|
||||
override fun connectionAcquired(call: Call, connection: Connection) {
|
||||
val sslSocket = connection.socket() as SSLSocket
|
||||
|
||||
sessionIds.add(sslSocket.session.id.toByteString().hex())
|
||||
}
|
||||
}).build()
|
||||
|
||||
enableTls()
|
||||
|
||||
server.enqueue(MockResponse().setBody("abc1"))
|
||||
server.enqueue(MockResponse().setBody("abc2"))
|
||||
|
||||
val request = Request.Builder().url(server.url("/")).build()
|
||||
|
||||
client.newCall(request).execute().use { response ->
|
||||
assertEquals(200, response.code)
|
||||
}
|
||||
|
||||
client.connectionPool.evictAll()
|
||||
assertEquals(0, client.connectionPool.connectionCount())
|
||||
|
||||
client.newCall(request).execute().use { response ->
|
||||
assertEquals(200, response.code)
|
||||
}
|
||||
|
||||
assertEquals(2, sessionIds.size)
|
||||
assertEquals(sessionIds[0], sessionIds[1])
|
||||
}
|
||||
|
||||
private fun enableTls() {
|
||||
client = client.newBuilder()
|
||||
.sslSocketFactory(
|
||||
|
@@ -27,6 +27,7 @@ import javax.annotation.Nullable;
|
||||
|
||||
import static java.util.Arrays.asList;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
public class RecordingEventListener extends EventListener {
|
||||
final Deque<CallEvent> eventSequence = new ConcurrentLinkedDeque<>();
|
||||
@@ -75,7 +76,7 @@ public class RecordingEventListener extends EventListener {
|
||||
CallEvent startEvent = e.closes();
|
||||
|
||||
if (startEvent != null) {
|
||||
assertThat(eventSequence).contains(startEvent);
|
||||
assertTrue(eventSequence.contains(startEvent));
|
||||
}
|
||||
|
||||
eventSequence.offer(e);
|
Reference in New Issue
Block a user