Skip to content

Commit

Permalink
Test Android session reuse
Browse files Browse the repository at this point in the history
  • Loading branch information
yschimke committed Aug 11, 2019
1 parent 1994136 commit 1b60e37
Show file tree
Hide file tree
Showing 3 changed files with 75 additions and 1 deletion.
1 change: 1 addition & 0 deletions android-test/build.gradle
Expand Up @@ -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'
Expand Down
Expand Up @@ -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
Expand All @@ -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.
Expand Down Expand Up @@ -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(
Expand Down
Expand Up @@ -27,6 +27,7 @@

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<>();
Expand Down Expand Up @@ -75,7 +76,7 @@ private void logEvent(CallEvent e) {
CallEvent startEvent = e.closes();

if (startEvent != null) {
assertThat(eventSequence).contains(startEvent);
assertTrue(eventSequence.contains(startEvent));
}

eventSequence.offer(e);
Expand Down

0 comments on commit 1b60e37

Please sign in to comment.