aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--appc-event-listener/appc-event-listener-bundle/src/main/java/org/onap/appc/listener/demo/impl/ProviderOperations.java107
-rw-r--r--appc-event-listener/appc-event-listener-bundle/src/main/java/org/onap/appc/listener/util/HttpClientUtil.java126
-rw-r--r--appc-event-listener/appc-event-listener-bundle/src/test/java/org/onap/appc/listener/demo/impl/TestProviderOperations.java129
3 files changed, 259 insertions, 103 deletions
diff --git a/appc-event-listener/appc-event-listener-bundle/src/main/java/org/onap/appc/listener/demo/impl/ProviderOperations.java b/appc-event-listener/appc-event-listener-bundle/src/main/java/org/onap/appc/listener/demo/impl/ProviderOperations.java
index 4b3ffcc02..537f3a737 100644
--- a/appc-event-listener/appc-event-listener-bundle/src/main/java/org/onap/appc/listener/demo/impl/ProviderOperations.java
+++ b/appc-event-listener/appc-event-listener-bundle/src/main/java/org/onap/appc/listener/demo/impl/ProviderOperations.java
@@ -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
index 000000000..dea692910
--- /dev/null
+++ b/appc-event-listener/appc-event-listener-bundle/src/main/java/org/onap/appc/listener/util/HttpClientUtil.java
@@ -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
index 000000000..55b0f2cb6
--- /dev/null
+++ b/appc-event-listener/appc-event-listener-bundle/src/test/java/org/onap/appc/listener/demo/impl/TestProviderOperations.java
@@ -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);
+ }
+}