summaryrefslogtreecommitdiffstats
path: root/prh-aai-client
diff options
context:
space:
mode:
authorwasala <przemyslaw.wasala@nokia.com>2018-08-08 13:39:14 +0200
committerwasala <przemyslaw.wasala@nokia.com>2018-08-09 07:55:43 +0200
commit5005d7463fb8ef25f0b4e975d4392367037c7239 (patch)
treee1ef2c5f5bc99d9514c13e1068f3b56c1881a4c1 /prh-aai-client
parent7679a6f8177d47116aa8dbae0b38f8b0a8174dc5 (diff)
Reactive A&AI client
*plugged reactiveHttpClient in prh workflow *added junit tests for workflow Change-Id: I74f3fa7354de9b0f7f164c070ea61b70e74bde23 Issue-ID: DCAEGEN2-609 Signed-off-by: wasala <przemyslaw.wasala@nokia.com>
Diffstat (limited to 'prh-aai-client')
-rw-r--r--prh-aai-client/src/main/java/org/onap/dcaegen2/services/prh/service/AaiProducerClient.java145
-rw-r--r--prh-aai-client/src/test/java/org/onap/dcaegen2/services/prh/service/AaiProducerClientTest.java166
2 files changed, 0 insertions, 311 deletions
diff --git a/prh-aai-client/src/main/java/org/onap/dcaegen2/services/prh/service/AaiProducerClient.java b/prh-aai-client/src/main/java/org/onap/dcaegen2/services/prh/service/AaiProducerClient.java
deleted file mode 100644
index b5368c6d..00000000
--- a/prh-aai-client/src/main/java/org/onap/dcaegen2/services/prh/service/AaiProducerClient.java
+++ /dev/null
@@ -1,145 +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.dcaegen2.services.prh.service;
-
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.util.Base64;
-import java.util.Map;
-import java.util.Optional;
-
-import java.util.function.Predicate;
-import org.apache.http.HttpEntity;
-import org.apache.http.HttpResponse;
-import org.apache.http.client.methods.HttpPatch;
-import org.apache.http.client.methods.HttpRequestBase;
-import org.apache.http.client.utils.URIBuilder;
-import org.apache.http.entity.StringEntity;
-import org.apache.http.impl.client.CloseableHttpClient;
-import org.apache.http.util.EntityUtils;
-import org.onap.dcaegen2.services.prh.config.AaiClientConfiguration;
-import org.onap.dcaegen2.services.prh.model.CommonFunctions;
-import org.onap.dcaegen2.services.prh.model.ConsumerDmaapModel;
-import org.onap.dcaegen2.services.prh.model.utils.HttpUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class AaiProducerClient implements AaiExtendedHttpClient {
-
- private static final String EXCEPTION_MESSAGE = "Exception while executing http client: ";
- private static Predicate<String> isEmpty = String::isEmpty;
- private final Logger logger = LoggerFactory.getLogger(this.getClass());
- private final CloseableHttpClient closeableHttpClient;
- private final String aaiHost;
- private final String aaiProtocol;
- private final Integer aaiHostPortNumber;
- private final String aaiPath;
- private final Map<String, String> aaiHeaders;
- private final String aaiUserName;
- private final String aaiUserPassword;
-
- /**
- * A{@literal &}AI client for publishing data to A{@literal &}AI.
- *
- * @param aaiClientConfiguration - confiuration for A{@literal &}AI
- */
- public AaiProducerClient(AaiClientConfiguration aaiClientConfiguration) {
- closeableHttpClient = new AaiClientImpl(aaiClientConfiguration).getAaiHttpClient();
- aaiHost = aaiClientConfiguration.aaiHost();
- aaiProtocol = aaiClientConfiguration.aaiProtocol();
- aaiHostPortNumber = aaiClientConfiguration.aaiPort();
- aaiPath = aaiClientConfiguration.aaiBasePath() + aaiClientConfiguration.aaiPnfPath();
- aaiHeaders = aaiClientConfiguration.aaiHeaders();
- aaiUserName = aaiClientConfiguration.aaiUserName();
- aaiUserPassword = aaiClientConfiguration.aaiUserPassword();
- }
-
-
- @Override
- public Optional<Integer> getHttpResponse(ConsumerDmaapModel consumerDmaapModel) throws URISyntaxException {
- return createRequest(consumerDmaapModel).flatMap(httpRequestBase -> {
- try {
- return closeableHttpClient.execute(httpRequestBase, this::handleResponse);
- } catch (IOException e) {
- logger.warn(EXCEPTION_MESSAGE, e);
- return Optional.empty();
- }
- });
- }
-
- private Optional<HttpRequestBase> createRequest(ConsumerDmaapModel consumerDmaapModel) throws URISyntaxException {
- final URI extendedUri = createAaiExtendedUri(consumerDmaapModel.getPnfName());
- return createHttpRequest(extendedUri, consumerDmaapModel);
- }
-
- private URI createAaiExtendedUri(final String pnfName) throws URISyntaxException {
- return new URIBuilder()
- .setScheme(aaiProtocol)
- .setHost(aaiHost)
- .setPort(aaiHostPortNumber)
- .setPath(aaiPath + "/" + pnfName).build();
- }
-
- private Optional<HttpRequestBase> createHttpRequest(URI extendedUri, ConsumerDmaapModel consumerDmaapModel) {
- return Optional.ofNullable(CommonFunctions.createJsonBody(consumerDmaapModel)).filter(isEmpty.negate())
- .flatMap(myJson -> {
- try {
- logger.info("AAI: sending json {}", myJson);
- return Optional.of(createHttpPatch(extendedUri, myJson));
- } catch (UnsupportedEncodingException e) {
- logger.warn(EXCEPTION_MESSAGE, e);
- }
- return Optional.empty();
- });
- }
-
- HttpPatch createHttpPatch(URI extendedUri, String jsonBody) throws UnsupportedEncodingException {
- HttpPatch httpPatch = new HttpPatch(extendedUri);
- httpPatch.setEntity(new StringEntity(jsonBody));
- aaiHeaders.forEach(httpPatch::addHeader);
- httpPatch.addHeader("Content-Type", "application/merge-patch+json");
- httpPatch.addHeader("Authorization", "Basic " + encode());
- return httpPatch;
- }
-
- String encode() throws UnsupportedEncodingException {
- return Base64.getEncoder().encodeToString((this.aaiUserName + ":" + this.aaiUserPassword)
- .getBytes("UTF-8"));
- }
-
- Optional<Integer> handleResponse(HttpResponse response) throws IOException {
-
- final Integer responseCode = response.getStatusLine().getStatusCode();
- logger.info("Status code of operation: {}", responseCode);
- final HttpEntity responseEntity = response.getEntity();
-
- if (HttpUtils.isSuccessfulResponseCode(responseCode)) {
- logger.trace("HTTP response successful.");
- return Optional.of(responseCode);
- } else {
- String aaiResponse = responseEntity != null ? EntityUtils.toString(responseEntity) : "";
- logger.warn("HTTP response not successful : {}", aaiResponse);
- return Optional.of(responseCode);
- }
- }
-}
diff --git a/prh-aai-client/src/test/java/org/onap/dcaegen2/services/prh/service/AaiProducerClientTest.java b/prh-aai-client/src/test/java/org/onap/dcaegen2/services/prh/service/AaiProducerClientTest.java
deleted file mode 100644
index 13d4dcec..00000000
--- a/prh-aai-client/src/test/java/org/onap/dcaegen2/services/prh/service/AaiProducerClientTest.java
+++ /dev/null
@@ -1,166 +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.dcaegen2.services.prh.service;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.lang.reflect.Field;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Optional;
-
-import org.apache.http.HttpEntity;
-import org.apache.http.HttpResponse;
-import org.apache.http.HttpStatus;
-import org.apache.http.StatusLine;
-import org.apache.http.client.ResponseHandler;
-import org.apache.http.client.methods.HttpPatch;
-import org.apache.http.impl.client.CloseableHttpClient;
-import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.Test;
-import org.onap.dcaegen2.services.prh.config.AaiClientConfiguration;
-import org.onap.dcaegen2.services.prh.model.ConsumerDmaapModel;
-import org.onap.dcaegen2.services.prh.model.ConsumerDmaapModelForUnitTest;
-
-class AaiProducerClientTest {
-
- private static final Integer SUCCESS = 200;
- private static final HttpResponse httpResponseMock = mock(HttpResponse.class);
- private static final HttpEntity httpEntityMock = mock(HttpEntity.class);
- private static final StatusLine statusLineMock = mock(StatusLine.class);
-
- private static AaiProducerClient testedObject;
- private static AaiClientConfiguration aaiHttpClientConfigurationMock = mock(AaiClientConfiguration.class);
- private static CloseableHttpClient closeableHttpClientMock = mock(CloseableHttpClient.class);
- private static ConsumerDmaapModel consumerDmaapModel = new ConsumerDmaapModelForUnitTest();
-
- @BeforeAll
- static void setup() throws NoSuchFieldException, IllegalAccessException {
- when(aaiHttpClientConfigurationMock.aaiHost()).thenReturn("eucalyptus.es-si-eu-dhn-20.eecloud.nsn-net.net");
- when(aaiHttpClientConfigurationMock.aaiProtocol()).thenReturn("https");
- when(aaiHttpClientConfigurationMock.aaiPort()).thenReturn(1234);
- when(aaiHttpClientConfigurationMock.aaiUserName()).thenReturn("PRH");
- when(aaiHttpClientConfigurationMock.aaiUserPassword()).thenReturn("PRH");
- when(aaiHttpClientConfigurationMock.aaiBasePath()).thenReturn("/aai/v11");
- when(aaiHttpClientConfigurationMock.aaiPnfPath()).thenReturn("/network/pnfs/pnf");
- when(aaiHttpClientConfigurationMock.aaiHeaders()).thenReturn(setupHeaders());
-
- testedObject = new AaiProducerClient(aaiHttpClientConfigurationMock);
- setField();
- }
-
- @Test
- void getHttpResponse_shouldReturnSuccessStatusCode() throws IOException, URISyntaxException {
- // when
- when(closeableHttpClientMock.execute(any(HttpPatch.class), any(ResponseHandler.class)))
- .thenReturn(Optional.of(SUCCESS));
- Optional<Integer> actualResult = testedObject.getHttpResponse(consumerDmaapModel);
- // then
- assertEquals(SUCCESS, actualResult.get());
- }
-
- @Test
- void getHttpResponse_shouldHandleIoException() throws IOException, URISyntaxException {
- // when
- when(closeableHttpClientMock.execute(any(HttpPatch.class), any(ResponseHandler.class)))
- .thenThrow(new IOException("Error occur"));
-
- // then
- assertNotNull(testedObject.getHttpResponse(consumerDmaapModel));
- }
-
- @Test
- void createHttpRequest_shouldCatchUnsupportedEncodingException() throws URISyntaxException, IOException {
- // when
- when(closeableHttpClientMock.execute(any(HttpPatch.class), any(ResponseHandler.class)))
- .thenThrow(new UnsupportedEncodingException("A new Error"));
- // then
- assertNotNull(testedObject.getHttpResponse(consumerDmaapModel));
- }
-
- @Test
- void encode_shouldCreateEncodedString_whenUserAndPasswordAreSet() throws UnsupportedEncodingException {
- // given
- String expected = "UFJIOlBSSA==";
- // when
- String result = testedObject.encode();
- // then
- assertNotNull(result);
- assertEquals(expected, result);
- }
-
- @Test
- void createHttpPatch_shouldContainAuthorizationBasicValue() throws UnsupportedEncodingException {
- // given
- String expected = "Authorization: Basic UFJIOlBSSA==";
- // when
- HttpPatch patch = testedObject.createHttpPatch(URI.create("localhost"), "{}");
- // then
- assertNotNull(patch);
- assertEquals(expected, patch.getLastHeader("Authorization").toString());
- }
-
- @Test
- void handleResponse_shouldReturn200() throws IOException {
- // When
- when(httpResponseMock.getEntity()).thenReturn(httpEntityMock);
- when(httpResponseMock.getStatusLine()).thenReturn(statusLineMock);
- when(httpResponseMock.getStatusLine().getStatusCode()).thenReturn(HttpStatus.SC_OK);
- // Then
- assertEquals(Optional.of(HttpStatus.SC_OK), testedObject.handleResponse(httpResponseMock));
- }
-
- @Test
- void handleResponse_shouldReturn300() throws IOException {
- // When
- when(httpResponseMock.getEntity()).thenReturn(httpEntityMock);
- when(httpResponseMock.getStatusLine()).thenReturn(statusLineMock);
- when(httpResponseMock.getStatusLine().getStatusCode()).thenReturn(HttpStatus.SC_BAD_REQUEST);
- // Then
- assertEquals(Optional.of(HttpStatus.SC_BAD_REQUEST), testedObject.handleResponse(httpResponseMock));
- }
-
-
- private static void setField() throws NoSuchFieldException, IllegalAccessException {
- Field field = testedObject.getClass().getDeclaredField("closeableHttpClient");
- field.setAccessible(true);
- field.set(testedObject, closeableHttpClientMock);
- }
-
- private static Map<String, String> setupHeaders() {
- Map<String, String> aaiHeaders = new HashMap<>();
- aaiHeaders.put("X-FromAppId", "prh");
- aaiHeaders.put("X-TransactionId", "vv-temp");
- aaiHeaders.put("Accept", "application/json");
- aaiHeaders.put("Real-Time", "true");
- aaiHeaders.put("Content-Type", "application/merge-patch+json");
- return aaiHeaders;
-
- }
-}