From: Shiwei Tian Date: Mon, 16 Apr 2018 08:28:18 +0000 (+0800) Subject: fix https timeout get connection X-Git-Tag: 1.2.0~19 X-Git-Url: https://gerrit.onap.org/r/gitweb?p=holmes%2Fcommon.git;a=commitdiff_plain;h=3356fb82b20ebe7209522e4e009dd6aea5ed1802 fix https timeout get connection Issue-ID: HOLMES-104 Change-Id: Ib79bb3dea470fd922f2e8fc906f33d8d238cd62e Signed-off-by: Shiwei Tian --- 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 b3f3f3a..a13c627 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 @@ -20,6 +20,8 @@ import java.util.Map; import javax.inject.Inject; import lombok.extern.slf4j.Slf4j; import org.apache.http.HttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpRequestBase; import org.apache.http.impl.client.CloseableHttpClient; import org.jvnet.hk2.annotations.Service; import org.onap.holmes.common.aai.config.AaiConfig; @@ -142,13 +144,15 @@ public class AaiQuery { private String getResponse(String url) throws CorrelationException { String response; CloseableHttpClient httpClient = null; + HttpGet httpGet = new HttpGet(url); try { httpClient = HttpsUtils.getHttpClient(HttpsUtils.DEFUALT_TIMEOUT); - HttpResponse httpResponse = HttpsUtils.get(url, getHeaders(), httpClient); + HttpResponse httpResponse = HttpsUtils.get(httpGet, getHeaders(), httpClient); response = HttpsUtils.extractResponseEntity(httpResponse); } catch (Exception e) { throw new CorrelationException("Failed to get data from aai", e); } finally { + httpGet.releaseConnection(); if (httpClient != null) { try { httpClient.close(); 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 adddd65..b3a9214 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,6 +17,8 @@ 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; @@ -55,12 +57,14 @@ public class Publisher { headers.put("Accept", MediaType.APPLICATION_JSON); headers.put("Content-Type", MediaType.APPLICATION_JSON); CloseableHttpClient httpClient = null; + HttpPost httpPost = new HttpPost(url); try { httpClient = HttpsUtils.getHttpClient(HttpsUtils.DEFUALT_TIMEOUT); - httpResponse = HttpsUtils.post(url, headers, new HashMap<>(), new StringEntity(content, "utf-8"), httpClient); + 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); } finally { + httpPost.releaseConnection(); if (httpClient != null) { try { httpClient.close(); 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 48ed0ae..2df4d55 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 @@ -18,6 +18,7 @@ import java.io.IOException; import java.security.cert.CertificateException; import java.security.cert.X509Certificate; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; import lombok.extern.slf4j.Slf4j; @@ -83,62 +84,22 @@ public class HttpsUtils { } } - public static HttpResponse post(String url, Map header, Map param, - HttpEntity entity, CloseableHttpClient httpClient) throws CorrelationException { - HttpResponse response; - HttpPost httpPost = new HttpPost(url); - try { - addHeaders(header, httpPost); - addParams(param, httpPost); - if (entity != null) { - httpPost.setEntity(entity); - } - response = executeRequest(httpClient, httpPost); - } catch (Exception e) { - throw new CorrelationException("Failed to query data from server through POST method!"); - } - return response; + public static HttpResponse get(HttpGet httpGet, Map header, CloseableHttpClient httpClient) throws CorrelationException { + return getGetAndDeleteResponse(httpGet, header, httpClient); } - public static HttpResponse put(String url, Map header, Map param, + public static HttpResponse post(HttpPost httpPost, Map header, Map param, HttpEntity entity, CloseableHttpClient httpClient) throws CorrelationException { - HttpResponse response; - HttpPut httpPut = new HttpPut(url); - try { - addHeaders(header, httpPut); - addParams(param, httpPut); - if (entity != null) { - httpPut.setEntity(entity); - } - response = executeRequest(httpClient, httpPut); - } catch (Exception e) { - throw new CorrelationException("Failed to query data from server through PUT method!"); - } - return response; + return getPostAndPutResponse(httpPost, header, param, entity, httpClient); } - public static HttpResponse get(String url, Map header, CloseableHttpClient httpClient) throws CorrelationException { - HttpResponse response; - HttpGet httpGet = new HttpGet(url); - try { - addHeaders(header, httpGet); - response = executeRequest(httpClient, httpGet); - } catch (Exception e) { - throw new CorrelationException("Failed to query data from server through GET method!"); - } - return response; + public static HttpResponse put(HttpPut httpPut, Map header, Map param, + HttpEntity entity, CloseableHttpClient httpClient) throws CorrelationException { + return getPostAndPutResponse(httpPut, header, param, entity, httpClient); } - public static HttpResponse delete(String url, Map header, CloseableHttpClient httpClient) throws CorrelationException { - HttpResponse response; - HttpDelete httpDelete = new HttpDelete(url); - try { - addHeaders(header, httpDelete); - response = executeRequest(httpClient, httpDelete); - } catch (Exception e) { - throw new CorrelationException("Failed to query data from server through DELETE method!"); - } - return response; + public static HttpResponse delete(HttpDelete httpDelete, Map header, CloseableHttpClient httpClient) throws CorrelationException { + return getGetAndDeleteResponse(httpDelete, header, httpClient); } private static void addParams(Map param, HttpEntityEnclosingRequestBase requestBase) { @@ -162,6 +123,31 @@ public class HttpsUtils { return httpRequestBase; } + private static HttpResponse getPostAndPutResponse(HttpEntityEnclosingRequestBase requestBase, + Map header, Map param, HttpEntity entity, + CloseableHttpClient httpClient) throws CorrelationException { + try { + addHeaders(header, requestBase); + addParams(param, requestBase); + if (entity != null) { + requestBase.setEntity(entity); + } + return executeRequest(httpClient, requestBase); + } catch (Exception e) { + throw new CorrelationException("Failed to connect to server", e); + } + } + + private static HttpResponse getGetAndDeleteResponse(HttpRequestBase requestBase, + Map header, CloseableHttpClient httpClient) throws CorrelationException { + try { + addHeaders(header, requestBase); + return executeRequest(httpClient, requestBase); + } catch (Exception e) { + throw new CorrelationException("Failed to connect to server", e); + } + } + public static String extractResponseEntity(HttpResponse httpResponse) throws CorrelationException, IOException { String result = ""; 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 f6488c2..42becaa 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 @@ -23,6 +23,7 @@ import static org.powermock.api.mockito.PowerMockito.when; import java.util.HashMap; import java.util.Map; 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.Rule; @@ -42,7 +43,7 @@ import org.powermock.modules.junit4.PowerMockRunner; import org.powermock.reflect.Whitebox; -@PrepareForTest({AaiQuery.class, HttpsUtils.class, MicroServiceConfig.class}) +@PrepareForTest({AaiQuery.class, HttpsUtils.class, MicroServiceConfig.class, HttpGet.class}) @RunWith(PowerMockRunner.class) public class AaiQueryTest { @@ -100,7 +101,9 @@ public class AaiQueryTest { HttpResponse httpResponse = PowerMock.createMock(HttpResponse.class); CloseableHttpClient httpClient = PowerMock.createMock(CloseableHttpClient.class); when(HttpsUtils.getHttpClient(30000)).thenReturn(httpClient); - when(HttpsUtils.get(url, headers, httpClient)).thenReturn(httpResponse); + 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("{}"); PowerMockito.mockStatic(MicroServiceConfig.class); @@ -136,7 +139,9 @@ public class AaiQueryTest { String url = "http://10.96.33.33/api/aai-cloudInfrastructure/v11"; CloseableHttpClient httpClient = PowerMock.createMock(CloseableHttpClient.class); when(HttpsUtils.getHttpClient(30000)).thenReturn(httpClient); - when(HttpsUtils.get(url, headers, httpClient)).thenThrow(new CorrelationException("")); + 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); when(MicroServiceConfig.getMsbServerAddrWithHttpPrefix()).thenReturn("http://10.96.33.33:80"); PowerMock.expectPrivate(aaiQuery, "getVmResourceLinks", "test1", "test2") @@ -221,7 +226,9 @@ public class AaiQueryTest { HttpResponse httpResponse = PowerMock.createMock(HttpResponse.class); CloseableHttpClient httpClient = PowerMock.createMock(CloseableHttpClient.class); when(HttpsUtils.getHttpClient(30000)).thenReturn(httpClient); - when(HttpsUtils.get(url, headers, httpClient)).thenReturn(httpResponse); + 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(""); PowerMock.expectPrivate(httpClient, "close"); EasyMock.expectLastCall(); @@ -249,7 +256,9 @@ public class AaiQueryTest { String url = "host_url"; CloseableHttpClient httpClient = PowerMock.createMock(CloseableHttpClient.class); when(HttpsUtils.getHttpClient(30000)).thenReturn(httpClient); - when(HttpsUtils.get(url, headers, httpClient)).thenThrow(new CorrelationException("")); + HttpGet httpGet = new HttpGet(url); + PowerMock.expectNew(HttpGet.class, url).andReturn(httpGet); + when(HttpsUtils.get(httpGet, headers, httpClient)).thenThrow(new CorrelationException("")); PowerMock.expectPrivate(httpClient, "close"); EasyMock.expectLastCall(); PowerMock.replayAll(); diff --git a/holmes-actions/src/test/java/org/onap/holmes/common/dmaap/PublisherTest.java b/holmes-actions/src/test/java/org/onap/holmes/common/dmaap/PublisherTest.java index 95bde25..be9f74f 100644 --- a/holmes-actions/src/test/java/org/onap/holmes/common/dmaap/PublisherTest.java +++ b/holmes-actions/src/test/java/org/onap/holmes/common/dmaap/PublisherTest.java @@ -29,6 +29,8 @@ import javax.ws.rs.core.Response; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.StatusLine; +import org.apache.http.client.methods.HttpEntityEnclosingRequestBase; +import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.easymock.EasyMock; @@ -75,7 +77,7 @@ public class PublisherTest { PowerMockito.mockStatic(HttpsUtils.class); HttpResponse httpResponse = PowerMockito.mock(HttpResponse.class); PowerMockito.when(HttpsUtils - .post(Matchers.eq("http://localhost/dmaapTopic"), Matchers.any(HashMap.class), + .post(Matchers.any(HttpPost.class), Matchers.any(HashMap.class), Matchers.any(HashMap.class), Matchers.any(StringEntity.class), Matchers.any(CloseableHttpClient.class))).thenReturn(httpResponse); StatusLine statusLine = PowerMockito.mock(StatusLine.class); 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 087c1d3..3ff5dda 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 @@ -28,6 +28,11 @@ 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; @@ -68,12 +73,13 @@ public class HttpsUtilsTest { public void testHttpsUtil_get_excepiton() throws Exception { PowerMock.resetAll(); thrown.expect(CorrelationException.class); - thrown.expectMessage("Failed to query data from server through GET method!"); + thrown.expectMessage("Failed to connect to server"); String url = "host"; Map header = new HashMap<>(); header.put("accept", "application/json"); CloseableHttpClient httpClient = HttpsUtils.getHttpClient(HttpsUtils.DEFUALT_TIMEOUT); - HttpResponse httpResponse = HttpsUtils.get(url, header, httpClient); + HttpGet httpRequestBase = new HttpGet(url); + HttpResponse httpResponse = HttpsUtils.get(httpRequestBase, header, httpClient); String response = HttpsUtils.extractResponseEntity(httpResponse); assertThat(response, equalTo("")); } @@ -97,8 +103,8 @@ public class HttpsUtilsTest { Map header = new HashMap<>(); header.put("accept", "application/json"); - HttpEntity entity = new StringEntity("Test"); - HttpResponse httpResponse = HttpsUtils.get(url, header, httpClient); + HttpGet httpRequestBase = new HttpGet(url); + HttpResponse httpResponse = HttpsUtils.get(httpRequestBase, header, httpClient); String res = HttpsUtils.extractResponseEntity(httpResponse); PowerMock.verifyAll(); @@ -110,12 +116,13 @@ public class HttpsUtilsTest { public void testHttpsUtil_delete_excepiton() throws Exception { PowerMock.resetAll(); thrown.expect(CorrelationException.class); - thrown.expectMessage("Failed to query data from server through DELETE method!"); + thrown.expectMessage("Failed to connect to server"); String url = "host"; Map header = new HashMap<>(); header.put("accept", "application/json"); + HttpDelete httpRequestBase = new HttpDelete(url); CloseableHttpClient httpClient = HttpsUtils.getHttpClient(HttpsUtils.DEFUALT_TIMEOUT); - HttpResponse httpResponse = HttpsUtils.delete(url, header, httpClient); + HttpResponse httpResponse = HttpsUtils.delete(httpRequestBase, header, httpClient); String response = HttpsUtils.extractResponseEntity(httpResponse); assertThat(response, equalTo("")); } @@ -139,8 +146,8 @@ public class HttpsUtilsTest { Map header = new HashMap<>(); header.put("accept", "application/json"); - HttpEntity entity = new StringEntity("Test"); - HttpResponse httpResponse = HttpsUtils.delete(url, header, httpClient); + HttpDelete httpRequestBase = new HttpDelete(url); + HttpResponse httpResponse = HttpsUtils.delete(httpRequestBase, header, httpClient); String res = HttpsUtils.extractResponseEntity(httpResponse); PowerMock.verifyAll(); @@ -152,14 +159,15 @@ public class HttpsUtilsTest { public void testHttpsUtil_post_excepiton() throws Exception { PowerMock.resetAll(); thrown.expect(CorrelationException.class); - thrown.expectMessage("Failed to query data from server through POST method!"); + thrown.expectMessage("Failed to connect to server"); String url = "host"; Map header = new HashMap<>(); header.put("accept", "application/json"); Map para = new HashMap<>(); para.put("tset", "1111"); CloseableHttpClient httpClient = HttpsUtils.getHttpClient(HttpsUtils.DEFUALT_TIMEOUT); - HttpResponse httpResponse = HttpsUtils.post(url, header, para, null, httpClient); + HttpPost httpPost = new HttpPost(url); + HttpResponse httpResponse = HttpsUtils.post(httpPost, header, para, null, httpClient); String response = HttpsUtils.extractResponseEntity(httpResponse); assertThat(response, equalTo("")); } @@ -186,7 +194,8 @@ public class HttpsUtilsTest { para.put("tset", "1111"); HttpEntity entity = new StringEntity("Test"); - HttpResponse httpResponse = HttpsUtils.post(url, header, para, entity, httpClient); + HttpPost httpPost = new HttpPost(url); + HttpResponse httpResponse = HttpsUtils.post(httpPost, header, para, entity, httpClient); String res = HttpsUtils.extractResponseEntity(httpResponse); PowerMock.verifyAll(); @@ -197,14 +206,15 @@ public class HttpsUtilsTest { @Test public void testHttpsUtil_put_excepiton() throws Exception { thrown.expect(CorrelationException.class); - thrown.expectMessage("Failed to query data from server through PUT method!"); + thrown.expectMessage("Failed to connect to server"); String url = "host"; Map header = new HashMap<>(); header.put("accept", "application/json"); Map para = new HashMap<>(); para.put("tset", "1111"); CloseableHttpClient httpClient = HttpsUtils.getHttpClient(HttpsUtils.DEFUALT_TIMEOUT); - HttpResponse httpResponse = HttpsUtils.put(url, header, para, null, httpClient); + HttpPut httpPut = new HttpPut(url); + HttpResponse httpResponse = HttpsUtils.put(httpPut, header, para, null, httpClient); String response = HttpsUtils.extractResponseEntity(httpResponse); assertThat(response, equalTo("")); } @@ -231,7 +241,8 @@ public class HttpsUtilsTest { para.put("tset", "1111"); HttpEntity entity = new StringEntity("Test"); - HttpResponse httpResponse = HttpsUtils.put(url, header, para, entity, httpClient); + HttpPut httpPut = new HttpPut(url); + HttpResponse httpResponse = HttpsUtils.put(httpPut, header, para, entity, httpClient); String res = HttpsUtils.extractResponseEntity(httpResponse); PowerMock.verifyAll(); diff --git a/pom.xml b/pom.xml index a958d71..02a7adb 100644 --- a/pom.xml +++ b/pom.xml @@ -51,7 +51,7 @@ org.onap.msb.java-sdk msb-java-sdk - 1.1.1-SNAPSHOT + 1.1.1 org.glassfish.jersey.core