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 "org.jetbrains.kotlin:kotlin-stdlib-jdk8:${versions.kotlin}"
implementation project(':okhttp') implementation project(':okhttp')
testImplementation 'junit:junit:4.12' testImplementation 'junit:junit:4.12'
androidTestImplementation project(':okhttp-testing-support')
androidTestImplementation project(':mockwebserver') androidTestImplementation project(':mockwebserver')
androidTestImplementation project(':okhttp-tls') androidTestImplementation project(':okhttp-tls')
androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test:runner:1.0.2'

View File

@@ -23,11 +23,13 @@ import okhttp3.Connection
import okhttp3.EventListener import okhttp3.EventListener
import okhttp3.OkHttpClient import okhttp3.OkHttpClient
import okhttp3.Protocol import okhttp3.Protocol
import okhttp3.RecordingEventListener
import okhttp3.Request import okhttp3.Request
import okhttp3.TlsVersion import okhttp3.TlsVersion
import okhttp3.mockwebserver.MockResponse import okhttp3.mockwebserver.MockResponse
import okhttp3.mockwebserver.MockWebServer import okhttp3.mockwebserver.MockWebServer
import okhttp3.tls.internal.TlsUtil.localhost import okhttp3.tls.internal.TlsUtil.localhost
import okio.ByteString.Companion.toByteString
import org.junit.After import org.junit.After
import org.junit.Assert.assertEquals import org.junit.Assert.assertEquals
import org.junit.Assert.assertTrue import org.junit.Assert.assertTrue
@@ -41,6 +43,7 @@ import org.junit.runner.RunWith
import java.net.InetAddress import java.net.InetAddress
import java.net.UnknownHostException import java.net.UnknownHostException
import javax.net.ssl.SSLPeerUnverifiedException import javax.net.ssl.SSLPeerUnverifiedException
import javax.net.ssl.SSLSocket
/** /**
* Run with "./gradlew :android-test:connectedCheck" and make sure ANDROID_SDK_ROOT is set. * 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() { private fun enableTls() {
client = client.newBuilder() client = client.newBuilder()
.sslSocketFactory( .sslSocketFactory(

View File

@@ -27,6 +27,7 @@ import javax.annotation.Nullable;
import static java.util.Arrays.asList; import static java.util.Arrays.asList;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.assertTrue;
public class RecordingEventListener extends EventListener { public class RecordingEventListener extends EventListener {
final Deque<CallEvent> eventSequence = new ConcurrentLinkedDeque<>(); final Deque<CallEvent> eventSequence = new ConcurrentLinkedDeque<>();
@@ -75,7 +76,7 @@ public class RecordingEventListener extends EventListener {
CallEvent startEvent = e.closes(); CallEvent startEvent = e.closes();
if (startEvent != null) { if (startEvent != null) {
assertThat(eventSequence).contains(startEvent); assertTrue(eventSequence.contains(startEvent));
} }
eventSequence.offer(e); eventSequence.offer(e);