11package io .socket .client ;
22
33import io .socket .emitter .Emitter ;
4+ import okhttp3 .OkHttpClient ;
45import org .junit .After ;
56import org .junit .Test ;
67import org .junit .runner .RunWith ;
910import javax .net .ssl .HostnameVerifier ;
1011import javax .net .ssl .KeyManagerFactory ;
1112import javax .net .ssl .SSLContext ;
13+ import javax .net .ssl .SSLSession ;
1214import javax .net .ssl .TrustManagerFactory ;
15+ import javax .net .ssl .X509TrustManager ;
1316import java .io .File ;
1417import java .io .FileInputStream ;
1518import java .io .IOException ;
2124@ RunWith (JUnit4 .class )
2225public class SSLConnectionTest extends Connection {
2326
24- // for test on localhost
25- static HostnameVerifier hostnameVerifier = new javax .net .ssl .HostnameVerifier (){
26- public boolean verify (String hostname , javax .net .ssl .SSLSession sslSession ) {
27- return hostname .equals ("localhost" );
28- }
29- };
27+ private static OkHttpClient sOkHttpClient ;
3028
3129 private Socket socket ;
3230
31+ static {
32+ try {
33+ prepareOkHttpClient ();
34+ } catch (GeneralSecurityException e ) {
35+ e .printStackTrace ();
36+ } catch (IOException e ) {
37+ e .printStackTrace ();
38+ }
39+ }
40+
3341 @ Override
3442 String uri () {
3543 return "https://localhost:" + PORT ;
@@ -47,7 +55,7 @@ String[] createEnv() {
4755 return new String [] {"DEBUG=socket.io:*" , "PORT=" + PORT , "SSL=1" };
4856 }
4957
50- SSLContext createSSLContext () throws GeneralSecurityException , IOException {
58+ private static void prepareOkHttpClient () throws GeneralSecurityException , IOException {
5159 KeyStore ks = KeyStore .getInstance ("JKS" );
5260 File file = new File ("src/test/resources/keystore.jks" );
5361 ks .load (new FileInputStream (file ), "password" .toCharArray ());
@@ -60,21 +68,30 @@ SSLContext createSSLContext() throws GeneralSecurityException, IOException {
6068
6169 SSLContext sslContext = SSLContext .getInstance ("TLSv1" );
6270 sslContext .init (kmf .getKeyManagers (), tmf .getTrustManagers (), null );
63- return sslContext ;
71+
72+ sOkHttpClient = new OkHttpClient .Builder ()
73+ .hostnameVerifier (new HostnameVerifier (){
74+ public boolean verify (String hostname , SSLSession sslSession ) {
75+ return hostname .equals ("localhost" );
76+ }
77+ })
78+ .sslSocketFactory (sslContext .getSocketFactory (),
79+ (X509TrustManager ) tmf .getTrustManagers ()[0 ])
80+ .build ();
6481 }
6582
6683 @ After
6784 public void tearDown () {
68- IO .setDefaultSSLContext (null );
69- IO .setDefaultHostnameVerifier (null );
85+ IO .setDefaultOkHttpCallFactory (null );
86+ IO .setDefaultOkHttpWebSocketFactory (null );
7087 }
7188
7289 @ Test (timeout = TIMEOUT )
7390 public void connect () throws Exception {
7491 final BlockingQueue <Object > values = new LinkedBlockingQueue <Object >();
7592 IO .Options opts = createOptions ();
76- opts .sslContext = createSSLContext () ;
77- opts .hostnameVerifier = hostnameVerifier ;
93+ opts .callFactory = sOkHttpClient ;
94+ opts .webSocketFactory = sOkHttpClient ;
7895 socket = client (opts );
7996 socket .on (Socket .EVENT_CONNECT , new Emitter .Listener () {
8097 @ Override
@@ -96,8 +113,8 @@ public void call(Object... args) {
96113 @ Test (timeout = TIMEOUT )
97114 public void defaultSSLContext () throws Exception {
98115 final BlockingQueue <Object > values = new LinkedBlockingQueue <Object >();
99- IO .setDefaultSSLContext ( createSSLContext () );
100- IO .setDefaultHostnameVerifier ( hostnameVerifier );
116+ IO .setDefaultOkHttpWebSocketFactory ( sOkHttpClient );
117+ IO .setDefaultOkHttpCallFactory ( sOkHttpClient );
101118 socket = client ();
102119 socket .on (Socket .EVENT_CONNECT , new Emitter .Listener () {
103120 @ Override
0 commit comments