@@ -3,6 +3,7 @@ package io.sentry.transport
33import com.nhaarman.mockitokotlin2.any
44import com.nhaarman.mockitokotlin2.eq
55import com.nhaarman.mockitokotlin2.mock
6+ import com.nhaarman.mockitokotlin2.never
67import com.nhaarman.mockitokotlin2.verify
78import com.nhaarman.mockitokotlin2.whenever
89import io.sentry.ISerializer
@@ -12,10 +13,12 @@ import io.sentry.SentryOptions
1213import io.sentry.Session
1314import io.sentry.protocol.User
1415import java.io.IOException
15- import java.net.HttpURLConnection
1616import java.net.Proxy
1717import java.net.URI
1818import java.net.URL
19+ import javax.net.ssl.HostnameVerifier
20+ import javax.net.ssl.HttpsURLConnection
21+ import javax.net.ssl.SSLSocketFactory
1922import kotlin.test.Test
2023import kotlin.test.assertEquals
2124import kotlin.test.assertFalse
@@ -24,28 +27,33 @@ import kotlin.test.assertTrue
2427class HttpTransportTest {
2528
2629 private class Fixture {
27- val dsn: URL = URI .create(" http ://key@localhost/proj" ).toURL()
30+ val dsn: URL = URI .create(" https ://key@localhost/proj" ).toURL()
2831 val serializer = mock<ISerializer >()
2932 var proxy: Proxy ? = null
3033 var requestUpdater = IConnectionConfigurator {}
3134 var connectionTimeout = 1000
3235 var readTimeout = 500
33- var bypassSecurity = false
34- val connection = mock<HttpURLConnection >()
36+ val connection = mock<HttpsURLConnection >()
3537 val currentDateProvider = mock<ICurrentDateProvider >()
38+ var sslSocketFactory: SSLSocketFactory ? = null
39+ var hostnameVerifier: HostnameVerifier ? = null
3640
3741 init {
3842 whenever(connection.outputStream).thenReturn(mock())
3943 whenever(connection.inputStream).thenReturn(mock())
44+ whenever(connection.setHostnameVerifier(any())).thenCallRealMethod()
45+ whenever(connection.setSSLSocketFactory(any())).thenCallRealMethod()
4046 }
4147
4248 fun getSUT (): HttpTransport {
4349 val options = SentryOptions ()
4450 options.setSerializer(serializer)
4551 options.proxy = proxy
52+ options.sslSocketFactory = sslSocketFactory
53+ options.hostnameVerifier = hostnameVerifier
4654
47- return object : HttpTransport (options, requestUpdater, connectionTimeout, readTimeout, bypassSecurity , dsn, currentDateProvider) {
48- override fun open (): HttpURLConnection {
55+ return object : HttpTransport (options, requestUpdater, connectionTimeout, readTimeout, sslSocketFactory, hostnameVerifier , dsn, currentDateProvider) {
56+ override fun open (): HttpsURLConnection {
4957 return connection
5058 }
5159 }
@@ -265,6 +273,46 @@ class HttpTransportTest {
265273 assertTrue(transport.isRetryAfter(" event" ))
266274 }
267275
276+ @Test
277+ fun `When SSLSocketFactory is given, set to connection` () {
278+ val factory = mock<SSLSocketFactory >()
279+ fixture.sslSocketFactory = factory
280+ val transport = fixture.getSUT()
281+
282+ transport.send(createEnvelope())
283+
284+ verify(fixture.connection).sslSocketFactory = eq(factory)
285+ }
286+
287+ @Test
288+ fun `When SSLSocketFactory is not given, do not set to connection` () {
289+ val transport = fixture.getSUT()
290+
291+ transport.send(createEnvelope())
292+
293+ verify(fixture.connection, never()).sslSocketFactory = any()
294+ }
295+
296+ @Test
297+ fun `When HostnameVerifier is given, set to connection` () {
298+ val hostname = mock<HostnameVerifier >()
299+ fixture.hostnameVerifier = hostname
300+ val transport = fixture.getSUT()
301+
302+ transport.send(createEnvelope())
303+
304+ verify(fixture.connection).hostnameVerifier = eq(hostname)
305+ }
306+
307+ @Test
308+ fun `When HostnameVerifier is not given, do not set to connection` () {
309+ val transport = fixture.getSUT()
310+
311+ transport.send(createEnvelope())
312+
313+ verify(fixture.connection, never()).hostnameVerifier = any()
314+ }
315+
268316 private fun createSession (): Session {
269317 return Session (" 123" , User (), " env" , " release" )
270318 }
0 commit comments