summaryrefslogtreecommitdiffstats
path: root/prh-commons
diff options
context:
space:
mode:
authorMichal Kabaj <michal.kabaj@nokia.com>2019-11-28 12:21:19 +0100
committerMichal Kabaj <michal.kabaj@nokia.com>2019-11-28 12:21:19 +0100
commite3595ee528b4ddb9d6ff6e26d812c0e293b34a19 (patch)
treee779b5bdf704b00a5ec301aa011ecc3433f8a8b9 /prh-commons
parent880dba137afdf2ddf0693d2290314bf683d7f5d7 (diff)
aaiclient api refactor
- Moved aaiclient code from SDK to PRH improvement of logic fragmentation Issue-ID: DCAEGEN2-1955 Signed-off-by: Michal Kabaj <michal.kabaj@nokia.com> Change-Id: I11d5b92014cdeb036699099113f64fc320cb4dd1
Diffstat (limited to 'prh-commons')
-rw-r--r--prh-commons/pom.xml29
-rw-r--r--prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/api/AaiClientConfiguration.java88
-rw-r--r--prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/api/AaiHttpClient.java32
-rw-r--r--prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/api/get/AaiGetServiceInstanceClient.java73
-rw-r--r--prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/api/get/AaiHttpGetClient.java58
-rw-r--r--prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/api/patch/AaiHttpPatchClient.java71
-rw-r--r--prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/api/put/AaiHttpPutClient.java57
-rw-r--r--prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/impl/AaiRequests.java85
-rw-r--r--prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/main/AaiHttpClientFactory.java71
-rw-r--r--prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/model/AaiModel.java27
-rw-r--r--prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/model/AaiServiceInstanceQueryModel.java31
-rw-r--r--prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/model/ClientModel.java24
-rw-r--r--prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/model/DmaapModel.java24
-rw-r--r--prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/model/JsonBodyBuilder.java34
-rw-r--r--prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/AaiJsonBodyBuilderImpl.java5
-rw-r--r--prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/ConsumerDmaapModel.java6
-rw-r--r--prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/bbs/LogicalLink.java2
-rw-r--r--prh-commons/src/test/java/org/onap/dcaegen2/services/prh/adapter/aai/AaiClientConfigurations.java60
-rw-r--r--prh-commons/src/test/java/org/onap/dcaegen2/services/prh/adapter/aai/AbstractHttpClientTest.java42
-rw-r--r--prh-commons/src/test/java/org/onap/dcaegen2/services/prh/adapter/aai/get/AaiGetServiceInstanceClientTest.java72
-rw-r--r--prh-commons/src/test/java/org/onap/dcaegen2/services/prh/adapter/aai/get/AaiHttpGetClientTest.java82
-rw-r--r--prh-commons/src/test/java/org/onap/dcaegen2/services/prh/adapter/aai/patch/AaiHttpPatchClientTest.java95
-rw-r--r--prh-commons/src/test/java/org/onap/dcaegen2/services/prh/adapter/aai/put/AaiHttpPutClientTest.java81
-rw-r--r--prh-commons/src/test/resources/server.pass0
-rw-r--r--prh-commons/src/test/resources/server.pkcs1228
-rw-r--r--prh-commons/src/test/resources/transaction.json11
-rw-r--r--prh-commons/src/test/resources/trust.pass0
-rw-r--r--prh-commons/src/test/resources/trust.pkcs12bin0 -> 1096 bytes
28 files changed, 1176 insertions, 12 deletions
diff --git a/prh-commons/pom.xml b/prh-commons/pom.xml
index a807304c..03483181 100644
--- a/prh-commons/pom.xml
+++ b/prh-commons/pom.xml
@@ -19,8 +19,8 @@
~ ============LICENSE_END=========================================================
-->
<project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
@@ -36,9 +36,17 @@
<dependencies>
<dependency>
<groupId>org.onap.dcaegen2.services.sdk.rest.services</groupId>
- <artifactId>aai-client</artifactId>
+ <artifactId>http-client</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.onap.dcaegen2.services.sdk.security</groupId>
+ <artifactId>ssl</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-text</artifactId>
+ <version>1.6</version>
</dependency>
-
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>log4j-over-slf4j</artifactId>
@@ -59,7 +67,6 @@
<groupId>org.immutables</groupId>
<artifactId>gson</artifactId>
</dependency>
-
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
@@ -75,5 +82,17 @@
<artifactId>assertj-core</artifactId>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-core</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>io.projectreactor</groupId>
+ <artifactId>reactor-test</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+
</dependencies>
</project>
diff --git a/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/api/AaiClientConfiguration.java b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/api/AaiClientConfiguration.java
new file mode 100644
index 00000000..53e76892
--- /dev/null
+++ b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/api/AaiClientConfiguration.java
@@ -0,0 +1,88 @@
+/*
+ * ============LICENSE_START=======================================================
+ * DCAEGEN2-SERVICES-SDK
+ * ================================================================================
+ * Copyright (C) 2018-2019 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.adapter.aai.api;
+
+import java.io.Serializable;
+import java.util.Map;
+import org.immutables.gson.Gson;
+import org.immutables.value.Value;
+
+@Value.Immutable(prehash = true)
+@Value.Style(builder = "new")
+@Gson.TypeAdapters
+public abstract class AaiClientConfiguration implements Serializable {
+
+ private static final String PNF_PATH = "/network/pnfs/pnf";
+ private static final String SERVICE_INSTANCE_PATH = "/business/customers/customer/${customer}/service-subscriptions/service-subscription/${serviceType}/service-instances/service-instance/${serviceInstanceId}";
+
+ private static final long serialVersionUID = 1L;
+
+ @Value.Parameter
+ @Value.Default
+ public String baseUrl() {
+ return "";
+ }
+
+ /**
+ * Please use baseUrl() instead
+ */
+ @Deprecated
+ @Value.Default
+ public String pnfUrl() {
+ return baseUrl() + PNF_PATH;
+ }
+
+ @Value.Parameter
+ public abstract String aaiUserName();
+
+ @Value.Parameter
+ public abstract String aaiUserPassword();
+
+ @Value.Parameter
+ public abstract Boolean aaiIgnoreSslCertificateErrors();
+
+ /**
+ * Please use baseUrl() instead
+ */
+ @Deprecated
+ @Value.Default
+ public String aaiServiceInstancePath() {
+ return SERVICE_INSTANCE_PATH;
+ }
+
+ @Value.Parameter
+ public abstract Map<String, String> aaiHeaders();
+
+ @Value.Parameter
+ public abstract String trustStorePath();
+
+ @Value.Parameter
+ public abstract String trustStorePasswordPath();
+
+ @Value.Parameter
+ public abstract String keyStorePath();
+
+ @Value.Parameter
+ public abstract String keyStorePasswordPath();
+
+ @Value.Parameter
+ public abstract Boolean enableAaiCertAuth();
+} \ No newline at end of file
diff --git a/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/api/AaiHttpClient.java b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/api/AaiHttpClient.java
new file mode 100644
index 00000000..b72be561
--- /dev/null
+++ b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/api/AaiHttpClient.java
@@ -0,0 +1,32 @@
+/*
+ * ============LICENSE_START=======================================================
+ * DCAEGEN2-SERVICES-SDK
+ * ================================================================================
+ * Copyright (C) 2018-2019 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.adapter.aai.api;
+
+import java.util.function.Function;
+import reactor.core.publisher.Mono;
+
+public interface AaiHttpClient<T, U> {
+ Mono<U> getAaiResponse(T aaiModel);
+
+ default <S> AaiHttpClient<T, S> map(final Function<U,S> fn) {
+ return aaiModel -> AaiHttpClient.this.getAaiResponse(aaiModel).map(fn);
+ }
+}
diff --git a/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/api/get/AaiGetServiceInstanceClient.java b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/api/get/AaiGetServiceInstanceClient.java
new file mode 100644
index 00000000..e6490c62
--- /dev/null
+++ b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/api/get/AaiGetServiceInstanceClient.java
@@ -0,0 +1,73 @@
+/*
+ * ============LICENSE_START=======================================================
+ * DCAEGEN2-SERVICES-SDK
+ * ================================================================================
+ * 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.adapter.aai.api.get;
+
+import static org.onap.dcaegen2.services.prh.adapter.aai.impl.AaiRequests.createAaiGetRequest;
+import static org.onap.dcaegen2.services.prh.adapter.aai.main.AaiHttpClientFactory.createRequestDiagnosticContext;
+
+import io.vavr.collection.HashMap;
+import io.vavr.collection.Map;
+import org.apache.commons.text.StringSubstitutor;
+import org.onap.dcaegen2.services.prh.adapter.aai.api.AaiClientConfiguration;
+import org.onap.dcaegen2.services.prh.adapter.aai.api.AaiHttpClient;
+import org.onap.dcaegen2.services.prh.adapter.aai.model.AaiServiceInstanceQueryModel;
+import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.HttpRequest;
+import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.HttpResponse;
+import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.RxHttpClient;
+import org.onap.dcaegen2.services.sdk.rest.services.uri.URI;
+import reactor.core.publisher.Mono;
+
+public class AaiGetServiceInstanceClient implements
+ AaiHttpClient<AaiServiceInstanceQueryModel, HttpResponse> {
+
+ private static final String CUSTOMER = "customer";
+ private static final String SERVICE_TYPE = "serviceType";
+ private static final String SERVICE_INSTANCE_ID = "serviceInstanceId";
+
+ private final RxHttpClient httpClient;
+ private final AaiClientConfiguration configuration;
+
+ public AaiGetServiceInstanceClient(final AaiClientConfiguration configuration,
+ final RxHttpClient httpClient) {
+ this.configuration = configuration;
+ this.httpClient = httpClient;
+ }
+
+ @Override
+ public Mono<HttpResponse> getAaiResponse(AaiServiceInstanceQueryModel aaiModel) {
+ final Map<String, String> mapping = HashMap.of(
+ CUSTOMER, aaiModel.customerId(),
+ SERVICE_TYPE, aaiModel.serviceType(),
+ SERVICE_INSTANCE_ID, aaiModel.serviceInstanceId());
+
+ final StringSubstitutor substitutor = new StringSubstitutor(mapping.toJavaMap());
+ final String replaced = substitutor.replace(configuration.aaiServiceInstancePath());
+
+ final HttpRequest getRequest = createAaiGetRequest(getUri(replaced),
+ createRequestDiagnosticContext(), configuration.aaiHeaders());
+
+ return httpClient.call(getRequest);
+ }
+
+ private String getUri(final String endpoint) {
+ return new URI.URIBuilder().path(configuration.baseUrl() + endpoint).build().toString();
+ }
+}
diff --git a/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/api/get/AaiHttpGetClient.java b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/api/get/AaiHttpGetClient.java
new file mode 100644
index 00000000..62c2ef50
--- /dev/null
+++ b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/api/get/AaiHttpGetClient.java
@@ -0,0 +1,58 @@
+/*
+ * ============LICENSE_START=======================================================
+ * DCAEGEN2-SERVICES-SDK
+ * ================================================================================
+ * Copyright (C) 2018-2019 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.adapter.aai.api.get;
+
+import static org.onap.dcaegen2.services.prh.adapter.aai.impl.AaiRequests.createAaiGetRequest;
+import static org.onap.dcaegen2.services.prh.adapter.aai.main.AaiHttpClientFactory.createRequestDiagnosticContext;
+
+import org.onap.dcaegen2.services.prh.adapter.aai.api.AaiClientConfiguration;
+import org.onap.dcaegen2.services.prh.adapter.aai.api.AaiHttpClient;
+import org.onap.dcaegen2.services.prh.adapter.aai.model.AaiModel;
+import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.HttpRequest;
+import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.HttpResponse;
+import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.RxHttpClient;
+import org.onap.dcaegen2.services.sdk.rest.services.uri.URI;
+import reactor.core.publisher.Mono;
+
+public final class AaiHttpGetClient implements AaiHttpClient<AaiModel, HttpResponse> {
+
+ private final RxHttpClient httpClient;
+ private final AaiClientConfiguration configuration;
+
+
+ public AaiHttpGetClient(AaiClientConfiguration configuration, RxHttpClient httpClient) {
+ this.configuration = configuration;
+ this.httpClient = httpClient;
+ }
+
+ @Override
+ public Mono<HttpResponse> getAaiResponse(AaiModel aaiModel) {
+ final HttpRequest getRequest = createAaiGetRequest(getUri(aaiModel.getCorrelationId()),
+ createRequestDiagnosticContext(), configuration.aaiHeaders());
+
+ return httpClient.call(getRequest);
+ }
+
+
+ private String getUri(String pnfName) {
+ return new URI.URIBuilder().path(configuration.pnfUrl() + "/" + pnfName).build().toString();
+ }
+}
diff --git a/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/api/patch/AaiHttpPatchClient.java b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/api/patch/AaiHttpPatchClient.java
new file mode 100644
index 00000000..cf65547f
--- /dev/null
+++ b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/api/patch/AaiHttpPatchClient.java
@@ -0,0 +1,71 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * DCAEGEN2-SERVICES-SDK
+ * ================================================================================
+ * 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.adapter.aai.api.patch;
+
+import static org.onap.dcaegen2.services.prh.adapter.aai.impl.AaiRequests.createAaiPatchRequest;
+import static org.onap.dcaegen2.services.prh.adapter.aai.main.AaiHttpClientFactory.createRequestDiagnosticContext;
+
+import io.vavr.collection.HashMap;
+import io.vavr.collection.Map;
+import org.onap.dcaegen2.services.prh.adapter.aai.api.AaiClientConfiguration;
+import org.onap.dcaegen2.services.prh.adapter.aai.api.AaiHttpClient;
+import org.onap.dcaegen2.services.prh.adapter.aai.model.AaiModel;
+import org.onap.dcaegen2.services.prh.adapter.aai.model.JsonBodyBuilder;
+import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.HttpRequest;
+import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.HttpResponse;
+import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.RxHttpClient;
+import org.onap.dcaegen2.services.sdk.rest.services.uri.URI;
+import reactor.core.publisher.Mono;
+
+public final class AaiHttpPatchClient implements AaiHttpClient<AaiModel, HttpResponse> {
+
+ private final static Map<String, String> CONTENT_TYPE = HashMap.of("Content-Type", "application/merge-patch+json");
+
+ private RxHttpClient httpClient;
+ private final AaiClientConfiguration configuration;
+ private final JsonBodyBuilder jsonBodyBuilder;
+
+
+ public AaiHttpPatchClient(final AaiClientConfiguration configuration, JsonBodyBuilder jsonBodyBuilder,
+ RxHttpClient httpClient) {
+ this.configuration = configuration;
+ this.jsonBodyBuilder = jsonBodyBuilder;
+ this.httpClient = httpClient;
+ }
+
+ public Mono<HttpResponse> getAaiResponse(AaiModel aaiModel) {
+ final Map<String, String> headers = CONTENT_TYPE.merge(HashMap.ofAll(configuration.aaiHeaders()));
+
+ final HttpRequest aaiPatchRequest = createAaiPatchRequest(
+ getUri(aaiModel.getCorrelationId()),
+ createRequestDiagnosticContext(),
+ headers.toJavaMap(),
+ jsonBodyBuilder,
+ aaiModel);
+
+ return httpClient.call(aaiPatchRequest);
+ }
+
+ private String getUri(String pnfName) {
+ return new URI.URIBuilder()
+ .path(configuration.pnfUrl() + "/" + pnfName).build().toString();
+ }
+}
diff --git a/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/api/put/AaiHttpPutClient.java b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/api/put/AaiHttpPutClient.java
new file mode 100644
index 00000000..590c7c0d
--- /dev/null
+++ b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/api/put/AaiHttpPutClient.java
@@ -0,0 +1,57 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * DCAEGEN2-SERVICES-SDK
+ * ================================================================================
+ * Copyright (C) 2019 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.adapter.aai.api.put;
+
+import static org.onap.dcaegen2.services.prh.adapter.aai.impl.AaiRequests.createAaiPutRequest;
+import static org.onap.dcaegen2.services.prh.adapter.aai.main.AaiHttpClientFactory.createRequestDiagnosticContext;
+
+import org.onap.dcaegen2.services.prh.adapter.aai.api.AaiClientConfiguration;
+import org.onap.dcaegen2.services.prh.adapter.aai.api.AaiHttpClient;
+import org.onap.dcaegen2.services.prh.adapter.aai.model.AaiModel;
+import org.onap.dcaegen2.services.prh.adapter.aai.model.JsonBodyBuilder;
+import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.HttpRequest;
+import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.HttpResponse;
+import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.RxHttpClient;
+import reactor.core.publisher.Mono;
+
+public class AaiHttpPutClient implements AaiHttpClient<AaiModel, HttpResponse> {
+
+ private RxHttpClient httpClient;
+ private final AaiClientConfiguration configuration;
+ private final JsonBodyBuilder jsonBodyBuilder;
+ private final String uri;
+
+ public AaiHttpPutClient(final AaiClientConfiguration configuration, JsonBodyBuilder jsonBodyBuilder, String uri,
+ RxHttpClient httpClient) {
+ this.configuration = configuration;
+ this.jsonBodyBuilder = jsonBodyBuilder;
+ this.uri = uri;
+ this.httpClient = httpClient;
+ }
+
+ @Override
+ public Mono<HttpResponse> getAaiResponse(AaiModel aaiModel) {
+ final HttpRequest aaiPutRequest = createAaiPutRequest(uri, createRequestDiagnosticContext(),
+ configuration.aaiHeaders(), jsonBodyBuilder, aaiModel);
+ return httpClient.call(aaiPutRequest);
+ }
+}
diff --git a/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/impl/AaiRequests.java b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/impl/AaiRequests.java
new file mode 100644
index 00000000..01e13da7
--- /dev/null
+++ b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/impl/AaiRequests.java
@@ -0,0 +1,85 @@
+/*
+ * ============LICENSE_START=======================================================
+ * DCAEGEN2-SERVICES-SDK
+ * ================================================================================
+ * Copyright (C) 2018-2019 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.adapter.aai.impl;
+
+import io.vavr.collection.HashMap;
+import java.util.Map;
+import org.onap.dcaegen2.services.prh.adapter.aai.model.ClientModel;
+import org.onap.dcaegen2.services.prh.adapter.aai.model.JsonBodyBuilder;
+import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.HttpMethod;
+import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.HttpRequest;
+import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.ImmutableHttpRequest;
+import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.RequestBody;
+import org.onap.dcaegen2.services.sdk.rest.services.model.logging.RequestDiagnosticContext;
+
+
+public final class AaiRequests {
+
+ private AaiRequests(){}
+
+ public static HttpRequest createAaiPatchRequest(String url,
+ RequestDiagnosticContext context,
+ Map<String, String> customHeaders,
+ JsonBodyBuilder jsonBodyBuilder,
+ ClientModel clientModel) {
+
+ return buildAaiRequestWithBody(url, context, customHeaders,
+ jsonBodyBuilder, clientModel, HttpMethod.PATCH);
+ }
+
+ public static HttpRequest createAaiPutRequest(String url,
+ RequestDiagnosticContext context,
+ Map<String, String> customHeaders,
+ JsonBodyBuilder jsonBodyBuilder,
+ ClientModel clientModel) {
+
+ return buildAaiRequestWithBody(url, context, customHeaders,
+ jsonBodyBuilder, clientModel, HttpMethod.PUT);
+ }
+
+ private static HttpRequest buildAaiRequestWithBody(String url,
+ RequestDiagnosticContext context,
+ Map<String, String> customHeaders,
+ JsonBodyBuilder jsonBodyBuilder,
+ ClientModel clientModel,
+ HttpMethod method) {
+
+ String jsonBody = jsonBodyBuilder.createJsonBody(clientModel);
+
+ return ImmutableHttpRequest.builder()
+ .url(url)
+ .customHeaders(HashMap.ofAll(customHeaders))
+ .diagnosticContext(context)
+ .body(RequestBody.fromString(jsonBody))
+ .method(method)
+ .build();
+ }
+
+ public static HttpRequest createAaiGetRequest(String url,
+ RequestDiagnosticContext context,
+ Map<String, String> customHeaders) {
+ return ImmutableHttpRequest.builder()
+ .method(HttpMethod.GET)
+ .url(url)
+ .customHeaders(HashMap.ofAll(customHeaders))
+ .diagnosticContext(context)
+ .build();
+ }
+}
diff --git a/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/main/AaiHttpClientFactory.java b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/main/AaiHttpClientFactory.java
new file mode 100644
index 00000000..69b5cf83
--- /dev/null
+++ b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/main/AaiHttpClientFactory.java
@@ -0,0 +1,71 @@
+/*
+ * ============LICENSE_START=======================================================
+ * DCAEGEN2-SERVICES-SDK
+ * ================================================================================
+ * Copyright (C) 2018-2019 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.adapter.aai.main;
+
+import java.nio.file.Paths;
+import java.util.UUID;
+import org.onap.dcaegen2.services.prh.adapter.aai.api.AaiClientConfiguration;
+import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.RxHttpClient;
+import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.RxHttpClientFactory;
+import org.onap.dcaegen2.services.sdk.rest.services.model.logging.ImmutableRequestDiagnosticContext;
+import org.onap.dcaegen2.services.sdk.rest.services.model.logging.RequestDiagnosticContext;
+import org.onap.dcaegen2.services.sdk.security.ssl.ImmutableSecurityKeys;
+import org.onap.dcaegen2.services.sdk.security.ssl.ImmutableSecurityKeysStore;
+import org.onap.dcaegen2.services.sdk.security.ssl.Passwords;
+import org.onap.dcaegen2.services.sdk.security.ssl.SecurityKeys;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class AaiHttpClientFactory {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(AaiHttpClientFactory.class);
+
+ private final AaiClientConfiguration configuration;
+
+ public AaiHttpClientFactory(AaiClientConfiguration configuration) {
+ this.configuration = configuration;
+ }
+
+ public RxHttpClient build() {
+ LOGGER.debug("Setting ssl context");
+
+ if (configuration.enableAaiCertAuth()) {
+ return RxHttpClientFactory.create(createSslKeys());
+ } else {
+ return RxHttpClientFactory.createInsecure();
+ }
+ }
+
+ private SecurityKeys createSslKeys() {
+ return ImmutableSecurityKeys.builder()
+ .keyStore(ImmutableSecurityKeysStore.of(Paths.get(configuration.keyStorePath())))
+ .keyStorePassword(Passwords.fromPath(Paths.get(configuration.keyStorePasswordPath())))
+ .trustStore(ImmutableSecurityKeysStore.of(Paths.get(configuration.trustStorePath())))
+ .trustStorePassword(Passwords.fromPath(Paths.get(configuration.trustStorePasswordPath())))
+ .build();
+ }
+
+ public static RequestDiagnosticContext createRequestDiagnosticContext() {
+ return ImmutableRequestDiagnosticContext.builder()
+ .invocationId(UUID.randomUUID()).requestId(UUID.randomUUID()).build();
+ }
+
+}
diff --git a/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/model/AaiModel.java b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/model/AaiModel.java
new file mode 100644
index 00000000..0d99abbd
--- /dev/null
+++ b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/model/AaiModel.java
@@ -0,0 +1,27 @@
+/*
+ * ============LICENSE_START=======================================================
+ * DCAEGEN2-SERVICES-SDK
+ * ================================================================================
+ * 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.adapter.aai.model;
+
+@FunctionalInterface
+public interface AaiModel extends ClientModel {
+
+ String getCorrelationId();
+}
diff --git a/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/model/AaiServiceInstanceQueryModel.java b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/model/AaiServiceInstanceQueryModel.java
new file mode 100644
index 00000000..bc87a865
--- /dev/null
+++ b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/model/AaiServiceInstanceQueryModel.java
@@ -0,0 +1,31 @@
+/*
+ * ============LICENSE_START=======================================================
+ * DCAEGEN2-SERVICES-SDK
+ * ================================================================================
+ * 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.adapter.aai.model;
+
+import org.immutables.value.Value;
+
+@Value.Style(stagedBuilder = true)
+@Value.Immutable
+public interface AaiServiceInstanceQueryModel extends ClientModel {
+ String customerId();
+ String serviceType();
+ String serviceInstanceId();
+}
diff --git a/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/model/ClientModel.java b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/model/ClientModel.java
new file mode 100644
index 00000000..4c1d2e1e
--- /dev/null
+++ b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/model/ClientModel.java
@@ -0,0 +1,24 @@
+/*
+ * ============LICENSE_START=======================================================
+ * DCAEGEN2-SERVICES-SDK
+ * ================================================================================
+ * 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.adapter.aai.model;
+
+public interface ClientModel {
+}
diff --git a/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/model/DmaapModel.java b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/model/DmaapModel.java
new file mode 100644
index 00000000..99c9e2a6
--- /dev/null
+++ b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/model/DmaapModel.java
@@ -0,0 +1,24 @@
+/*
+ * ============LICENSE_START=======================================================
+ * DCAEGEN2-SERVICES-SDK
+ * ================================================================================
+ * 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.adapter.aai.model;
+
+public interface DmaapModel extends ClientModel {
+}
diff --git a/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/model/JsonBodyBuilder.java b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/model/JsonBodyBuilder.java
new file mode 100644
index 00000000..c13798f9
--- /dev/null
+++ b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/model/JsonBodyBuilder.java
@@ -0,0 +1,34 @@
+/*
+ * ============LICENSE_START=======================================================
+ * DCAEGEN2-SERVICES-SDK
+ * ================================================================================
+ * 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.adapter.aai.model;
+
+@FunctionalInterface
+public interface JsonBodyBuilder<T extends ClientModel> {
+
+ /**
+ * Method for serialization object by GSON.
+ *
+ * @param t - object which will be serialized
+ * @return string from serialization
+ */
+
+ String createJsonBody(T t);
+} \ No newline at end of file
diff --git a/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/AaiJsonBodyBuilderImpl.java b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/AaiJsonBodyBuilderImpl.java
index 7ff9b8b6..c53da879 100644
--- a/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/AaiJsonBodyBuilderImpl.java
+++ b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/AaiJsonBodyBuilderImpl.java
@@ -22,10 +22,9 @@ package org.onap.dcaegen2.services.prh.model;
import com.google.gson.GsonBuilder;
import com.google.gson.TypeAdapterFactory;
-import org.onap.dcaegen2.services.prh.model.ImmutableConsumerDmaapModel.Builder;
-import org.onap.dcaegen2.services.sdk.rest.services.aai.client.model.JsonBodyBuilder;
-
import java.util.ServiceLoader;
+import org.onap.dcaegen2.services.prh.adapter.aai.model.JsonBodyBuilder;
+import org.onap.dcaegen2.services.prh.model.ImmutableConsumerDmaapModel.Builder;
import org.springframework.util.StringUtils;
diff --git a/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/ConsumerDmaapModel.java b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/ConsumerDmaapModel.java
index d492e6d7..7afb7f10 100644
--- a/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/ConsumerDmaapModel.java
+++ b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/ConsumerDmaapModel.java
@@ -22,11 +22,11 @@ package org.onap.dcaegen2.services.prh.model;
import com.google.gson.JsonObject;
import com.google.gson.annotations.SerializedName;
-import org.springframework.lang.Nullable;
import org.immutables.gson.Gson;
import org.immutables.value.Value;
-import org.onap.dcaegen2.services.sdk.rest.services.aai.client.model.AaiModel;
-import org.onap.dcaegen2.services.sdk.rest.services.aai.client.model.DmaapModel;
+import org.onap.dcaegen2.services.prh.adapter.aai.model.AaiModel;
+import org.onap.dcaegen2.services.prh.adapter.aai.model.DmaapModel;
+import org.springframework.lang.Nullable;
/**
* @author <a href="mailto:przemyslaw.wasala@nokia.com">Przemysław Wąsala</a> on 5/8/18
diff --git a/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/bbs/LogicalLink.java b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/bbs/LogicalLink.java
index 61946158..ffef0923 100644
--- a/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/bbs/LogicalLink.java
+++ b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/bbs/LogicalLink.java
@@ -22,9 +22,9 @@ package org.onap.dcaegen2.services.prh.model.bbs;
import com.google.gson.annotations.SerializedName;
import org.immutables.gson.Gson;
import org.immutables.value.Value;
+import org.onap.dcaegen2.services.prh.adapter.aai.model.ClientModel;
import org.onap.dcaegen2.services.prh.model.ImmutableRelationship;
import org.onap.dcaegen2.services.prh.model.Relationship;
-import org.onap.dcaegen2.services.sdk.rest.services.aai.client.model.ClientModel;
import org.springframework.lang.Nullable;
@Value.Immutable
diff --git a/prh-commons/src/test/java/org/onap/dcaegen2/services/prh/adapter/aai/AaiClientConfigurations.java b/prh-commons/src/test/java/org/onap/dcaegen2/services/prh/adapter/aai/AaiClientConfigurations.java
new file mode 100644
index 00000000..072fa2d4
--- /dev/null
+++ b/prh-commons/src/test/java/org/onap/dcaegen2/services/prh/adapter/aai/AaiClientConfigurations.java
@@ -0,0 +1,60 @@
+/*
+ * ============LICENSE_START=======================================================
+ * DCAEGEN2-SERVICES-SDK
+ * ================================================================================
+ * Copyright (C) 2019 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.adapter.aai;
+
+import java.util.HashMap;
+import java.util.Map;
+import org.onap.dcaegen2.services.prh.adapter.aai.api.AaiClientConfiguration;
+import org.onap.dcaegen2.services.prh.adapter.aai.api.ImmutableAaiClientConfiguration;
+
+public final class AaiClientConfigurations {
+
+ private AaiClientConfigurations() {
+ }
+
+ public static AaiClientConfiguration secureConfiguration() {
+ return secureConfiguration(new HashMap<>());
+ }
+
+ public static AaiClientConfiguration secureConfiguration(Map<String, String> headers) {
+ return validConfiguration(headers, true);
+ }
+
+ public static AaiClientConfiguration insecureConfiguration() {
+ return validConfiguration(new HashMap<>(), false);
+ }
+
+ private static AaiClientConfiguration validConfiguration(Map<String, String> headers, boolean secure) {
+ return new ImmutableAaiClientConfiguration.Builder()
+ .baseUrl("https://aai.onap.svc.cluster.local:8443/aai/v12")
+ .aaiUserName("sample-username")
+ .aaiUserPassword("sample-password")
+ .aaiIgnoreSslCertificateErrors(false)
+ .trustStorePath("/trust.pkcs12")
+ .trustStorePasswordPath("/trust.pass")
+ .keyStorePath("/server.pkcs12")
+ .keyStorePasswordPath("/server.pass")
+ .enableAaiCertAuth(secure)
+ .aaiHeaders(headers)
+ .aaiServiceInstancePath(
+ "/business/customers/customer/${customer}/service-subscriptions/service-subscription/${serviceType}/service-instances/service-instance/${serviceInstanceId}")
+ .build();
+ }
+} \ No newline at end of file
diff --git a/prh-commons/src/test/java/org/onap/dcaegen2/services/prh/adapter/aai/AbstractHttpClientTest.java b/prh-commons/src/test/java/org/onap/dcaegen2/services/prh/adapter/aai/AbstractHttpClientTest.java
new file mode 100644
index 00000000..81f51ef9
--- /dev/null
+++ b/prh-commons/src/test/java/org/onap/dcaegen2/services/prh/adapter/aai/AbstractHttpClientTest.java
@@ -0,0 +1,42 @@
+/*
+ * ============LICENSE_START=======================================================
+ * DCAEGEN2-SERVICES-SDK
+ * ================================================================================
+ * Copyright (C) 2019 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.adapter.aai;
+
+import static org.mockito.Mockito.mock;
+
+import org.onap.dcaegen2.services.prh.adapter.aai.api.AaiClientConfiguration;
+import org.onap.dcaegen2.services.prh.adapter.aai.model.AaiModel;
+import org.onap.dcaegen2.services.prh.adapter.aai.model.JsonBodyBuilder;
+import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.HttpResponse;
+import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.RxHttpClient;
+import org.onap.dcaegen2.services.sdk.rest.services.uri.URI;
+
+public class AbstractHttpClientTest {
+
+ protected final AaiModel aaiModel = () -> "test-id";
+ protected final RxHttpClient httpClient = mock(RxHttpClient.class);
+ protected final JsonBodyBuilder bodyBuilder = mock(JsonBodyBuilder.class);
+ protected final HttpResponse response = mock(HttpResponse.class);
+
+
+ protected String constructAaiUri(AaiClientConfiguration configuration, String pnfName) {
+ return new URI.URIBuilder().path(configuration.pnfUrl() + "/" + pnfName).build().toString();
+ }
+}
diff --git a/prh-commons/src/test/java/org/onap/dcaegen2/services/prh/adapter/aai/get/AaiGetServiceInstanceClientTest.java b/prh-commons/src/test/java/org/onap/dcaegen2/services/prh/adapter/aai/get/AaiGetServiceInstanceClientTest.java
new file mode 100644
index 00000000..77317414
--- /dev/null
+++ b/prh-commons/src/test/java/org/onap/dcaegen2/services/prh/adapter/aai/get/AaiGetServiceInstanceClientTest.java
@@ -0,0 +1,72 @@
+/*
+ * ============LICENSE_START=======================================================
+ * DCAEGEN2-SERVICES-SDK
+ * ================================================================================
+ * Copyright (C) 2019 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.adapter.aai.get;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.argThat;
+import static org.mockito.BDDMockito.given;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.onap.dcaegen2.services.prh.adapter.aai.AaiClientConfigurations.secureConfiguration;
+
+import io.vavr.collection.HashMap;
+import io.vavr.collection.Map;
+import org.junit.jupiter.api.Test;
+import org.onap.dcaegen2.services.prh.adapter.aai.AbstractHttpClientTest;
+import org.onap.dcaegen2.services.prh.adapter.aai.api.get.AaiGetServiceInstanceClient;
+import org.onap.dcaegen2.services.prh.adapter.aai.model.AaiServiceInstanceQueryModel;
+import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.HttpRequest;
+import reactor.core.publisher.Mono;
+import reactor.test.StepVerifier;
+
+class AaiGetServiceInstanceClientTest extends AbstractHttpClientTest {
+
+ public static final String SERVICE_INSTANCE_PATH =
+ "https://aai.onap.svc.cluster.local:8443/aai/v12/business/customers/customer/Demonstration/"
+ + "service-subscriptions/service-subscription/VCPE/service-instances/service-instance/df018f76-7fc8-46ab-8444-7d67e1efc284";
+
+ @Test
+ void getAaiResponse_shouldCallGetMethod_withGivenAaiHeaders() {
+
+ // given
+ AaiServiceInstanceQueryModel model = mock(AaiServiceInstanceQueryModel.class);
+ Map<String, String> headers = HashMap.of("sample-key", "sample-value");
+ AaiGetServiceInstanceClient cut = new AaiGetServiceInstanceClient(secureConfiguration(headers.toJavaMap()),
+ httpClient);
+
+ given(model.customerId()).willReturn("Demonstration");
+ given(model.serviceInstanceId()).willReturn("df018f76-7fc8-46ab-8444-7d67e1efc284");
+ given(model.serviceType()).willReturn("VCPE");
+
+ given(httpClient.call(any(HttpRequest.class)))
+ .willReturn(Mono.just(response));
+
+ // when
+ StepVerifier
+ .create(cut.getAaiResponse(model))
+ .expectNext(response)
+ .verifyComplete();
+
+ //then
+ verify(httpClient)
+ .call(argThat(httpRequest -> httpRequest.customHeaders().equals(headers) &&
+ httpRequest.url().equals(SERVICE_INSTANCE_PATH)));
+ }
+}
diff --git a/prh-commons/src/test/java/org/onap/dcaegen2/services/prh/adapter/aai/get/AaiHttpGetClientTest.java b/prh-commons/src/test/java/org/onap/dcaegen2/services/prh/adapter/aai/get/AaiHttpGetClientTest.java
new file mode 100644
index 00000000..10fc0f49
--- /dev/null
+++ b/prh-commons/src/test/java/org/onap/dcaegen2/services/prh/adapter/aai/get/AaiHttpGetClientTest.java
@@ -0,0 +1,82 @@
+/*
+ * ============LICENSE_START=======================================================
+ * DCAEGEN2-SERVICES-SDK
+ * ================================================================================
+ * Copyright (C) 2019 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.adapter.aai.get;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.argThat;
+import static org.mockito.BDDMockito.given;
+import static org.mockito.Mockito.verify;
+import static org.onap.dcaegen2.services.prh.adapter.aai.AaiClientConfigurations.secureConfiguration;
+
+import io.vavr.collection.HashMap;
+import io.vavr.collection.Map;
+import org.junit.jupiter.api.Test;
+import org.onap.dcaegen2.services.prh.adapter.aai.AbstractHttpClientTest;
+import org.onap.dcaegen2.services.prh.adapter.aai.api.AaiClientConfiguration;
+import org.onap.dcaegen2.services.prh.adapter.aai.api.get.AaiHttpGetClient;
+import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.HttpRequest;
+import reactor.core.publisher.Mono;
+import reactor.test.StepVerifier;
+
+class AaiHttpGetClientTest extends AbstractHttpClientTest {
+
+ @Test
+ void getAaiResponse_shouldCallGetMethod_withGivenAaiHeaders() {
+
+ // given
+ Map<String, String> headers = HashMap.of("sample-key", "sample-value");
+ AaiHttpGetClient cut = new AaiHttpGetClient(secureConfiguration(headers.toJavaMap()), httpClient);
+
+ given(httpClient.call(any(HttpRequest.class)))
+ .willReturn(Mono.just(response));
+
+ // when
+ StepVerifier
+ .create(cut.getAaiResponse(aaiModel))
+ .expectNext(response)
+ .verifyComplete();
+
+ //then
+ verify(httpClient)
+ .call(argThat(httpRequest -> httpRequest.customHeaders().equals(headers)));
+ }
+
+ @Test
+ void getAaiResponse_shouldCallGetMethod_withProperUri() {
+
+ // given
+ AaiClientConfiguration configuration = secureConfiguration();
+ String uri = constructAaiUri(configuration, aaiModel.getCorrelationId());
+ AaiHttpGetClient cut = new AaiHttpGetClient(configuration, httpClient);
+
+ given(httpClient.call(any(HttpRequest.class)))
+ .willReturn(Mono.just(response));
+
+ // when
+ StepVerifier
+ .create(cut.getAaiResponse(aaiModel))
+ .expectNext(response)
+ .verifyComplete();
+
+ // then
+ verify(httpClient)
+ .call(argThat(httpRequest -> httpRequest.url().equals(uri)));
+ }
+}
diff --git a/prh-commons/src/test/java/org/onap/dcaegen2/services/prh/adapter/aai/patch/AaiHttpPatchClientTest.java b/prh-commons/src/test/java/org/onap/dcaegen2/services/prh/adapter/aai/patch/AaiHttpPatchClientTest.java
new file mode 100644
index 00000000..6493b567
--- /dev/null
+++ b/prh-commons/src/test/java/org/onap/dcaegen2/services/prh/adapter/aai/patch/AaiHttpPatchClientTest.java
@@ -0,0 +1,95 @@
+/*
+ * ============LICENSE_START=======================================================
+ * DCAEGEN2-SERVICES-SDK
+ * ================================================================================
+ * Copyright (C) 2019 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.adapter.aai.patch;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.argThat;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.BDDMockito.given;
+import static org.mockito.Mockito.verify;
+import static org.onap.dcaegen2.services.prh.adapter.aai.AaiClientConfigurations.secureConfiguration;
+
+import io.vavr.collection.HashMap;
+import io.vavr.collection.Map;
+import org.junit.jupiter.api.Test;
+import org.onap.dcaegen2.services.prh.adapter.aai.AbstractHttpClientTest;
+import org.onap.dcaegen2.services.prh.adapter.aai.api.AaiClientConfiguration;
+import org.onap.dcaegen2.services.prh.adapter.aai.api.patch.AaiHttpPatchClient;
+import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.HttpRequest;
+import reactor.core.publisher.Mono;
+import reactor.test.StepVerifier;
+
+class AaiHttpPatchClientTest extends AbstractHttpClientTest {
+
+ private final Map<String, String> DEFAULT_PATCH_HEADERS =
+ HashMap.of("Content-Type", "application/merge-patch+json");
+
+ @Test
+ void getAaiResponse_shouldCallPatchMethod_withGivenHeaders_combinedWithContentType() {
+
+ // given
+ Map<String, String> headers = HashMap.of("sample-key", "sample-value");
+ Map<String, String> expectedHeaders = DEFAULT_PATCH_HEADERS.merge(headers);
+
+ AaiHttpPatchClient cut =
+ new AaiHttpPatchClient(secureConfiguration(headers.toJavaMap()), bodyBuilder, httpClient);
+
+ given(bodyBuilder.createJsonBody(eq(aaiModel)))
+ .willReturn("test-body");
+
+ given(httpClient.call(any(HttpRequest.class)))
+ .willReturn(Mono.just(response));
+
+ // when
+ StepVerifier
+ .create(cut.getAaiResponse(aaiModel))
+ .expectNext(response)
+ .verifyComplete();
+
+ // then
+ verify(httpClient)
+ .call(argThat(httpRequest -> httpRequest.customHeaders().equals(expectedHeaders)));
+ }
+
+ @Test
+ void getAaiResponse_shouldCallPatchMethod_withProperUri() {
+
+ // given
+ AaiClientConfiguration configuration = secureConfiguration();
+ String uri = constructAaiUri(configuration, aaiModel.getCorrelationId());
+ AaiHttpPatchClient cut = new AaiHttpPatchClient(configuration, bodyBuilder, httpClient);
+
+ given(bodyBuilder.createJsonBody(eq(aaiModel)))
+ .willReturn("test-body");
+
+ given(httpClient.call(any(HttpRequest.class)))
+ .willReturn(Mono.just(response));
+
+ // when
+ StepVerifier
+ .create(cut.getAaiResponse(aaiModel))
+ .expectNext(response)
+ .verifyComplete();
+
+ // then
+ verify(httpClient)
+ .call(argThat(httpRequest -> httpRequest.url().equals(uri)));
+ }
+}
diff --git a/prh-commons/src/test/java/org/onap/dcaegen2/services/prh/adapter/aai/put/AaiHttpPutClientTest.java b/prh-commons/src/test/java/org/onap/dcaegen2/services/prh/adapter/aai/put/AaiHttpPutClientTest.java
new file mode 100644
index 00000000..13a49174
--- /dev/null
+++ b/prh-commons/src/test/java/org/onap/dcaegen2/services/prh/adapter/aai/put/AaiHttpPutClientTest.java
@@ -0,0 +1,81 @@
+/*
+ * ============LICENSE_START=======================================================
+ * DCAEGEN2-SERVICES-SDK
+ * ================================================================================
+ * Copyright (C) 2019 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.adapter.aai.put;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.argThat;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.BDDMockito.given;
+import static org.mockito.Mockito.verify;
+import static org.onap.dcaegen2.services.prh.adapter.aai.AaiClientConfigurations.secureConfiguration;
+
+import io.vavr.collection.HashMap;
+import io.vavr.collection.Map;
+import org.junit.jupiter.api.Test;
+import org.onap.dcaegen2.services.prh.adapter.aai.AbstractHttpClientTest;
+import org.onap.dcaegen2.services.prh.adapter.aai.api.put.AaiHttpPutClient;
+import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.HttpRequest;
+import reactor.core.publisher.Mono;
+import reactor.test.StepVerifier;
+
+class AaiHttpPutClientTest extends AbstractHttpClientTest {
+
+ @Test
+ void getAaiResponse_shouldCallPutMethod_withGivenAaiHeaders() {
+ Map<String, String> headers = HashMap.of("sample-key", "sample-value");
+ AaiHttpPutClient cut = new AaiHttpPutClient(secureConfiguration(headers.toJavaMap()), bodyBuilder, "",
+ httpClient);
+
+ given(bodyBuilder.createJsonBody(eq(aaiModel)))
+ .willReturn("test-body");
+
+ given(httpClient.call(any(HttpRequest.class)))
+ .willReturn(Mono.just(response));
+
+ StepVerifier
+ .create(cut.getAaiResponse(aaiModel))
+ .expectNext(response)
+ .verifyComplete();
+
+ verify(httpClient)
+ .call(argThat(httpRequest -> httpRequest.customHeaders().equals(headers)));
+ }
+
+ @Test
+ void getAaiResponse_shouldCallPutMethod_withProperUri() {
+ String uri = "test-uri";
+ AaiHttpPutClient cut = new AaiHttpPutClient(secureConfiguration(), bodyBuilder, uri, httpClient);
+
+ given(bodyBuilder.createJsonBody(eq(aaiModel)))
+ .willReturn("test-body");
+
+ given(httpClient.call(any(HttpRequest.class)))
+ .willReturn(Mono.just(response));
+
+ StepVerifier
+ .create(cut.getAaiResponse(aaiModel))
+ .expectNext(response)
+ .verifyComplete();
+
+ verify(httpClient)
+ .call(argThat(httpRequest -> httpRequest.url().equals(uri)));
+
+ }
+}
diff --git a/prh-commons/src/test/resources/server.pass b/prh-commons/src/test/resources/server.pass
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/prh-commons/src/test/resources/server.pass
diff --git a/prh-commons/src/test/resources/server.pkcs12 b/prh-commons/src/test/resources/server.pkcs12
new file mode 100644
index 00000000..40e25932
--- /dev/null
+++ b/prh-commons/src/test/resources/server.pkcs12
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC225TsqniWsqLQ
+YmOmmZxlpzBwhzU4pXiRfIZBUuT+ajPQVFx+zVv6ecEjXEFgQfNR60VZ3h6Zus32
+bVD7XKlwuL6U5P7Mt1k/K5RFPrr9WGFT/K9I8V69VmfLBnMTo4YjDEaTKiJqAC0W
+pN6Jm7ZLXzHNmHmm+CdufeNcKQ0kKFI0/C5V4X8o2wYo7ptC2PnKrLleapNqq86N
+GSw+pudWmlhMnsrEP9yWp2Crz2QynbwGDfvfLnenf643ViCV8MRBqdX6VtKfnxzl
+IYzAdWuYJDwyKVOvDBOgWSd8SWW9aqly0qZFIrTCFmUlsecTYXIn7J8VsoWX54Xf
+Bp8VNy3/AgMBAAECggEATzN4o7GKnast/hg/lU9/gEAUKQlHMgvp1woalHy1FsUl
+QBzqGzoTlr/Zudkhr/Gg1GCVH0Gn+2n//7aFlvohoeNDGPa+rijUDRpxFDUBhO4c
+6eXOfkedg2DDgBqBCYaQeOm+P8vGMCd3YBF1GiFJqgfHaIecWYeufJsmOSrGuFvK
+1OvHpvg4/FLLQqgVcVO812kD4UwSOKnZVnPuZ3pzQviUZvO8ZxI/LkzQB1EdH6u3
+rBtiGslYkiKl5cGpH39/Dx2nKhHfvSnkfsm7koB00Bl41yy61GPwdl4XUwg8LUhX
+TbsuoIPGTJX/2FUMn0UnAdDJm29hE4eyHyYOhew8gQKBgQDlAeUcnFr9uxe0i7cg
+6ctJlNIKJjlA1tH4qIMEytdn06STo9g2j8X5HVE0FX/3+gAYDtEVICTF66w8Y474
+aeazvf+TCfkxtEOiH2afvaNkIkfzKR0ceB48DECT0DCF7xha5rJVf/W4GpCz2WkZ
+ojDzw5ZVvzbx/FaF9A/IseJ63wKBgQDMaSjiephhdlCERGPdwWMg3AfthEX/VHM0
+YugbVjjYjDbn2pMkntW2hUuVXP8HD+9DnQZo0/c/hxe28Q5b+2fjZephdctnY8tL
+XWbaEerM2lxEjmrpA4jYTBZJ9nMsxkEYHGHb5I586aS2YaZ12e7DoKMFdl0EZzvi
+zGPIxSzQ4QKBgAxVv8t8uIH2M96rr997+FEsTOvzBx5w87pbCUOW0WdsRO8W4ix+
+LgGvDJKrncrzklG5apWit5hZi1ttWWQUADMqRrvay6tbtFDlNBfilQxttEZqroC8
+D5TYbBoKGrL8H+m1h2GHlOqns6ecTEbvL4fRvyU7OXBrURXCAZ+jxTktAoGACbQI
+O9AEAcRjCBRTBUjT0tB/E9hOllNE8LytNfb+1dC6HoFysK9Vh8eGEf4LISOxgO0o
+S7ucJgjcqFODEfy6LsI8wQmdcTf8g4RYiIuHMNhAvwRfsNX5HgNmn3Yye3Khzmoy
+fwS3etiAeCPkif2hZunuMykuOzJHVnnLVtF9UiECgYEA41d7FgUcnfPIyA5xLg7K
+lRgjFMsc68uzoCBQww2kio0HNJpdOPBJlg6oHHfYKriv2r9793jETRVwjSNPlKZb
+vqm9yhnbXuahYBZSgdo2W+NbhP6IbJ0vrF4t9g6byjancQptaCjNIr9St9g+Ugly
+8m0n3gIT/+Lr+it63cgk8SA=
+-----END PRIVATE KEY-----
diff --git a/prh-commons/src/test/resources/transaction.json b/prh-commons/src/test/resources/transaction.json
new file mode 100644
index 00000000..5cbb5621
--- /dev/null
+++ b/prh-commons/src/test/resources/transaction.json
@@ -0,0 +1,11 @@
+{
+ "operations": [
+ {
+ "action": "put",
+ "uri": "/network/logical-links/logical-link/foo",
+ "body": {
+ "link-name": "foo"
+ }
+ }
+ ]
+} \ No newline at end of file
diff --git a/prh-commons/src/test/resources/trust.pass b/prh-commons/src/test/resources/trust.pass
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/prh-commons/src/test/resources/trust.pass
diff --git a/prh-commons/src/test/resources/trust.pkcs12 b/prh-commons/src/test/resources/trust.pkcs12
new file mode 100644
index 00000000..01b61373
--- /dev/null
+++ b/prh-commons/src/test/resources/trust.pkcs12
Binary files differ