fix https timeout get connection 61/42961/2
authorShiwei Tian <tian.shiwei@zte.com.cn>
Mon, 16 Apr 2018 08:28:18 +0000 (16:28 +0800)
committerShiwei Tian <tian.shiwei@zte.com.cn>
Mon, 16 Apr 2018 08:38:49 +0000 (16:38 +0800)
Issue-ID: HOLMES-104

Change-Id: Ib79bb3dea470fd922f2e8fc906f33d8d238cd62e
Signed-off-by: Shiwei Tian <tian.shiwei@zte.com.cn>
holmes-actions/src/main/java/org/onap/holmes/common/aai/AaiQuery.java
holmes-actions/src/main/java/org/onap/holmes/common/dmaap/Publisher.java
holmes-actions/src/main/java/org/onap/holmes/common/utils/HttpsUtils.java
holmes-actions/src/test/java/org/onap/holmes/common/aai/AaiQueryTest.java
holmes-actions/src/test/java/org/onap/holmes/common/dmaap/PublisherTest.java
holmes-actions/src/test/java/org/onap/holmes/common/utils/HttpsUtilsTest.java
pom.xml

index b3f3f3a..a13c627 100644 (file)
@@ -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();
index adddd65..b3a9214 100644 (file)
@@ -17,6 +17,8 @@ package org.onap.holmes.common.dmaap;
 \r
 import java.io.IOException;\r
 import lombok.extern.slf4j.Slf4j;\r
+import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;\r
+import org.apache.http.client.methods.HttpPost;\r
 import org.apache.http.impl.client.CloseableHttpClient;\r
 import org.onap.holmes.common.dmaap.entity.PolicyMsg;\r
 import org.onap.holmes.common.exception.CorrelationException;\r
@@ -55,12 +57,14 @@ public class Publisher {
         headers.put("Accept", MediaType.APPLICATION_JSON);\r
         headers.put("Content-Type", MediaType.APPLICATION_JSON);\r
         CloseableHttpClient httpClient = null;\r
+        HttpPost httpPost = new HttpPost(url);\r
         try {\r
             httpClient = HttpsUtils.getHttpClient(HttpsUtils.DEFUALT_TIMEOUT);\r
-            httpResponse = HttpsUtils.post(url, headers, new HashMap<>(), new StringEntity(content, "utf-8"), httpClient);\r
+            httpResponse = HttpsUtils.post(httpPost, headers, new HashMap<>(), new StringEntity(content, "utf-8"), httpClient);\r
         } catch (Exception e) {\r
             throw new CorrelationException("Failed to connect to DCAE.", e);\r
         } finally {\r
+            httpPost.releaseConnection();\r
             if (httpClient != null) {\r
                 try {\r
                     httpClient.close();\r
index 48ed0ae..2df4d55 100644 (file)
@@ -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<String, String> header, Map<String, String> 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<String, String> header, CloseableHttpClient httpClient) throws CorrelationException {
+        return getGetAndDeleteResponse(httpGet, header, httpClient);
     }
 
-    public static HttpResponse put(String url, Map<String, String> header, Map<String, String> param,
+    public static HttpResponse post(HttpPost httpPost, Map<String, String> header, Map<String, String> 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<String, String> 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<String, String> header, Map<String, String> param,
+            HttpEntity entity, CloseableHttpClient httpClient) throws CorrelationException {
+        return getPostAndPutResponse(httpPut, header, param, entity, httpClient);
     }
 
-    public static HttpResponse delete(String url, Map<String, String> 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<String, String> header, CloseableHttpClient httpClient) throws CorrelationException {
+        return getGetAndDeleteResponse(httpDelete, header, httpClient);
     }
 
     private static void addParams(Map<String, String> param, HttpEntityEnclosingRequestBase requestBase) {
@@ -162,6 +123,31 @@ public class HttpsUtils {
         return httpRequestBase;
     }
 
+    private static HttpResponse getPostAndPutResponse(HttpEntityEnclosingRequestBase requestBase,
+            Map<String, String> header, Map<String, String> 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<String, String> 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 = "";
index f6488c2..42becaa 100644 (file)
@@ -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();
index 95bde25..be9f74f 100644 (file)
@@ -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);
index 087c1d3..3ff5dda 100644 (file)
@@ -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<String, String> 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<String, String> 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<String, String> 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<String, String> 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<String, String> header = new HashMap<>();
         header.put("accept", "application/json");
         Map<String, String> 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<String, String> header = new HashMap<>();
         header.put("accept", "application/json");
         Map<String, String> 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 (file)
--- a/pom.xml
+++ b/pom.xml
@@ -51,7 +51,7 @@
             <dependency>\r
                 <groupId>org.onap.msb.java-sdk</groupId>\r
                 <artifactId>msb-java-sdk</artifactId>\r
-                <version>1.1.1-SNAPSHOT</version>\r
+                <version>1.1.1</version>\r
             </dependency>\r
             <dependency>\r
                 <groupId>org.glassfish.jersey.core</groupId>\r