Added unit test case for ProviderOperations 38/78238/5
authorLathishbabu Ganesan <lathishbabu.ganesan@ericsson.com>
Mon, 11 Feb 2019 17:23:45 +0000 (12:23 -0500)
committerTakamune Cho <takamune.cho@att.com>
Tue, 12 Feb 2019 19:09:20 +0000 (19:09 +0000)
Increased the coverage from 0% to 86%

Issue-ID: APPC-1404
Change-Id: Ic9fdfe59c4dc60e57bdca1a501ac99a9207eb539
Signed-off-by: Lathishbabu Ganesan <lathishbabu.ganesan@ericsson.com>
appc-event-listener/appc-event-listener-bundle/src/main/java/org/onap/appc/listener/demo/impl/ProviderOperations.java
appc-event-listener/appc-event-listener-bundle/src/main/java/org/onap/appc/listener/util/HttpClientUtil.java [new file with mode: 0644]
appc-event-listener/appc-event-listener-bundle/src/test/java/org/onap/appc/listener/demo/impl/TestProviderOperations.java [new file with mode: 0644]

index 4b3ffcc..537f3a7 100644 (file)
@@ -6,6 +6,8 @@
  * ================================================================================
  * Copyright (C) 2017 Amdocs
  * =============================================================================
+ * Modifications Copyright (C) 2019 Ericsson
+ * =============================================================================
  * 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
@@ -26,44 +28,18 @@ package org.onap.appc.listener.demo.impl;
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
 import java.net.MalformedURLException;
-import java.net.Socket;
 import java.net.URL;
-import java.net.UnknownHostException;
-import java.security.KeyManagementException;
-import java.security.KeyStore;
-import java.security.KeyStoreException;
-import java.security.NoSuchAlgorithmException;
-import java.security.UnrecoverableKeyException;
-import java.security.cert.CertificateException;
-import java.security.cert.X509Certificate;
-
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.TrustManager;
-import javax.net.ssl.X509TrustManager;
-
 import org.apache.commons.codec.binary.Base64;
 import org.apache.commons.io.IOUtils;
 import org.apache.http.HttpResponse;
-import org.apache.http.HttpVersion;
 import org.apache.http.client.HttpClient;
 import org.apache.http.client.methods.HttpPost;
-import org.apache.http.conn.ClientConnectionManager;
-import org.apache.http.conn.scheme.PlainSocketFactory;
-import org.apache.http.conn.scheme.Scheme;
-import org.apache.http.conn.scheme.SchemeRegistry;
-import org.apache.http.conn.ssl.SSLSocketFactory;
 import org.apache.http.entity.StringEntity;
-import org.apache.http.impl.client.DefaultHttpClient;
-import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
-import org.apache.http.params.BasicHttpParams;
-import org.apache.http.params.HttpParams;
-import org.apache.http.params.HttpProtocolParams;
-import org.apache.http.protocol.HTTP;
 import org.json.JSONObject;
 import org.onap.appc.exceptions.APPCException;
 import org.onap.appc.listener.demo.model.IncomingMessage;
+import org.onap.appc.listener.util.HttpClientUtil;
 import org.onap.appc.listener.util.Mapper;
-
 import com.att.eelf.configuration.EELFLogger;
 import com.att.eelf.configuration.EELFManager;
 
@@ -120,7 +96,7 @@ public class ProviderOperations {
             throw new APPCException(e);
         }
 
-        HttpClient client = getHttpClient();
+        HttpClient client = HttpClientUtil.getHttpClient(url.getProtocol());
 
         int httpCode = 0;
         String respBody = null;
@@ -215,79 +191,4 @@ public class ProviderOperations {
 
         return String.format(TEMPLATE, id, url, pgstreams);
     }
-
-    @SuppressWarnings("deprecation")
-    private static HttpClient getHttpClient() throws APPCException {
-        HttpClient client;
-        if (url.getProtocol().equals("https")) {
-            try {
-                KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
-                trustStore.load(null, null);
-                MySSLSocketFactory sf = new MySSLSocketFactory(trustStore);
-                sf.setHostnameVerifier(MySSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
-
-                HttpParams params = new BasicHttpParams();
-                HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
-                HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);
-
-                SchemeRegistry registry = new SchemeRegistry();
-                registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
-                registry.register(new Scheme("https", sf, 443));
-                registry.register(new Scheme("https", sf, 8443));
-                registry.register(new Scheme("http", sf, 8181));
-
-                ClientConnectionManager ccm = new ThreadSafeClientConnManager(params, registry);
-                client = new DefaultHttpClient(ccm, params);
-            } catch (Exception e) {
-                client = new DefaultHttpClient();
-            }
-        } else if (url.getProtocol().equals("http")) {
-            client = new DefaultHttpClient();
-        } else {
-            throw new APPCException(
-                "The provider.topology.url property is invalid. The url did not start with http[s]");
-        }
-        return client;
-    }
-
-    @SuppressWarnings("deprecation")
-    public static class MySSLSocketFactory extends SSLSocketFactory {
-        private SSLContext sslContext = SSLContext.getInstance("TLS");
-
-        public MySSLSocketFactory(KeyStore truststore) throws NoSuchAlgorithmException, KeyManagementException,
-                        KeyStoreException, UnrecoverableKeyException {
-            super(truststore);
-
-            TrustManager tm = new X509TrustManager() {
-                @Override
-                public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
-                }
-
-                @Override
-                public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
-                }
-
-                @Override
-                public X509Certificate[] getAcceptedIssuers() {
-                    return null;
-                }
-            };
-
-            sslContext.init(null, new TrustManager[] {
-                tm
-            }, null);
-        }
-
-        @Override
-        public Socket createSocket(Socket socket, String host, int port, boolean autoClose)
-            throws IOException, UnknownHostException {
-            return sslContext.getSocketFactory().createSocket(socket, host, port, autoClose);
-        }
-
-        @Override
-        public Socket createSocket() throws IOException {
-            return sslContext.getSocketFactory().createSocket();
-        }
-    }
-
 }
diff --git a/appc-event-listener/appc-event-listener-bundle/src/main/java/org/onap/appc/listener/util/HttpClientUtil.java b/appc-event-listener/appc-event-listener-bundle/src/main/java/org/onap/appc/listener/util/HttpClientUtil.java
new file mode 100644 (file)
index 0000000..dea6929
--- /dev/null
@@ -0,0 +1,126 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2019 Ericsson. All rights reserved.
+ * ================================================================================
+ * 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
+ * the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.appc.listener.util;
+
+import java.io.IOException;
+import java.net.Socket;
+import java.net.UnknownHostException;
+import java.security.KeyManagementException;
+import java.security.KeyStore;
+import java.security.KeyStoreException;
+import java.security.NoSuchAlgorithmException;
+import java.security.UnrecoverableKeyException;
+import java.security.cert.CertificateException;
+import java.security.cert.X509Certificate;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager;
+import org.apache.http.HttpVersion;
+import org.apache.http.client.HttpClient;
+import org.apache.http.conn.ClientConnectionManager;
+import org.apache.http.conn.scheme.PlainSocketFactory;
+import org.apache.http.conn.scheme.Scheme;
+import org.apache.http.conn.scheme.SchemeRegistry;
+import org.apache.http.conn.ssl.SSLSocketFactory;
+import org.apache.http.impl.client.DefaultHttpClient;
+import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
+import org.apache.http.params.BasicHttpParams;
+import org.apache.http.params.HttpParams;
+import org.apache.http.params.HttpProtocolParams;
+import org.apache.http.protocol.HTTP;
+import org.onap.appc.exceptions.APPCException;
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+
+@SuppressWarnings("deprecation")
+public class HttpClientUtil {
+  
+  private static final EELFLogger log = EELFManager.getInstance().getLogger(HttpClientUtil.class);
+
+  public static HttpClient getHttpClient(String protocol) throws APPCException {
+    HttpClient client;
+    if ("https".equals(protocol)) {
+      try {
+        KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
+        trustStore.load(null, null);
+        MySSLSocketFactory sf = new MySSLSocketFactory(trustStore);
+        sf.setHostnameVerifier(MySSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
+
+        HttpParams params = new BasicHttpParams();
+        HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
+        HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);
+
+        SchemeRegistry registry = new SchemeRegistry();
+        registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
+        registry.register(new Scheme("https", sf, 443));
+        registry.register(new Scheme("https", sf, 8443));
+        registry.register(new Scheme("http", sf, 8181));
+
+        ClientConnectionManager ccm = new ThreadSafeClientConnManager(params, registry);
+        client = new DefaultHttpClient(ccm, params);
+      } catch (Exception e) {
+        log.info("Creating Default Http Client with no params"+e.getMessage());
+        client = new DefaultHttpClient();
+      }
+    } else if ("http".equals(protocol)) {
+      client = new DefaultHttpClient();
+    } else {
+      throw new APPCException(
+          "The provider.topology.url property is invalid. The url did not start with http[s]");
+    }
+    return client;
+  }
+
+  private static class MySSLSocketFactory extends SSLSocketFactory {
+    private SSLContext sslContext = SSLContext.getInstance("TLS");
+
+    public MySSLSocketFactory(KeyStore truststore) throws NoSuchAlgorithmException,
+        KeyManagementException, KeyStoreException, UnrecoverableKeyException {
+      super(truststore);
+
+      TrustManager tm = new X509TrustManager() {
+        @Override
+        public void checkClientTrusted(X509Certificate[] chain, String authType)
+            throws CertificateException {}
+
+        @Override
+        public void checkServerTrusted(X509Certificate[] chain, String authType)
+            throws CertificateException {}
+
+        @Override
+        public X509Certificate[] getAcceptedIssuers() {
+          return null;
+        }
+      };
+
+      sslContext.init(null, new TrustManager[] {tm}, null);
+    }
+
+    @Override
+    public Socket createSocket(Socket socket, String host, int port, boolean autoClose)
+        throws IOException, UnknownHostException {
+      return sslContext.getSocketFactory().createSocket(socket, host, port, autoClose);
+    }
+
+    @Override
+    public Socket createSocket() throws IOException {
+      return sslContext.getSocketFactory().createSocket();
+    }
+  }
+}
diff --git a/appc-event-listener/appc-event-listener-bundle/src/test/java/org/onap/appc/listener/demo/impl/TestProviderOperations.java b/appc-event-listener/appc-event-listener-bundle/src/test/java/org/onap/appc/listener/demo/impl/TestProviderOperations.java
new file mode 100644 (file)
index 0000000..55b0f2c
--- /dev/null
@@ -0,0 +1,129 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2019 Ericsson. All rights reserved.
+ * ================================================================================
+ * 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
+ * the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.appc.listener.demo.impl;
+
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Matchers.anyObject;
+import static org.mockito.Mockito.when;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.nio.charset.StandardCharsets;
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpResponse;
+import org.apache.http.StatusLine;
+import org.apache.http.client.ClientProtocolException;
+import org.apache.http.client.HttpClient;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mockito;
+import org.mockito.internal.util.reflection.Whitebox;
+import org.onap.appc.exceptions.APPCException;
+import org.onap.appc.listener.demo.model.Action;
+import org.onap.appc.listener.demo.model.CommonMessage.CommonHeader;
+import org.onap.appc.listener.demo.model.CommonMessage.Payload;
+import org.onap.appc.listener.demo.model.IncomingMessage;
+import org.onap.appc.listener.util.HttpClientUtil;
+import org.powermock.api.mockito.PowerMockito;
+import org.powermock.core.classloader.annotations.PrepareForTest;
+import org.powermock.modules.junit4.PowerMockRunner;
+
+@RunWith(PowerMockRunner.class)
+@PrepareForTest(HttpClientUtil.class)
+public class TestProviderOperations {
+
+  private ProviderOperations providerOperations;
+  private IncomingMessage message;
+  private URL url;
+  private CommonHeader commonHeader;
+  private Payload payload;
+  private HttpClient httpClient;
+  private HttpResponse httpResponse;
+  private StatusLine statusLine;
+  private HttpEntity httpEntity;
+  private InputStream inputStream;
+  private String reponseMessage;
+
+  @Before
+  public void setUp() throws Exception {
+    reponseMessage = "{\"output\":{\"common-response-header\":{\"success\":true,\"reason\":\"\"}}}";
+    providerOperations = new ProviderOperations();
+    PowerMockito.mockStatic(HttpClientUtil.class);
+    httpClient = PowerMockito.mock(HttpClient.class);
+    httpResponse = PowerMockito.mock(HttpResponse.class);
+    statusLine = PowerMockito.mock(StatusLine.class);
+    httpEntity = PowerMockito.mock(HttpEntity.class);
+    inputStream = new ByteArrayInputStream(reponseMessage.getBytes(StandardCharsets.UTF_8));
+    message = Mockito.mock(IncomingMessage.class);
+    url = PowerMockito.mock(URL.class);
+    commonHeader = Mockito.mock(CommonHeader.class);
+    payload = Mockito.mock(Payload.class);
+    when(message.getAction()).thenReturn(Action.Evacuate);
+    when(message.getHeader()).thenReturn(commonHeader);
+    when(message.getPayload()).thenReturn(payload);
+    when(HttpClientUtil.getHttpClient("http")).thenReturn(httpClient);
+    when(httpClient.execute(anyObject())).thenReturn(httpResponse);
+    when(httpResponse.getStatusLine()).thenReturn(statusLine);
+    when(statusLine.getStatusCode()).thenReturn(200);
+    when(httpResponse.getEntity()).thenReturn(httpEntity);
+    when(httpEntity.getContent()).thenReturn(inputStream);
+    Whitebox.setInternalState(url, "protocol", "http");
+    Whitebox.setInternalState(providerOperations, "url", url);
+  }
+
+  @Test
+  public void testTopologyDG() throws APPCException, ClientProtocolException, IOException {
+    assertTrue(ProviderOperations.topologyDG(message));
+  }
+
+  @Test
+  public void testTopologyDGWithBaseAuth()
+      throws APPCException, ClientProtocolException, IOException {
+    ProviderOperations.setAuthentication("user", "password");
+    ProviderOperations.setUrl("http://localhost:8080");
+    assertTrue(ProviderOperations.topologyDG(message));
+  }
+
+  @Test(expected = APPCException.class)
+  public void testTopologyDGFail() throws APPCException, ClientProtocolException, IOException {
+    reponseMessage =
+        "{\"output\":{\"common-response-header\":{\"success\":false,\"reason\":\"\"}}}";
+    inputStream = new ByteArrayInputStream(reponseMessage.getBytes(StandardCharsets.UTF_8));
+    when(httpEntity.getContent()).thenReturn(inputStream);
+    ProviderOperations.topologyDG(message);
+  }
+
+  @Test(expected = APPCException.class)
+  public void testTopologyDGInvalidResponse()
+      throws APPCException, ClientProtocolException, IOException {
+    reponseMessage = "{\"output\":{\"common-response-header\":{\"succss\":false,\"reason\":\"\"}}}";
+    inputStream = new ByteArrayInputStream(reponseMessage.getBytes(StandardCharsets.UTF_8));
+    when(httpEntity.getContent()).thenReturn(inputStream);
+    ProviderOperations.topologyDG(message);
+  }
+
+  @Test(expected = APPCException.class)
+  public void testTopologyDGWithInvalidHttp()
+      throws APPCException, ClientProtocolException, IOException {
+    when(statusLine.getStatusCode()).thenReturn(500);
+    ProviderOperations.topologyDG(message);
+  }
+}