From 58401075a66f7c5963848a7349067f995fe4f947 Mon Sep 17 00:00:00 2001 From: tang peng Date: Sat, 30 Mar 2019 07:47:12 +0000 Subject: [PATCH] Make HTTP/s Optional Change-Id: Ia09126b06ad43f05582ae0f3dd8692df223953fe Issue-ID: HOLMES-207 Signed-off-by: tang peng --- holmes-actions/pom.xml | 2 +- .../java/org/onap/holmes/common/aai/AaiQuery.java | 2 +- .../org/onap/holmes/common/dmaap/Publisher.java | 4 +- .../org/onap/holmes/common/utils/HttpsUtils.java | 51 +++++++++++++++------- .../org/onap/holmes/common/aai/AaiQueryTest.java | 41 ++++++++++------- .../onap/holmes/common/utils/HttpsUtilsTest.java | 16 +++---- pom.xml | 2 +- version.properties | 2 +- 8 files changed, 71 insertions(+), 49 deletions(-) diff --git a/holmes-actions/pom.xml b/holmes-actions/pom.xml index 3e0e7a6..22fbe48 100644 --- a/holmes-actions/pom.xml +++ b/holmes-actions/pom.xml @@ -12,7 +12,7 @@ org.onap.holmes.common holmes-common-parent - 1.2.7 + 1.2.8 holmes-common-service diff --git a/holmes-actions/src/main/java/org/onap/holmes/common/aai/AaiQuery.java b/holmes-actions/src/main/java/org/onap/holmes/common/aai/AaiQuery.java index 919f329..b11cafc 100644 --- a/holmes-actions/src/main/java/org/onap/holmes/common/aai/AaiQuery.java +++ b/holmes-actions/src/main/java/org/onap/holmes/common/aai/AaiQuery.java @@ -123,7 +123,7 @@ public class AaiQuery { CloseableHttpClient httpClient = null; HttpGet httpGet = new HttpGet(url); try { - httpClient = HttpsUtils.getHttpClient(HttpsUtils.DEFUALT_TIMEOUT); + httpClient = HttpsUtils.getHttpsClient(HttpsUtils.DEFUALT_TIMEOUT); HttpResponse httpResponse = HttpsUtils.get(httpGet, getHeaders(), httpClient); response = HttpsUtils.extractResponseEntity(httpResponse); } catch (Exception e) { diff --git a/holmes-actions/src/main/java/org/onap/holmes/common/dmaap/Publisher.java b/holmes-actions/src/main/java/org/onap/holmes/common/dmaap/Publisher.java index 09bb013..d95853d 100644 --- a/holmes-actions/src/main/java/org/onap/holmes/common/dmaap/Publisher.java +++ b/holmes-actions/src/main/java/org/onap/holmes/common/dmaap/Publisher.java @@ -17,12 +17,10 @@ package org.onap.holmes.common.dmaap; import java.io.IOException; import lombok.extern.slf4j.Slf4j; -import org.apache.http.client.methods.HttpEntityEnclosingRequestBase; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.CloseableHttpClient; import org.onap.holmes.common.dmaap.entity.PolicyMsg; import org.onap.holmes.common.exception.CorrelationException; -import com.alibaba.fastjson.JSON; import com.google.gson.Gson; import java.util.HashMap; import javax.ws.rs.core.MediaType; @@ -61,7 +59,7 @@ public class Publisher { CloseableHttpClient httpClient = null; HttpPost httpPost = new HttpPost(url); try { - httpClient = HttpsUtils.getHttpClient(HttpsUtils.DEFUALT_TIMEOUT); + httpClient = HttpsUtils.getConditionalHttpsClient(HttpsUtils.DEFUALT_TIMEOUT); httpResponse = HttpsUtils.post(httpPost, headers, new HashMap<>(), new StringEntity(content, "utf-8"), httpClient); } catch (Exception e) { throw new CorrelationException("Failed to connect to DCAE.", e); diff --git a/holmes-actions/src/main/java/org/onap/holmes/common/utils/HttpsUtils.java b/holmes-actions/src/main/java/org/onap/holmes/common/utils/HttpsUtils.java index 2df4d55..2aa5695 100644 --- a/holmes-actions/src/main/java/org/onap/holmes/common/utils/HttpsUtils.java +++ b/holmes-actions/src/main/java/org/onap/holmes/common/utils/HttpsUtils.java @@ -1,11 +1,11 @@ /** * Copyright 2017 ZTE Corporation. - * + *

* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except * in compliance with the License. You may obtain a copy of the License at - * + *

* http://www.apache.org/licenses/LICENSE-2.0 - * + *

* Unless required by applicable law or agreed to in writing, software distributed under the License * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express * or implied. See the License for the specific language governing permissions and limitations under @@ -21,6 +21,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; + import lombok.extern.slf4j.Slf4j; import org.apache.http.Consts; import org.apache.http.HttpEntity; @@ -43,12 +44,14 @@ import org.apache.http.conn.ssl.NoopHostnameVerifier; import org.apache.http.conn.ssl.SSLConnectionSocketFactory; import org.apache.http.conn.ssl.TrustStrategy; import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.impl.client.HttpClients; import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; import org.apache.http.message.BasicNameValuePair; import org.apache.http.ssl.SSLContextBuilder; import org.apache.http.util.EntityUtils; import org.jvnet.hk2.annotations.Service; +import org.onap.holmes.common.config.MicroServiceConfig; import org.onap.holmes.common.exception.CorrelationException; @Slf4j @@ -61,7 +64,7 @@ public class HttpsUtils { private static SSLContextBuilder sslContextBuilder = null; public static final int DEFUALT_TIMEOUT = 30000; - static{ + static { try { sslContextBuilder = new SSLContextBuilder(); sslContextBuilder.loadTrustMaterial(null, new TrustStrategy() { @@ -89,12 +92,12 @@ public class HttpsUtils { } public static HttpResponse post(HttpPost httpPost, Map header, Map param, - HttpEntity entity, CloseableHttpClient httpClient) throws CorrelationException { + HttpEntity entity, CloseableHttpClient httpClient) throws CorrelationException { return getPostAndPutResponse(httpPost, header, param, entity, httpClient); } public static HttpResponse put(HttpPut httpPut, Map header, Map param, - HttpEntity entity, CloseableHttpClient httpClient) throws CorrelationException { + HttpEntity entity, CloseableHttpClient httpClient) throws CorrelationException { return getPostAndPutResponse(httpPut, header, param, entity, httpClient); } @@ -124,8 +127,8 @@ public class HttpsUtils { } private static HttpResponse getPostAndPutResponse(HttpEntityEnclosingRequestBase requestBase, - Map header, Map param, HttpEntity entity, - CloseableHttpClient httpClient) throws CorrelationException { + Map header, Map param, HttpEntity entity, + CloseableHttpClient httpClient) throws CorrelationException { try { addHeaders(header, requestBase); addParams(param, requestBase); @@ -139,7 +142,7 @@ public class HttpsUtils { } private static HttpResponse getGetAndDeleteResponse(HttpRequestBase requestBase, - Map header, CloseableHttpClient httpClient) throws CorrelationException { + Map header, CloseableHttpClient httpClient) throws CorrelationException { try { addHeaders(header, requestBase); return executeRequest(httpClient, requestBase); @@ -169,23 +172,39 @@ public class HttpsUtils { try { httpResponse = httpClient.execute(httpRequest); } catch (Exception e) { - throw new CorrelationException("Failed to get data from server" ,e); + throw new CorrelationException("Failed to get data from server", e); } return httpResponse; } - public static CloseableHttpClient getHttpClient(int timeout) { + public static CloseableHttpClient getConditionalHttpsClient(int timeout) { + HttpClientBuilder builder = getHttpClientBuilder(timeout); + if (isHttpsEnabled()) { + builder.setSSLSocketFactory(sslConnectionSocketFactory); + } + + return builder.build(); + } + + public static CloseableHttpClient getHttpsClient(int timeout) { + HttpClientBuilder builder = getHttpClientBuilder(timeout); + return builder.setSSLSocketFactory(sslConnectionSocketFactory).build(); + } + + private static HttpClientBuilder getHttpClientBuilder(int timeout) { RequestConfig defaultRequestConfig = RequestConfig.custom() .setSocketTimeout(timeout) .setConnectTimeout(timeout) .setConnectionRequestTimeout(timeout) .build(); - CloseableHttpClient httpClient = HttpClients.custom() + + return HttpClients.custom() .setDefaultRequestConfig(defaultRequestConfig) - .setSSLSocketFactory(sslConnectionSocketFactory) .setConnectionManager(connectionManager) - .setConnectionManagerShared(true) - .build(); - return httpClient; + .setConnectionManagerShared(true); + } + + public static boolean isHttpsEnabled() { + return Boolean.valueOf(MicroServiceConfig.getEnv("ENABLE_ENCRYPT")); } } diff --git a/holmes-actions/src/test/java/org/onap/holmes/common/aai/AaiQueryTest.java b/holmes-actions/src/test/java/org/onap/holmes/common/aai/AaiQueryTest.java index 9f211d9..7ce3fcf 100644 --- a/holmes-actions/src/test/java/org/onap/holmes/common/aai/AaiQueryTest.java +++ b/holmes-actions/src/test/java/org/onap/holmes/common/aai/AaiQueryTest.java @@ -16,6 +16,7 @@ package org.onap.holmes.common.aai; import static org.easymock.EasyMock.anyObject; +import static org.easymock.EasyMock.expect; import static org.hamcrest.core.IsEqual.equalTo; import static org.junit.Assert.assertThat; import static org.powermock.api.mockito.PowerMockito.when; @@ -26,6 +27,7 @@ import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.easymock.EasyMock; +import org.junit.BeforeClass; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; @@ -55,6 +57,11 @@ public class AaiQueryTest { private AaiQuery aaiQuery; private AaiResponseUtil aaiResponseUtil; + @BeforeClass + static public void before() { + System.setProperty("ENABLE_ENCRYPT", "true"); + } + @Test public void testAaiQuery_getAaiVnfData_ok() throws Exception { PowerMock.resetAll(); @@ -93,7 +100,7 @@ public class AaiQueryTest { aaiQuery = PowerMock.createPartialMock(AaiQuery.class, "getVmResourceLinks"); aaiResponseUtil = new AaiResponseUtil(); Whitebox.setInternalState(aaiQuery, "aaiResponseUtil", aaiResponseUtil); - PowerMockito.mockStatic(HttpsUtils.class); + PowerMock.mockStatic(HttpsUtils.class); Map headers = new HashMap<>(); headers.put("X-TransactionId", AaiConfig.X_TRANSACTION_ID); headers.put("X-FromAppId", AaiConfig.X_FROMAPP_ID); @@ -102,11 +109,12 @@ public class AaiQueryTest { String url = "https://aai.onap:8443/aai/v11/cloud-infrastructure"; HttpResponse httpResponse = PowerMock.createMock(HttpResponse.class); CloseableHttpClient httpClient = PowerMock.createMock(CloseableHttpClient.class); - when(HttpsUtils.getHttpClient(30000)).thenReturn(httpClient); + expect(HttpsUtils.getHttpsClient(30000)).andReturn(httpClient); HttpGet httpGet = new HttpGet(url); PowerMock.expectNew(HttpGet.class, url).andReturn(httpGet); - when(HttpsUtils.get(httpGet, headers, httpClient)).thenReturn(httpResponse); - when(HttpsUtils.extractResponseEntity(httpResponse)).thenReturn("{}"); + expect(HttpsUtils.get(anyObject(HttpGet.class), anyObject(Map.class), + anyObject(CloseableHttpClient.class))).andReturn(httpResponse); + expect(HttpsUtils.extractResponseEntity(httpResponse)).andReturn("{}"); PowerMock.expectPrivate(aaiQuery, "getVmResourceLinks", "test1", "test2") .andReturn("/aai/v11/cloud-infrastructure"); @@ -120,7 +128,6 @@ public class AaiQueryTest { } @Test - public void testAaiQuery_getAaiVmData_httpsutils_exception() throws Exception { PowerMock.resetAll(); thrown.expect(CorrelationException.class); @@ -130,7 +137,7 @@ public class AaiQueryTest { aaiResponseUtil = new AaiResponseUtil(); Whitebox.setInternalState(aaiQuery, "aaiResponseUtil", aaiResponseUtil); - PowerMockito.mockStatic(HttpsUtils.class); + PowerMock.mockStatic(HttpsUtils.class); Map headers = new HashMap<>(); headers.put("X-TransactionId", AaiConfig.X_TRANSACTION_ID); headers.put("X-FromAppId", AaiConfig.X_FROMAPP_ID); @@ -138,11 +145,12 @@ public class AaiQueryTest { headers.put("Accept", "application/json"); String url = "https://aai.onap:8443/aai/v11/cloud-infrastructure"; CloseableHttpClient httpClient = PowerMock.createMock(CloseableHttpClient.class); - when(HttpsUtils.getHttpClient(30000)).thenReturn(httpClient); + EasyMock.expect(HttpsUtils.getHttpsClient(30000)).andReturn(httpClient); HttpGet httpGet = new HttpGet(url); PowerMock.expectNew(HttpGet.class, url).andReturn(httpGet); - when(HttpsUtils.get(httpGet, headers, httpClient)).thenThrow(new CorrelationException("")); - PowerMockito.mockStatic(MicroServiceConfig.class); + EasyMock.expect(HttpsUtils.get(anyObject(HttpGet.class), anyObject(Map.class), + anyObject(CloseableHttpClient.class))).andThrow(new CorrelationException("")); + PowerMock.mockStatic(MicroServiceConfig.class); PowerMock.expectPrivate(aaiQuery, "getVmResourceLinks", "test1", "test2") .andReturn("/aai/v11/cloud-infrastructure"); PowerMock.expectPrivate(httpClient,"close"); @@ -214,7 +222,7 @@ public class AaiQueryTest { public void testAaiQuery_getResponse_ok() throws Exception { PowerMock.resetAll(); aaiQuery = new AaiQuery(); - PowerMockito.mockStatic(HttpsUtils.class); + PowerMock.mockStatic(HttpsUtils.class); Map headers = new HashMap<>(); headers.put("X-TransactionId", AaiConfig.X_TRANSACTION_ID); headers.put("X-FromAppId", AaiConfig.X_FROMAPP_ID); @@ -224,11 +232,12 @@ public class AaiQueryTest { HttpResponse httpResponse = PowerMock.createMock(HttpResponse.class); CloseableHttpClient httpClient = PowerMock.createMock(CloseableHttpClient.class); - when(HttpsUtils.getHttpClient(30000)).thenReturn(httpClient); + expect(HttpsUtils.getHttpsClient(30000)).andReturn(httpClient); HttpGet httpGet = new HttpGet(url); PowerMock.expectNew(HttpGet.class, url).andReturn(httpGet); - when(HttpsUtils.get(httpGet, headers, httpClient)).thenReturn(httpResponse); - when(HttpsUtils.extractResponseEntity(httpResponse)).thenReturn(""); + expect(HttpsUtils.get(anyObject(HttpGet.class), anyObject(Map.class), + anyObject(CloseableHttpClient.class))).andReturn(httpResponse); + expect(HttpsUtils.extractResponseEntity(httpResponse)).andReturn(""); PowerMock.expectPrivate(httpClient, "close"); EasyMock.expectLastCall(); @@ -246,7 +255,7 @@ public class AaiQueryTest { thrown.expectMessage("Failed to get data from aai"); aaiQuery = new AaiQuery(); - PowerMockito.mockStatic(HttpsUtils.class); + PowerMock.mockStatic(HttpsUtils.class); Map headers = new HashMap<>(); headers.put("X-TransactionId", AaiConfig.X_TRANSACTION_ID); headers.put("X-FromAppId", AaiConfig.X_FROMAPP_ID); @@ -254,10 +263,10 @@ public class AaiQueryTest { headers.put("Accept", "application/json"); String url = "host_url"; CloseableHttpClient httpClient = PowerMock.createMock(CloseableHttpClient.class); - when(HttpsUtils.getHttpClient(30000)).thenReturn(httpClient); + expect(HttpsUtils.getHttpsClient(30000)).andReturn(httpClient); HttpGet httpGet = new HttpGet(url); PowerMock.expectNew(HttpGet.class, url).andReturn(httpGet); - when(HttpsUtils.get(httpGet, headers, httpClient)).thenThrow(new CorrelationException("")); + expect(HttpsUtils.get(httpGet, headers, httpClient)).andThrow(new CorrelationException("")); PowerMock.expectPrivate(httpClient, "close"); EasyMock.expectLastCall(); PowerMock.replayAll(); diff --git a/holmes-actions/src/test/java/org/onap/holmes/common/utils/HttpsUtilsTest.java b/holmes-actions/src/test/java/org/onap/holmes/common/utils/HttpsUtilsTest.java index 3ff5dda..db9423a 100644 --- a/holmes-actions/src/test/java/org/onap/holmes/common/utils/HttpsUtilsTest.java +++ b/holmes-actions/src/test/java/org/onap/holmes/common/utils/HttpsUtilsTest.java @@ -26,20 +26,16 @@ import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.StatusLine; -import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpDelete; -import org.apache.http.client.methods.HttpEntityEnclosingRequestBase; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.methods.HttpPut; import org.apache.http.client.methods.HttpRequestBase; -import org.apache.http.conn.ssl.SSLConnectionSocketFactory; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.impl.client.HttpClients; -import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; import org.easymock.EasyMock; import org.junit.Before; import org.junit.Rule; @@ -77,7 +73,7 @@ public class HttpsUtilsTest { String url = "host"; Map header = new HashMap<>(); header.put("accept", "application/json"); - CloseableHttpClient httpClient = HttpsUtils.getHttpClient(HttpsUtils.DEFUALT_TIMEOUT); + CloseableHttpClient httpClient = HttpsUtils.getConditionalHttpsClient(HttpsUtils.DEFUALT_TIMEOUT); HttpGet httpRequestBase = new HttpGet(url); HttpResponse httpResponse = HttpsUtils.get(httpRequestBase, header, httpClient); String response = HttpsUtils.extractResponseEntity(httpResponse); @@ -121,7 +117,7 @@ public class HttpsUtilsTest { Map header = new HashMap<>(); header.put("accept", "application/json"); HttpDelete httpRequestBase = new HttpDelete(url); - CloseableHttpClient httpClient = HttpsUtils.getHttpClient(HttpsUtils.DEFUALT_TIMEOUT); + CloseableHttpClient httpClient = HttpsUtils.getConditionalHttpsClient(HttpsUtils.DEFUALT_TIMEOUT); HttpResponse httpResponse = HttpsUtils.delete(httpRequestBase, header, httpClient); String response = HttpsUtils.extractResponseEntity(httpResponse); assertThat(response, equalTo("")); @@ -165,7 +161,7 @@ public class HttpsUtilsTest { header.put("accept", "application/json"); Map para = new HashMap<>(); para.put("tset", "1111"); - CloseableHttpClient httpClient = HttpsUtils.getHttpClient(HttpsUtils.DEFUALT_TIMEOUT); + CloseableHttpClient httpClient = HttpsUtils.getConditionalHttpsClient(HttpsUtils.DEFUALT_TIMEOUT); HttpPost httpPost = new HttpPost(url); HttpResponse httpResponse = HttpsUtils.post(httpPost, header, para, null, httpClient); String response = HttpsUtils.extractResponseEntity(httpResponse); @@ -212,7 +208,7 @@ public class HttpsUtilsTest { header.put("accept", "application/json"); Map para = new HashMap<>(); para.put("tset", "1111"); - CloseableHttpClient httpClient = HttpsUtils.getHttpClient(HttpsUtils.DEFUALT_TIMEOUT); + CloseableHttpClient httpClient = HttpsUtils.getConditionalHttpsClient(HttpsUtils.DEFUALT_TIMEOUT); HttpPut httpPut = new HttpPut(url); HttpResponse httpResponse = HttpsUtils.put(httpPut, header, para, null, httpClient); String response = HttpsUtils.extractResponseEntity(httpResponse); @@ -265,14 +261,14 @@ public class HttpsUtilsTest { public void testHttpsUtil_getHttpClient_exception() throws Exception { PowerMock.resetAll(); thrown.expect(Exception.class); - Whitebox.invokeMethod(HttpsUtils.class, "getHttpClient"); + Whitebox.invokeMethod(HttpsUtils.class, "getConditionalHttpsClient"); PowerMock.verifyAll(); } @Test public void testHttpsUtil_getHttpClient_ok() throws Exception { PowerMock.resetAll(); - HttpsUtils.getHttpClient(HttpsUtils.DEFUALT_TIMEOUT); + HttpsUtils.getConditionalHttpsClient(HttpsUtils.DEFUALT_TIMEOUT); PowerMock.verifyAll(); } diff --git a/pom.xml b/pom.xml index 8dc1298..9572dfc 100644 --- a/pom.xml +++ b/pom.xml @@ -20,7 +20,7 @@ holmes-common-parent pom - 1.2.7 + 1.2.8 holmes-common holmes-actions diff --git a/version.properties b/version.properties index ea29878..c2bb012 100644 --- a/version.properties +++ b/version.properties @@ -4,7 +4,7 @@ major=1 minor=2 -patch=7 +patch=8 base_version=${major}.${minor}.${patch} -- 2.16.6