1
0
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:
Yuri Schimke
2019-08-11 10:48:43 +01:00
parent 1994136a24
commit 1b60e3739c
3 changed files with 75 additions and 1 deletions

View File

@@ -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'

View File

@@ -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(

View File

@@ -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);