+++ /dev/null
-/*
- * Copyright (C) The Arvados Authors. All rights reserved.
- *
- * SPDX-License-Identifier: AGPL-3.0 OR Apache-2.0
- *
- */
-
-package org.arvados.client.api.client.factory;
-
-import okhttp3.OkHttpClient;
-import okhttp3.Request;
-import okhttp3.Response;
-import okhttp3.mockwebserver.MockResponse;
-import org.arvados.client.test.utils.ArvadosClientMockedWebServerTest;
-import org.junit.Assert;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.junit.MockitoJUnitRunner;
-
-import javax.net.ssl.KeyManagerFactory;
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.SSLSocketFactory;
-import javax.net.ssl.TrustManagerFactory;
-import java.io.FileInputStream;
-import java.security.KeyStore;
-
-
-@RunWith(MockitoJUnitRunner.class)
-public class OkHttpClientFactoryTest extends ArvadosClientMockedWebServerTest {
-
- @Test(expected = javax.net.ssl.SSLHandshakeException.class)
- public void secureOkHttpClientIsCreated() throws Exception {
-
- // given
- OkHttpClientFactory factory = OkHttpClientFactory.builder().build();
- // * configure HTTPS server
- SSLSocketFactory sf = getSSLSocketFactoryWithSelfSignedCertificate();
- server.useHttps(sf, false);
- server.enqueue(new MockResponse().setBody("OK"));
- // * prepare client HTTP request
- Request request = new Request.Builder()
- .url("https://localhost:9000/")
- .build();
-
- // when - then (SSL certificate is verified)
- OkHttpClient actual = factory.create(false);
- Response response = actual.newCall(request).execute();
- }
-
- @Test
- public void insecureOkHttpClientIsCreated() throws Exception {
- // given
- OkHttpClientFactory factory = OkHttpClientFactory.builder().build();
- // * configure HTTPS server
- SSLSocketFactory sf = getSSLSocketFactoryWithSelfSignedCertificate();
- server.useHttps(sf, false);
- server.enqueue(new MockResponse().setBody("OK"));
- // * prepare client HTTP request
- Request request = new Request.Builder()
- .url("https://localhost:9000/")
- .build();
-
- // when (SSL certificate is not verified)
- OkHttpClient actual = factory.create(true);
- Response response = actual.newCall(request).execute();
-
- // then
- Assert.assertEquals(response.body().string(),"OK");
- }
-
-
- /*
- This ugly boilerplate is needed to enable self signed certificate.
-
- It requires selfsigned.keystore.jks file. It was generated with:
- keytool -genkey -v -keystore mystore.keystore.jks -alias alias_name -keyalg RSA -keysize 2048 -validity 10000
- */
- public SSLSocketFactory getSSLSocketFactoryWithSelfSignedCertificate() throws Exception {
-
- FileInputStream stream = new FileInputStream("src/test/resources/selfsigned.keystore.jks");
- char[] serverKeyStorePassword = "123456".toCharArray();
- KeyStore serverKeyStore = KeyStore.getInstance(KeyStore.getDefaultType());
- serverKeyStore.load(stream, serverKeyStorePassword);
-
- String kmfAlgorithm = KeyManagerFactory.getDefaultAlgorithm();
- KeyManagerFactory kmf = KeyManagerFactory.getInstance(kmfAlgorithm);
- kmf.init(serverKeyStore, serverKeyStorePassword);
-
- TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(kmfAlgorithm);
- trustManagerFactory.init(serverKeyStore);
-
- SSLContext sslContext = SSLContext.getInstance("SSL");
- sslContext.init(kmf.getKeyManagers(), trustManagerFactory.getTrustManagers(), null);
- return sslContext.getSocketFactory();
- }
-}