From a579a48948f0b61bb9d98e1591d1fe727a550dbb Mon Sep 17 00:00:00 2001 From: Eli Halych Date: Thu, 3 Dec 2020 09:56:50 +0000 Subject: Add send requests to VES via HTTPS in Mass PNF Simulator Details: - Previously allowed only HTTP. - HTTPS support added since VES accepts HTTPS and throws 400 Bad Request on HTTP. - Added autogenerating Basic Authorization token based on user:password in Base64 to access real VES together with HTTPS. - For this reason, simple HttpClient became part of RestTemplate that can ignore certificate checks for HTTPS when connecting to VES. - Adjusted test cases. Issue-ID: INT-1799 Signed-off-by: Eli Halych Change-Id: I69eaeb4b10f903c3a3aa880dbb787034da4c30bb --- test/mocks/masspnfsim/pnf-sim-lightweight/pom.xml | 2 +- .../onap/pnfsimulator/logging/MDCVariables.java | 1 + .../pnfsimulator/rest/SimulatorController.java | 3 + .../org/onap/pnfsimulator/simulator/Simulator.java | 12 +- .../simulator/client/HttpClientAdapter.java | 26 ---- .../simulator/client/HttpClientAdapterImpl.java | 89 ------------ .../simulator/client/RestTemplateAdapter.java | 26 ++++ .../simulator/client/RestTemplateAdapterImpl.java | 155 +++++++++++++++++++++ .../pnfsimulator/rest/SimulatorControllerTest.java | 4 +- .../onap/pnfsimulator/simulator/SimulatorTest.java | 12 +- .../client/HttpClientAdapterImplTest.java | 71 ---------- .../client/RestTemplateAdapterImplTest.java | 134 ++++++++++++++++++ 12 files changed, 334 insertions(+), 201 deletions(-) delete mode 100644 test/mocks/masspnfsim/pnf-sim-lightweight/src/main/java/org/onap/pnfsimulator/simulator/client/HttpClientAdapter.java delete mode 100644 test/mocks/masspnfsim/pnf-sim-lightweight/src/main/java/org/onap/pnfsimulator/simulator/client/HttpClientAdapterImpl.java create mode 100644 test/mocks/masspnfsim/pnf-sim-lightweight/src/main/java/org/onap/pnfsimulator/simulator/client/RestTemplateAdapter.java create mode 100644 test/mocks/masspnfsim/pnf-sim-lightweight/src/main/java/org/onap/pnfsimulator/simulator/client/RestTemplateAdapterImpl.java delete mode 100644 test/mocks/masspnfsim/pnf-sim-lightweight/src/test/java/org/onap/pnfsimulator/simulator/client/HttpClientAdapterImplTest.java create mode 100644 test/mocks/masspnfsim/pnf-sim-lightweight/src/test/java/org/onap/pnfsimulator/simulator/client/RestTemplateAdapterImplTest.java (limited to 'test/mocks/masspnfsim/pnf-sim-lightweight') diff --git a/test/mocks/masspnfsim/pnf-sim-lightweight/pom.xml b/test/mocks/masspnfsim/pnf-sim-lightweight/pom.xml index abfa615cc..eab5af27b 100644 --- a/test/mocks/masspnfsim/pnf-sim-lightweight/pom.xml +++ b/test/mocks/masspnfsim/pnf-sim-lightweight/pom.xml @@ -57,7 +57,7 @@ jackson-dataformat-yaml 2.9.8 - + ch.qos.logback logback-classic diff --git a/test/mocks/masspnfsim/pnf-sim-lightweight/src/main/java/org/onap/pnfsimulator/logging/MDCVariables.java b/test/mocks/masspnfsim/pnf-sim-lightweight/src/main/java/org/onap/pnfsimulator/logging/MDCVariables.java index 8f6fe3b66..e479b4a6b 100644 --- a/test/mocks/masspnfsim/pnf-sim-lightweight/src/main/java/org/onap/pnfsimulator/logging/MDCVariables.java +++ b/test/mocks/masspnfsim/pnf-sim-lightweight/src/main/java/org/onap/pnfsimulator/logging/MDCVariables.java @@ -29,6 +29,7 @@ public final class MDCVariables { public static final String INSTANCE_UUID = "InstanceUUID"; public static final String RESPONSE_CODE = "ResponseCode"; public static final String SERVICE_NAME = "ServiceName"; + public static final String AUTHORIZATION = "Authorization"; private MDCVariables() { } diff --git a/test/mocks/masspnfsim/pnf-sim-lightweight/src/main/java/org/onap/pnfsimulator/rest/SimulatorController.java b/test/mocks/masspnfsim/pnf-sim-lightweight/src/main/java/org/onap/pnfsimulator/rest/SimulatorController.java index 2a685eac8..7bb646c30 100644 --- a/test/mocks/masspnfsim/pnf-sim-lightweight/src/main/java/org/onap/pnfsimulator/rest/SimulatorController.java +++ b/test/mocks/masspnfsim/pnf-sim-lightweight/src/main/java/org/onap/pnfsimulator/rest/SimulatorController.java @@ -23,6 +23,7 @@ import static org.onap.pnfsimulator.logging.MDCVariables.REQUEST_ID; import static org.onap.pnfsimulator.logging.MDCVariables.RESPONSE_CODE; import static org.onap.pnfsimulator.logging.MDCVariables.SERVICE_NAME; import static org.onap.pnfsimulator.logging.MDCVariables.X_INVOCATION_ID; +import static org.onap.pnfsimulator.logging.MDCVariables.AUTHORIZATION; import static org.onap.pnfsimulator.logging.MDCVariables.X_ONAP_REQUEST_ID; import static org.onap.pnfsimulator.message.MessageConstants.COMMON_EVENT_HEADER_PARAMS; import static org.onap.pnfsimulator.message.MessageConstants.SIMULATOR_PARAMS; @@ -84,6 +85,7 @@ public class SimulatorController { public ResponseEntity start(@RequestHeader HttpHeaders headers, @RequestBody String message) { MDC.put(REQUEST_ID, headers.getFirst(X_ONAP_REQUEST_ID)); MDC.put(INVOCATION_ID, headers.getFirst(X_INVOCATION_ID)); + MDC.put(AUTHORIZATION, headers.getFirst(AUTHORIZATION)); MDC.put(INSTANCE_UUID, UUID.randomUUID().toString()); MDC.put(SERVICE_NAME, "/simulator/start"); LOGGER.info(ENTRY, "Simulator starting"); @@ -142,6 +144,7 @@ public class SimulatorController { public ResponseEntity startmassmode(@RequestHeader HttpHeaders headers, @RequestBody String message) { MDC.put(REQUEST_ID, headers.getFirst(X_ONAP_REQUEST_ID)); MDC.put(INVOCATION_ID, headers.getFirst(X_INVOCATION_ID)); + MDC.put(AUTHORIZATION, headers.getFirst(AUTHORIZATION)); MDC.put(INSTANCE_UUID, UUID.randomUUID().toString()); MDC.put(SERVICE_NAME, "/simulator/start"); LOGGER.info(ENTRY, "Simulator starting"); diff --git a/test/mocks/masspnfsim/pnf-sim-lightweight/src/main/java/org/onap/pnfsimulator/simulator/Simulator.java b/test/mocks/masspnfsim/pnf-sim-lightweight/src/main/java/org/onap/pnfsimulator/simulator/Simulator.java index ba114760f..725fe4336 100644 --- a/test/mocks/masspnfsim/pnf-sim-lightweight/src/main/java/org/onap/pnfsimulator/simulator/Simulator.java +++ b/test/mocks/masspnfsim/pnf-sim-lightweight/src/main/java/org/onap/pnfsimulator/simulator/Simulator.java @@ -27,8 +27,8 @@ import java.util.Optional; import org.json.JSONObject; import org.onap.pnfsimulator.FileProvider; import org.onap.pnfsimulator.message.MessageProvider; -import org.onap.pnfsimulator.simulator.client.HttpClientAdapter; -import org.onap.pnfsimulator.simulator.client.HttpClientAdapterImpl; +import org.onap.pnfsimulator.simulator.client.RestTemplateAdapter; +import org.onap.pnfsimulator.simulator.client.RestTemplateAdapterImpl; import org.onap.pnfsimulator.simulator.validation.JSONValidator; import org.onap.pnfsimulator.simulator.validation.NoRopFilesException; import org.onap.pnfsimulator.simulator.validation.ValidationException; @@ -45,7 +45,7 @@ public class Simulator extends Thread { private Map contextMap = MDC.getCopyOfContextMap(); private boolean isEndless; private String vesUrl; - private HttpClientAdapter httpClient; + private RestTemplateAdapter httpClient; private JSONObject messageBody; private Duration duration; private Duration interval; @@ -124,7 +124,7 @@ public class Simulator extends Thread { public static class Builder { private String vesUrl; - private HttpClientAdapter httpClient; + private RestTemplateAdapter httpClient; //private JSONObject messageBody; private Duration duration; private Duration interval; @@ -136,7 +136,7 @@ public class Simulator extends Thread { private Builder() { this.vesUrl = ""; - this.httpClient = new HttpClientAdapterImpl(); + this.httpClient = new RestTemplateAdapterImpl(); //this.messageBody = new JSONObject(); this.duration = Duration.ZERO; this.interval = Duration.ZERO; @@ -148,7 +148,7 @@ public class Simulator extends Thread { return this; } - public Builder withCustomHttpClientAdapter(HttpClientAdapter httpClient) { + public Builder withCustomRestTemplateAdapter(RestTemplateAdapter httpClient) { this.httpClient = httpClient; return this; } diff --git a/test/mocks/masspnfsim/pnf-sim-lightweight/src/main/java/org/onap/pnfsimulator/simulator/client/HttpClientAdapter.java b/test/mocks/masspnfsim/pnf-sim-lightweight/src/main/java/org/onap/pnfsimulator/simulator/client/HttpClientAdapter.java deleted file mode 100644 index 47f2e3112..000000000 --- a/test/mocks/masspnfsim/pnf-sim-lightweight/src/main/java/org/onap/pnfsimulator/simulator/client/HttpClientAdapter.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * ============LICENSE_START======================================================= - * PNF-REGISTRATION-HANDLER - * ================================================================================ - * Copyright (C) 2018 NOKIA Intellectual Property. 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. - * ============LICENSE_END========================================================= - */ - -package org.onap.pnfsimulator.simulator.client; - -public interface HttpClientAdapter { - - void send(String content, String url); -} diff --git a/test/mocks/masspnfsim/pnf-sim-lightweight/src/main/java/org/onap/pnfsimulator/simulator/client/HttpClientAdapterImpl.java b/test/mocks/masspnfsim/pnf-sim-lightweight/src/main/java/org/onap/pnfsimulator/simulator/client/HttpClientAdapterImpl.java deleted file mode 100644 index f0c9917f5..000000000 --- a/test/mocks/masspnfsim/pnf-sim-lightweight/src/main/java/org/onap/pnfsimulator/simulator/client/HttpClientAdapterImpl.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * ============LICENSE_START======================================================= - * PNF-REGISTRATION-HANDLER - * ================================================================================ - * Copyright (C) 2018 NOKIA Intellectual Property. 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. - * ============LICENSE_END========================================================= - */ - -package org.onap.pnfsimulator.simulator.client; - -import static org.onap.pnfsimulator.logging.MDCVariables.REQUEST_ID; -import static org.onap.pnfsimulator.logging.MDCVariables.X_INVOCATION_ID; -import static org.onap.pnfsimulator.logging.MDCVariables.X_ONAP_REQUEST_ID; - -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.util.UUID; -import org.apache.http.HttpResponse; -import org.apache.http.client.HttpClient; -import org.apache.http.client.config.RequestConfig; -import org.apache.http.client.methods.HttpPost; -import org.apache.http.entity.StringEntity; -import org.apache.http.impl.client.HttpClientBuilder; -import org.apache.http.util.EntityUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.slf4j.MDC; -import org.slf4j.Marker; -import org.slf4j.MarkerFactory; - -public class HttpClientAdapterImpl implements HttpClientAdapter { - - private static final Logger LOGGER = LoggerFactory.getLogger(HttpClientAdapterImpl.class); - private static final String CONTENT_TYPE = "Content-Type"; - private static final String APPLICATION_JSON = "application/json"; - private final Marker INVOKE = MarkerFactory.getMarker("INVOKE"); - private static final RequestConfig CONFIG = RequestConfig.custom() - .setConnectTimeout(1000) - .setConnectionRequestTimeout(1000) - .setSocketTimeout(1000) - .build(); - - private HttpClient client; - - public HttpClientAdapterImpl() { - this.client = HttpClientBuilder - .create() - .setDefaultRequestConfig(CONFIG) - .build(); - } - - @Override - public void send(String content, String url) { - try { - HttpPost request = createRequest(content, url); - HttpResponse response = client.execute(request); - EntityUtils.consumeQuietly(response.getEntity()); - LOGGER.info(INVOKE, "Message sent, ves response code: {}", response.getStatusLine()); - } catch (IOException e) { - LOGGER.warn("Error sending message to ves: {}", e.getMessage()); - } - } - - HttpClientAdapterImpl(HttpClient client) { - this.client = client; - } - - private HttpPost createRequest(String content, String url) throws UnsupportedEncodingException { - HttpPost request = new HttpPost(url); - StringEntity stringEntity = new StringEntity(content); - request.addHeader(CONTENT_TYPE, APPLICATION_JSON); - request.addHeader(X_ONAP_REQUEST_ID, MDC.get(REQUEST_ID)); - request.addHeader(X_INVOCATION_ID, UUID.randomUUID().toString()); - request.setEntity(stringEntity); - return request; - } -} \ No newline at end of file diff --git a/test/mocks/masspnfsim/pnf-sim-lightweight/src/main/java/org/onap/pnfsimulator/simulator/client/RestTemplateAdapter.java b/test/mocks/masspnfsim/pnf-sim-lightweight/src/main/java/org/onap/pnfsimulator/simulator/client/RestTemplateAdapter.java new file mode 100644 index 000000000..92e66b47e --- /dev/null +++ b/test/mocks/masspnfsim/pnf-sim-lightweight/src/main/java/org/onap/pnfsimulator/simulator/client/RestTemplateAdapter.java @@ -0,0 +1,26 @@ +/* + * ============LICENSE_START======================================================= + * PNF-REGISTRATION-HANDLER + * ================================================================================ + * Copyright (C) 2018 NOKIA Intellectual Property. 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. + * ============LICENSE_END========================================================= + */ + +package org.onap.pnfsimulator.simulator.client; + +public interface RestTemplateAdapter { + + void send(String content, String url); +} diff --git a/test/mocks/masspnfsim/pnf-sim-lightweight/src/main/java/org/onap/pnfsimulator/simulator/client/RestTemplateAdapterImpl.java b/test/mocks/masspnfsim/pnf-sim-lightweight/src/main/java/org/onap/pnfsimulator/simulator/client/RestTemplateAdapterImpl.java new file mode 100644 index 000000000..e08263745 --- /dev/null +++ b/test/mocks/masspnfsim/pnf-sim-lightweight/src/main/java/org/onap/pnfsimulator/simulator/client/RestTemplateAdapterImpl.java @@ -0,0 +1,155 @@ +/* + * ============LICENSE_START======================================================= + * PNF-REGISTRATION-HANDLER + * ================================================================================ + * Copyright (C) 2018 NOKIA Intellectual Property. 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. + * ============LICENSE_END========================================================= + */ + +package org.onap.pnfsimulator.simulator.client; + +import static org.onap.pnfsimulator.logging.MDCVariables.REQUEST_ID; +import static org.onap.pnfsimulator.logging.MDCVariables.X_INVOCATION_ID; +import static org.onap.pnfsimulator.logging.MDCVariables.X_ONAP_REQUEST_ID; +import static org.onap.pnfsimulator.logging.MDCVariables.AUTHORIZATION; + +import org.springframework.web.client.ResourceAccessException; +import java.security.KeyManagementException; +import java.security.KeyStoreException; +import java.security.NoSuchAlgorithmException; +import java.security.cert.X509Certificate; +import javax.net.ssl.SSLContext; +import javax.net.ssl.TrustManager; +import javax.net.ssl.X509TrustManager; +import org.apache.http.conn.ssl.NoopHostnameVerifier; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; +import org.springframework.web.client.RestTemplate; + +import org.springframework.http.HttpEntity; +import org.springframework.http.ResponseEntity; +import org.springframework.http.HttpHeaders; + +import java.util.UUID; +import org.springframework.web.client.HttpClientErrorException; +import org.apache.http.client.config.RequestConfig; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.slf4j.MDC; +import org.slf4j.Marker; +import org.slf4j.MarkerFactory; + +public class RestTemplateAdapterImpl implements RestTemplateAdapter { + + private static final Logger LOGGER = LoggerFactory.getLogger(RestTemplateAdapterImpl.class); + private static final String CONTENT_TYPE = "Content-Type"; + private static final String APPLICATION_JSON = "application/json"; + private final Marker INVOKE = MarkerFactory.getMarker("INVOKE"); + private static final RequestConfig CONFIG = RequestConfig.custom() + .setConnectTimeout(1000) + .setConnectionRequestTimeout(1000) + .setSocketTimeout(1000) + .build(); + + private RestTemplate restTemplate; + + public RestTemplateAdapterImpl() { + try { + this.restTemplate = createRestTemplate(); + } catch (KeyStoreException | NoSuchAlgorithmException | KeyManagementException ex) { + LOGGER.warn("Error while creating a RestTemplate object: {}", ex.getMessage()); + } + } + + RestTemplateAdapterImpl(RestTemplate restTemplate) { + this.restTemplate = restTemplate; + } + + @Override + public void send(String content, String url) { + try { + HttpEntity entity = createPostEntity(content); + ResponseEntity response = restTemplate.postForEntity(url, entity, String.class); + LOGGER.info(INVOKE, "Message sent, ves response code: {}", response.getStatusCode()); + } catch (HttpClientErrorException codeEx) { + LOGGER.warn("Response body: ", codeEx.getResponseBodyAsString()); + LOGGER.warn("Error sending message to ves: {}", codeEx.getMessage()); + LOGGER.warn("URL: {}", url); + } catch (ResourceAccessException ioEx) { + LOGGER.warn("The URL cannot be reached: {}", ioEx.getMessage()); + LOGGER.warn("URL: {}", url); + } + } + + private CloseableHttpClient createClient() + throws KeyStoreException, NoSuchAlgorithmException, KeyManagementException { + + TrustManager[] trustAllCerts = new TrustManager[] { + new X509TrustManager() { + + public java.security.cert.X509Certificate[] getAcceptedIssuers() { + return new X509Certificate[0]; + } + + public void checkClientTrusted( + java.security.cert.X509Certificate[] certs, + String authType) {} + + public void checkServerTrusted( + java.security.cert.X509Certificate[] certs, + String authType) {} + } + }; + + SSLContext sslContext = SSLContext.getInstance("TLS"); + sslContext.init( + null, + trustAllCerts, + new java.security.SecureRandom() + ); + + CloseableHttpClient httpClient = HttpClients + .custom() + .setSSLContext(sslContext) + .setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE) + .build(); + + return httpClient; + } + + private RestTemplate createRestTemplate() + throws KeyStoreException, NoSuchAlgorithmException, KeyManagementException { + + CloseableHttpClient client = createClient(); + HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(); + requestFactory.setHttpClient(client); + + return new RestTemplate(requestFactory); + + } + + private HttpEntity createPostEntity(String content) { + + HttpHeaders headers = new HttpHeaders(); + headers.set(CONTENT_TYPE, APPLICATION_JSON); + headers.set(AUTHORIZATION, MDC.get(AUTHORIZATION)); + headers.set(X_ONAP_REQUEST_ID, MDC.get(REQUEST_ID)); + headers.set(X_INVOCATION_ID, UUID.randomUUID().toString()); + + return new HttpEntity<>(content, headers); + + } +} \ No newline at end of file diff --git a/test/mocks/masspnfsim/pnf-sim-lightweight/src/test/java/org/onap/pnfsimulator/rest/SimulatorControllerTest.java b/test/mocks/masspnfsim/pnf-sim-lightweight/src/test/java/org/onap/pnfsimulator/rest/SimulatorControllerTest.java index d1db8d55c..215cee0b0 100644 --- a/test/mocks/masspnfsim/pnf-sim-lightweight/src/test/java/org/onap/pnfsimulator/rest/SimulatorControllerTest.java +++ b/test/mocks/masspnfsim/pnf-sim-lightweight/src/test/java/org/onap/pnfsimulator/rest/SimulatorControllerTest.java @@ -46,7 +46,7 @@ import org.mockito.MockitoAnnotations; import org.onap.pnfsimulator.FileProvider; import org.onap.pnfsimulator.simulator.Simulator; import org.onap.pnfsimulator.simulator.SimulatorFactory; -import org.onap.pnfsimulator.simulator.client.HttpClientAdapter; +import org.onap.pnfsimulator.simulator.client.RestTemplateAdapter; import org.onap.pnfsimulator.simulator.validation.JSONValidator; import org.onap.pnfsimulator.simulator.validation.NoRopFilesException; import org.onap.pnfsimulator.simulator.validation.ValidationException; @@ -137,7 +137,7 @@ class SimulatorControllerTest { private Simulator createEndlessSimulator() { return spy(Simulator.builder() - .withCustomHttpClientAdapter(mock(HttpClientAdapter.class)) + .withCustomRestTemplateAdapter(mock(RestTemplateAdapter.class)) .withCommonEventHeaderParams(VALID_COMMON_EVENT_HEADER_PARAMS) .withPnfRegistrationParams(Optional.empty()) .withNotificationParams(VALID_NOTIFICATION_PARAMS) diff --git a/test/mocks/masspnfsim/pnf-sim-lightweight/src/test/java/org/onap/pnfsimulator/simulator/SimulatorTest.java b/test/mocks/masspnfsim/pnf-sim-lightweight/src/test/java/org/onap/pnfsimulator/simulator/SimulatorTest.java index fb812b598..1f15c018d 100644 --- a/test/mocks/masspnfsim/pnf-sim-lightweight/src/test/java/org/onap/pnfsimulator/simulator/SimulatorTest.java +++ b/test/mocks/masspnfsim/pnf-sim-lightweight/src/test/java/org/onap/pnfsimulator/simulator/SimulatorTest.java @@ -45,7 +45,7 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.function.Executable; import org.mockito.Mockito; import org.onap.pnfsimulator.FileProvider; -import org.onap.pnfsimulator.simulator.client.HttpClientAdapter; +import org.onap.pnfsimulator.simulator.client.RestTemplateAdapter; import org.onap.pnfsimulator.simulator.validation.NoRopFilesException; import org.onap.pnfsimulator.simulator.validation.ValidationException; @@ -87,16 +87,16 @@ public class SimulatorTest { void simulator_should_stop_when_interrupted() { createSampleFileList(); - HttpClientAdapter httpClientMock = Mockito.mock(HttpClientAdapter.class); + RestTemplateAdapter httpClientMock = Mockito.mock(RestTemplateAdapter.class); Simulator simulator = Simulator.builder() .withInterval(Duration.ofSeconds(1)) - .withCustomHttpClientAdapter(httpClientMock) + .withCustomRestTemplateAdapter(httpClientMock) .withCommonEventHeaderParams(VALID_COMMON_EVENT_HEADER_PARAMS) .withPnfRegistrationParams(Optional.empty()) .withNotificationParams(VALID_NOTIFICATION_PARAMS) .withVesUrl(TEST_VES_URL) .withXnfUrl(TEST_XNF_URL) - .withCustomHttpClientAdapter(httpClientMock) + .withCustomRestTemplateAdapter(httpClientMock) .withFileProvider(fileProvider).build(); simulator.start(); @@ -182,7 +182,7 @@ public class SimulatorTest { void simulator_should_send_fileready_message() { createSampleFileList(); - HttpClientAdapter httpClientMock = Mockito.mock(HttpClientAdapter.class); + RestTemplateAdapter httpClientMock = Mockito.mock(RestTemplateAdapter.class); Simulator simulator = Simulator.builder() .withDuration(Duration.ofMillis(100)) .withInterval(Duration.ofMillis(100)) @@ -191,7 +191,7 @@ public class SimulatorTest { .withNotificationParams(VALID_NOTIFICATION_PARAMS) .withVesUrl(TEST_VES_URL) .withXnfUrl(TEST_XNF_URL) - .withCustomHttpClientAdapter(httpClientMock) + .withCustomRestTemplateAdapter(httpClientMock) .withFileProvider(fileProvider).build(); simulator.run(); Exception e = simulator.getThrownException(); diff --git a/test/mocks/masspnfsim/pnf-sim-lightweight/src/test/java/org/onap/pnfsimulator/simulator/client/HttpClientAdapterImplTest.java b/test/mocks/masspnfsim/pnf-sim-lightweight/src/test/java/org/onap/pnfsimulator/simulator/client/HttpClientAdapterImplTest.java deleted file mode 100644 index a4fb9eb04..000000000 --- a/test/mocks/masspnfsim/pnf-sim-lightweight/src/test/java/org/onap/pnfsimulator/simulator/client/HttpClientAdapterImplTest.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * ============LICENSE_START======================================================= - * PNF-REGISTRATION-HANDLER - * ================================================================================ - * Copyright (C) 2018 NOKIA Intellectual Property. 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. - * ============LICENSE_END========================================================= - */ - -package org.onap.pnfsimulator.simulator.client; - -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.doThrow; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.verify; -import static org.mockito.MockitoAnnotations.initMocks; - -import java.io.IOException; -import org.apache.http.HttpResponse; -import org.apache.http.client.HttpClient; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.mockito.Mock; - -class HttpClientAdapterImplTest { - - private HttpClientAdapter adapter; - - @Mock - private HttpClient httpClient; - @Mock - private HttpResponse httpResponse; - - @BeforeEach - void setup() { - initMocks(this); - adapter = new HttpClientAdapterImpl(httpClient); - } - - @Test - void send_should_successfully_send_request_given_valid_url() throws IOException { - doReturn(httpResponse).when(httpClient).execute(any()); - - adapter.send("test-msg", "http://valid-url"); - - verify(httpClient).execute(any()); - verify(httpResponse).getStatusLine(); - } - - @Test - void send_should_not_send_request_given_invalid_url() throws IOException { - doThrow(new IOException("test")).when(httpClient).execute(any()); - - adapter.send("test-msg", "http://invalid-url"); - - verify(httpClient).execute(any()); - verify(httpResponse, never()).getStatusLine(); - } -} diff --git a/test/mocks/masspnfsim/pnf-sim-lightweight/src/test/java/org/onap/pnfsimulator/simulator/client/RestTemplateAdapterImplTest.java b/test/mocks/masspnfsim/pnf-sim-lightweight/src/test/java/org/onap/pnfsimulator/simulator/client/RestTemplateAdapterImplTest.java new file mode 100644 index 000000000..d42322232 --- /dev/null +++ b/test/mocks/masspnfsim/pnf-sim-lightweight/src/test/java/org/onap/pnfsimulator/simulator/client/RestTemplateAdapterImplTest.java @@ -0,0 +1,134 @@ +/* + * ============LICENSE_START======================================================= + * PNF-REGISTRATION-HANDLER + * ================================================================================ + * Copyright (C) 2018 NOKIA Intellectual Property. 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. + * ============LICENSE_END========================================================= + */ + +package org.onap.pnfsimulator.simulator.client; + +import org.mockito.Mock; +import static org.mockito.Mockito.doThrow; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.when; +import static org.mockito.Mockito.eq; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.notNull; +import static org.mockito.Mockito.verify; +import static org.mockito.MockitoAnnotations.initMocks; + +import org.springframework.web.client.HttpClientErrorException; +import org.springframework.http.HttpStatus; +import org.springframework.http.HttpEntity; +import org.springframework.http.ResponseEntity; +import org.springframework.web.client.RestTemplate; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +class RestTemplateAdapterImplTest { + + private RestTemplateAdapter adapter; + + @Mock + private RestTemplate restTemplate; + @Mock + ResponseEntity response; + + @BeforeEach + void setup() { + initMocks(this); + adapter = new RestTemplateAdapterImpl(restTemplate); + } + + @Test + void send_should_successfully_send_request_given_valid_http_url() + throws HttpClientErrorException { + + String content = "test-msg"; + String urlHttp = "http://valid-url"; + + when( + restTemplate.postForEntity( + (String) notNull(), + (HttpEntity) notNull(), + eq(String.class) + ) + ).thenReturn(response); + + adapter.send(content, urlHttp); + + verify( + restTemplate, times(1)).postForEntity( + (String) notNull(), + (HttpEntity) notNull(), + eq(String.class) + ); + verify(response).getStatusCode(); + } + + @Test + void send_should_successfully_send_request_given_valid_https_url() + throws HttpClientErrorException { + + String content = "test-msg"; + String urlHttps = "https://valid-url"; + + when( + restTemplate.postForEntity( + (String) notNull(), + (HttpEntity) notNull(), + eq(String.class) + ) + ).thenReturn(response); + + adapter.send(content, urlHttps); + + verify( + restTemplate, times(1)).postForEntity( + (String) notNull(), + (HttpEntity) notNull(), + eq(String.class) + ); + verify(response).getStatusCode(); + } + + @Test + void send_should_not_send_request_given_invalid_url() + throws HttpClientErrorException { + + String content = "test-msg"; + String url = "http://invalid-url"; + + doThrow( + new HttpClientErrorException(HttpStatus.BAD_REQUEST)).when( + restTemplate).postForEntity( + (String) notNull(), + (HttpEntity) notNull(), + eq(String.class) + ); + + adapter.send(content, url); + + verify( + restTemplate, times(1)).postForEntity( + (String) notNull(), + (HttpEntity) notNull(), + eq(String.class) + ); + verify(response, never()).getStatusCode(); + } +} -- cgit 1.2.3-korg