aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--rest-services/aai-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/AaiHttpClientFactory.java16
-rw-r--r--rest-services/aai-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/get/AaiGetServiceInstanceClient.java17
-rw-r--r--rest-services/aai-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/get/AaiHttpGetClient.java10
-rw-r--r--rest-services/aai-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/patch/AaiHttpPatchClient.java12
-rw-r--r--rest-services/aai-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/put/AaiHttpPutClient.java7
-rw-r--r--rest-services/aai-client/src/test/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/AaiClientConfigurations.java63
-rw-r--r--rest-services/aai-client/src/test/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/AaiHttpClientFactoryTest.java73
-rw-r--r--rest-services/aai-client/src/test/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/AbstractHttpClientTest.java47
-rw-r--r--rest-services/aai-client/src/test/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/get/AaiGetServiceInstanceClientTest.java59
-rw-r--r--rest-services/aai-client/src/test/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/get/AaiHttpGetClientTest.java87
-rw-r--r--rest-services/aai-client/src/test/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/patch/AaiHttpPatchClientTest.java103
-rw-r--r--rest-services/aai-client/src/test/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/put/AaiHttpPutClientTest.java95
-rw-r--r--rest-services/aai-client/src/test/resources/server.pass0
-rw-r--r--rest-services/aai-client/src/test/resources/server.pkcs1228
-rw-r--r--rest-services/aai-client/src/test/resources/trust.pass0
-rw-r--r--rest-services/aai-client/src/test/resources/trust.pkcs12bin0 -> 1096 bytes
16 files changed, 588 insertions, 29 deletions
diff --git a/rest-services/aai-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/AaiHttpClientFactory.java b/rest-services/aai-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/AaiHttpClientFactory.java
index d2e109ee..9c097ef1 100644
--- a/rest-services/aai-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/AaiHttpClientFactory.java
+++ b/rest-services/aai-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/AaiHttpClientFactory.java
@@ -22,6 +22,9 @@ package org.onap.dcaegen2.services.sdk.rest.services.aai.client.service;
import io.netty.handler.ssl.SslContext;
import io.vavr.control.Try;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.UUID;
import org.onap.dcaegen2.services.sdk.rest.services.aai.client.config.AaiClientConfiguration;
import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.CloudHttpClient;
import org.onap.dcaegen2.services.sdk.rest.services.model.logging.ImmutableRequestDiagnosticContext;
@@ -34,21 +37,20 @@ import org.onap.dcaegen2.services.sdk.security.ssl.SslFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.Base64;
-import java.util.UUID;
-
public class AaiHttpClientFactory {
private static final Logger LOGGER = LoggerFactory.getLogger(AaiHttpClientFactory.class);
private final AaiClientConfiguration configuration;
- private final SslFactory sslFactory = new SslFactory();
-
+ private final SslFactory sslFactory;
public AaiHttpClientFactory(AaiClientConfiguration configuration) {
+ this(configuration, new SslFactory());
+ }
+
+ public AaiHttpClientFactory(AaiClientConfiguration configuration, SslFactory sslFactory) {
this.configuration = configuration;
+ this.sslFactory = sslFactory;
}
public CloudHttpClient build() {
diff --git a/rest-services/aai-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/get/AaiGetServiceInstanceClient.java b/rest-services/aai-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/get/AaiGetServiceInstanceClient.java
index f8300eb2..1838ce4a 100644
--- a/rest-services/aai-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/get/AaiGetServiceInstanceClient.java
+++ b/rest-services/aai-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/get/AaiGetServiceInstanceClient.java
@@ -20,6 +20,8 @@
package org.onap.dcaegen2.services.sdk.rest.services.aai.client.service.http.get;
+import static org.onap.dcaegen2.services.sdk.rest.services.aai.client.service.AaiHttpClientFactory.createRequestDiagnosticContext;
+
import io.vavr.collection.HashMap;
import io.vavr.collection.Map;
import org.apache.commons.text.StringSubstitutor;
@@ -31,20 +33,19 @@ import org.onap.dcaegen2.services.sdk.rest.services.model.AaiServiceInstanceQuer
import org.onap.dcaegen2.services.sdk.rest.services.uri.URI;
import reactor.core.publisher.Mono;
-import static org.onap.dcaegen2.services.sdk.rest.services.aai.client.service.AaiHttpClientFactory.createRequestDiagnosticContext;
-
public class AaiGetServiceInstanceClient implements
AaiHttpClient<AaiServiceInstanceQueryModel, HttpResponse> {
//variables for query "/business/customers/customer/${customer}/service-subscriptions/service-subscription/${serviceType}/service-instances/service-instance/${serviceInstanceId}"
- public static final String CUSTOMER = "customer";
- public static final String SERVICE_TYPE = "serviceType";
- public static final String SERVICE_INSTANCE_ID = "serviceInstanceId";
+ private static final String CUSTOMER = "customer";
+ private static final String SERVICE_TYPE = "serviceType";
+ private static final String SERVICE_INSTANCE_ID = "serviceInstanceId";
- private CloudHttpClient httpGetClient;
+ private final CloudHttpClient httpGetClient;
private final AaiClientConfiguration configuration;
- public AaiGetServiceInstanceClient(final AaiClientConfiguration configuration, final CloudHttpClient httpGetClient) {
+ public AaiGetServiceInstanceClient(final AaiClientConfiguration configuration,
+ final CloudHttpClient httpGetClient) {
this.configuration = configuration;
this.httpGetClient = httpGetClient;
}
@@ -74,4 +75,4 @@ public class AaiGetServiceInstanceClient implements
.build()
.toString();
}
-} \ No newline at end of file
+}
diff --git a/rest-services/aai-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/get/AaiHttpGetClient.java b/rest-services/aai-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/get/AaiHttpGetClient.java
index 1c3f20a6..7d511a9c 100644
--- a/rest-services/aai-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/get/AaiHttpGetClient.java
+++ b/rest-services/aai-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/get/AaiHttpGetClient.java
@@ -20,6 +20,8 @@
package org.onap.dcaegen2.services.sdk.rest.services.aai.client.service.http.get;
+import static org.onap.dcaegen2.services.sdk.rest.services.aai.client.service.AaiHttpClientFactory.createRequestDiagnosticContext;
+
import org.onap.dcaegen2.services.sdk.rest.services.aai.client.config.AaiClientConfiguration;
import org.onap.dcaegen2.services.sdk.rest.services.aai.client.service.http.AaiHttpClient;
import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.CloudHttpClient;
@@ -28,11 +30,9 @@ import org.onap.dcaegen2.services.sdk.rest.services.model.AaiModel;
import org.onap.dcaegen2.services.sdk.rest.services.uri.URI;
import reactor.core.publisher.Mono;
-import static org.onap.dcaegen2.services.sdk.rest.services.aai.client.service.AaiHttpClientFactory.createRequestDiagnosticContext;
-
public final class AaiHttpGetClient implements AaiHttpClient<AaiModel, HttpResponse> {
- private CloudHttpClient httpGetClient;
+ private final CloudHttpClient httpGetClient;
private final AaiClientConfiguration configuration;
@@ -43,7 +43,8 @@ public final class AaiHttpGetClient implements AaiHttpClient<AaiModel, HttpRespo
@Override
public Mono<HttpResponse> getAaiResponse(AaiModel aaiModel) {
- return httpGetClient.get(getUri(aaiModel.getCorrelationId()), createRequestDiagnosticContext(), configuration.aaiHeaders());
+ return httpGetClient
+ .get(getUri(aaiModel.getCorrelationId()), createRequestDiagnosticContext(), configuration.aaiHeaders());
}
private String getUri(String pnfName) {
@@ -53,5 +54,4 @@ public final class AaiHttpGetClient implements AaiHttpClient<AaiModel, HttpRespo
.port(configuration.aaiPort())
.path(configuration.aaiBasePath() + configuration.aaiPnfPath() + "/" + pnfName).build().toString();
}
-
}
diff --git a/rest-services/aai-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/patch/AaiHttpPatchClient.java b/rest-services/aai-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/patch/AaiHttpPatchClient.java
index f92dba99..679d9f18 100644
--- a/rest-services/aai-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/patch/AaiHttpPatchClient.java
+++ b/rest-services/aai-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/patch/AaiHttpPatchClient.java
@@ -20,6 +20,8 @@
package org.onap.dcaegen2.services.sdk.rest.services.aai.client.service.http.patch;
+import static org.onap.dcaegen2.services.sdk.rest.services.aai.client.service.AaiHttpClientFactory.createRequestDiagnosticContext;
+
import io.vavr.collection.HashMap;
import io.vavr.collection.Map;
import org.onap.dcaegen2.services.sdk.rest.services.aai.client.config.AaiClientConfiguration;
@@ -31,10 +33,8 @@ import org.onap.dcaegen2.services.sdk.rest.services.model.JsonBodyBuilder;
import org.onap.dcaegen2.services.sdk.rest.services.uri.URI;
import reactor.core.publisher.Mono;
-
-import static org.onap.dcaegen2.services.sdk.rest.services.aai.client.service.AaiHttpClientFactory.createRequestDiagnosticContext;
-
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 CloudHttpClient httpPatchClient;
@@ -42,7 +42,8 @@ public final class AaiHttpPatchClient implements AaiHttpClient<AaiModel, HttpRes
private final JsonBodyBuilder jsonBodyBuilder;
- public AaiHttpPatchClient(final AaiClientConfiguration configuration, JsonBodyBuilder jsonBodyBuilder, CloudHttpClient httpPatchClient) {
+ public AaiHttpPatchClient(final AaiClientConfiguration configuration, JsonBodyBuilder jsonBodyBuilder,
+ CloudHttpClient httpPatchClient) {
this.configuration = configuration;
this.jsonBodyBuilder = jsonBodyBuilder;
this.httpPatchClient = httpPatchClient;
@@ -66,5 +67,4 @@ public final class AaiHttpPatchClient implements AaiHttpClient<AaiModel, HttpRes
.port(configuration.aaiPort())
.path(configuration.aaiBasePath() + configuration.aaiPnfPath() + "/" + pnfName).build().toString();
}
-
-} \ No newline at end of file
+}
diff --git a/rest-services/aai-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/put/AaiHttpPutClient.java b/rest-services/aai-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/put/AaiHttpPutClient.java
index eb1a389f..ce9eccc3 100644
--- a/rest-services/aai-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/put/AaiHttpPutClient.java
+++ b/rest-services/aai-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/put/AaiHttpPutClient.java
@@ -21,6 +21,8 @@
package org.onap.dcaegen2.services.sdk.rest.services.aai.client.service.http.put;
+import static org.onap.dcaegen2.services.sdk.rest.services.aai.client.service.AaiHttpClientFactory.createRequestDiagnosticContext;
+
import org.onap.dcaegen2.services.sdk.rest.services.aai.client.config.AaiClientConfiguration;
import org.onap.dcaegen2.services.sdk.rest.services.aai.client.service.http.AaiHttpClient;
import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.CloudHttpClient;
@@ -29,8 +31,6 @@ import org.onap.dcaegen2.services.sdk.rest.services.model.AaiModel;
import org.onap.dcaegen2.services.sdk.rest.services.model.JsonBodyBuilder;
import reactor.core.publisher.Mono;
-import static org.onap.dcaegen2.services.sdk.rest.services.aai.client.service.AaiHttpClientFactory.createRequestDiagnosticContext;
-
public class AaiHttpPutClient implements AaiHttpClient<AaiModel, HttpResponse> {
private CloudHttpClient httpPutClient;
@@ -38,7 +38,8 @@ public class AaiHttpPutClient implements AaiHttpClient<AaiModel, HttpResponse> {
private final JsonBodyBuilder jsonBodyBuilder;
private final String uri;
- public AaiHttpPutClient(final AaiClientConfiguration configuration, JsonBodyBuilder jsonBodyBuilder, String uri, CloudHttpClient httpPutClient) {
+ public AaiHttpPutClient(final AaiClientConfiguration configuration, JsonBodyBuilder jsonBodyBuilder, String uri,
+ CloudHttpClient httpPutClient) {
this.configuration = configuration;
this.jsonBodyBuilder = jsonBodyBuilder;
this.uri = uri;
diff --git a/rest-services/aai-client/src/test/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/AaiClientConfigurations.java b/rest-services/aai-client/src/test/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/AaiClientConfigurations.java
new file mode 100644
index 00000000..ce8c07f6
--- /dev/null
+++ b/rest-services/aai-client/src/test/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/AaiClientConfigurations.java
@@ -0,0 +1,63 @@
+/*
+ * ============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.sdk.rest.services.aai.client;
+
+import java.util.HashMap;
+import java.util.Map;
+import org.onap.dcaegen2.services.sdk.rest.services.aai.client.config.AaiClientConfiguration;
+import org.onap.dcaegen2.services.sdk.rest.services.aai.client.config.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()
+ .aaiHost("sample-host")
+ .aaiUserName("sample-username")
+ .aaiUserPassword("sample-password")
+ .aaiIgnoreSslCertificateErrors(false)
+ .trustStorePath("/trust.pkcs12")
+ .trustStorePasswordPath("/trust.pass")
+ .keyStorePath("/server.pkcs12")
+ .keyStorePasswordPath("/server.pass")
+ .enableAaiCertAuth(secure)
+ .aaiHeaders(headers)
+ .aaiProtocol("sample-protocol")
+ .aaiPort(8080)
+ .aaiBasePath("sample-base-path")
+ .aaiPnfPath("sample-pnf-path")
+ .aaiServiceInstancePath("sample-instance-path")
+ .build();
+ }
+}
diff --git a/rest-services/aai-client/src/test/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/AaiHttpClientFactoryTest.java b/rest-services/aai-client/src/test/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/AaiHttpClientFactoryTest.java
new file mode 100644
index 00000000..7f5096e5
--- /dev/null
+++ b/rest-services/aai-client/src/test/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/AaiHttpClientFactoryTest.java
@@ -0,0 +1,73 @@
+/*
+ * ============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.sdk.rest.services.aai.client.service;
+
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+import static org.onap.dcaegen2.services.sdk.rest.services.aai.client.AaiClientConfigurations.insecureConfiguration;
+import static org.onap.dcaegen2.services.sdk.rest.services.aai.client.AaiClientConfigurations.secureConfiguration;
+
+import io.netty.handler.ssl.SslContext;
+import javax.net.ssl.SSLException;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.mockito.Mockito;
+import org.onap.dcaegen2.services.sdk.security.ssl.SecurityKeys;
+import org.onap.dcaegen2.services.sdk.security.ssl.SslFactory;
+
+class AaiHttpClientFactoryTest {
+
+ private SslFactory sslFactory;
+
+ @BeforeEach
+ void setup() {
+ this.sslFactory = Mockito.mock(SslFactory.class);
+ }
+
+ @Test
+ void createRequestDiagnosticContext_shouldReturnNonNullContext() {
+ assertNotNull(AaiHttpClientFactory.createRequestDiagnosticContext());
+ }
+
+ @Test
+ void build_onSecureConfigurationProvided_shouldReturnSecureClient() throws SSLException {
+ when(sslFactory.createSecureClientContext(any())).thenReturn(SslContext.newClientContext());
+ AaiHttpClientFactory cut = new AaiHttpClientFactory(secureConfiguration(), sslFactory);
+
+ cut.build();
+
+ verify(sslFactory).createSecureClientContext(any(SecurityKeys.class));
+ verify(sslFactory, never()).createInsecureClientContext();
+ }
+
+ @Test
+ void build_onInsecureConfigurationProvided_shouldReturnInsecureClient() throws SSLException {
+ when(sslFactory.createInsecureClientContext()).thenReturn(SslContext.newClientContext());
+ AaiHttpClientFactory cut = new AaiHttpClientFactory(insecureConfiguration(), sslFactory);
+
+ cut.build();
+
+ verify(sslFactory).createInsecureClientContext();
+ verify(sslFactory, never()).createSecureClientContext(any(SecurityKeys.class));
+ }
+}
diff --git a/rest-services/aai-client/src/test/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/AbstractHttpClientTest.java b/rest-services/aai-client/src/test/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/AbstractHttpClientTest.java
new file mode 100644
index 00000000..ee428713
--- /dev/null
+++ b/rest-services/aai-client/src/test/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/AbstractHttpClientTest.java
@@ -0,0 +1,47 @@
+/*
+ * ============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.sdk.rest.services.aai.client.service.http;
+
+import static org.mockito.Mockito.mock;
+
+import org.onap.dcaegen2.services.sdk.rest.services.aai.client.config.AaiClientConfiguration;
+import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.CloudHttpClient;
+import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.HttpResponse;
+import org.onap.dcaegen2.services.sdk.rest.services.model.AaiModel;
+import org.onap.dcaegen2.services.sdk.rest.services.model.JsonBodyBuilder;
+import org.onap.dcaegen2.services.sdk.rest.services.uri.URI;
+
+public class AbstractHttpClientTest {
+
+ protected final AaiModel aaiModel = () -> "test-id";
+ protected final CloudHttpClient httpClient = mock(CloudHttpClient.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()
+ .scheme(configuration.aaiProtocol())
+ .host(configuration.aaiHost())
+ .port(configuration.aaiPort())
+ .path(configuration.aaiBasePath() + configuration.aaiPnfPath() + "/" + pnfName)
+ .build().toString();
+ }
+}
diff --git a/rest-services/aai-client/src/test/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/get/AaiGetServiceInstanceClientTest.java b/rest-services/aai-client/src/test/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/get/AaiGetServiceInstanceClientTest.java
new file mode 100644
index 00000000..d6199acd
--- /dev/null
+++ b/rest-services/aai-client/src/test/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/get/AaiGetServiceInstanceClientTest.java
@@ -0,0 +1,59 @@
+/*
+ * ============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.sdk.rest.services.aai.client.service.http.get;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyMap;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.BDDMockito.given;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.onap.dcaegen2.services.sdk.rest.services.aai.client.AaiClientConfigurations.secureConfiguration;
+
+import java.util.HashMap;
+import java.util.Map;
+import org.junit.jupiter.api.Test;
+import org.onap.dcaegen2.services.sdk.rest.services.aai.client.service.http.AbstractHttpClientTest;
+import org.onap.dcaegen2.services.sdk.rest.services.model.AaiServiceInstanceQueryModel;
+import org.onap.dcaegen2.services.sdk.rest.services.model.logging.RequestDiagnosticContext;
+import reactor.core.publisher.Mono;
+import reactor.test.StepVerifier;
+
+class AaiGetServiceInstanceClientTest extends AbstractHttpClientTest {
+
+ @Test
+ void getAaiResponse_shouldCallGetMethod_withGivenAaiHeaders() {
+ AaiServiceInstanceQueryModel model = mock(AaiServiceInstanceQueryModel.class);
+ Map<String, String> headers = new HashMap<>();
+ AaiGetServiceInstanceClient cut = new AaiGetServiceInstanceClient(secureConfiguration(headers), httpClient);
+
+ given(httpClient.get(anyString(), any(RequestDiagnosticContext.class), anyMap()))
+ .willReturn(Mono.just(response));
+
+ StepVerifier
+ .create(cut.getAaiResponse(model))
+ .expectNext(response)
+ .verifyComplete();
+
+ verify(httpClient)
+ .get(anyString(), any(RequestDiagnosticContext.class), eq(headers));
+ }
+}
diff --git a/rest-services/aai-client/src/test/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/get/AaiHttpGetClientTest.java b/rest-services/aai-client/src/test/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/get/AaiHttpGetClientTest.java
new file mode 100644
index 00000000..1dddc27e
--- /dev/null
+++ b/rest-services/aai-client/src/test/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/get/AaiHttpGetClientTest.java
@@ -0,0 +1,87 @@
+/*
+ * ============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.sdk.rest.services.aai.client.service.http.get;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyMap;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.BDDMockito.given;
+import static org.mockito.Mockito.verify;
+import static org.onap.dcaegen2.services.sdk.rest.services.aai.client.AaiClientConfigurations.secureConfiguration;
+
+import java.util.HashMap;
+import java.util.Map;
+import org.junit.jupiter.api.Test;
+import org.onap.dcaegen2.services.sdk.rest.services.aai.client.config.AaiClientConfiguration;
+import org.onap.dcaegen2.services.sdk.rest.services.aai.client.service.http.AbstractHttpClientTest;
+import org.onap.dcaegen2.services.sdk.rest.services.model.logging.RequestDiagnosticContext;
+import reactor.core.publisher.Mono;
+import reactor.test.StepVerifier;
+
+class AaiHttpGetClientTest extends AbstractHttpClientTest {
+
+ @Test
+ void getAaiResponse_shouldCallGetMethod_withGivenAaiHeaders() {
+ Map<String, String> headers = new HashMap<>();
+ AaiHttpGetClient cut = new AaiHttpGetClient(secureConfiguration(headers), httpClient);
+
+ given(httpClient.get(
+ anyString(),
+ any(RequestDiagnosticContext.class),
+ anyMap()
+ )).willReturn(Mono.just(response));
+
+ StepVerifier
+ .create(cut.getAaiResponse(aaiModel))
+ .expectNext(response)
+ .verifyComplete();
+
+ verify(httpClient).get(
+ anyString(),
+ any(RequestDiagnosticContext.class),
+ eq(headers)
+ );
+ }
+
+ @Test
+ void getAaiResponse_shouldCallGetMethod_withProperUri() {
+ AaiClientConfiguration configuration = secureConfiguration();
+ String expectedUri = constructAaiUri(configuration, aaiModel.getCorrelationId());
+ AaiHttpGetClient cut = new AaiHttpGetClient(configuration, httpClient);
+
+ given(httpClient.get(
+ anyString(),
+ any(RequestDiagnosticContext.class),
+ anyMap()
+ )).willReturn(Mono.just(response));
+
+ StepVerifier
+ .create(cut.getAaiResponse(aaiModel))
+ .expectNext(response)
+ .verifyComplete();
+
+ verify(httpClient).get(
+ eq(expectedUri),
+ any(RequestDiagnosticContext.class),
+ anyMap()
+ );
+ }
+}
diff --git a/rest-services/aai-client/src/test/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/patch/AaiHttpPatchClientTest.java b/rest-services/aai-client/src/test/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/patch/AaiHttpPatchClientTest.java
new file mode 100644
index 00000000..302395ac
--- /dev/null
+++ b/rest-services/aai-client/src/test/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/patch/AaiHttpPatchClientTest.java
@@ -0,0 +1,103 @@
+/*
+ * ============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.sdk.rest.services.aai.client.service.http.patch;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyMap;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.BDDMockito.given;
+import static org.mockito.Mockito.verify;
+import static org.onap.dcaegen2.services.sdk.rest.services.aai.client.AaiClientConfigurations.secureConfiguration;
+
+import io.vavr.collection.HashMap;
+import io.vavr.collection.Map;
+import org.junit.jupiter.api.Test;
+import org.onap.dcaegen2.services.sdk.rest.services.aai.client.config.AaiClientConfiguration;
+import org.onap.dcaegen2.services.sdk.rest.services.aai.client.service.http.AbstractHttpClientTest;
+import org.onap.dcaegen2.services.sdk.rest.services.model.AaiModel;
+import org.onap.dcaegen2.services.sdk.rest.services.model.JsonBodyBuilder;
+import org.onap.dcaegen2.services.sdk.rest.services.model.logging.RequestDiagnosticContext;
+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() {
+
+ 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(httpClient.patch(
+ anyString(),
+ any(RequestDiagnosticContext.class),
+ anyMap(),
+ any(JsonBodyBuilder.class),
+ any(AaiModel.class)
+ )).willReturn(Mono.just(response));
+
+ StepVerifier
+ .create(cut.getAaiResponse(aaiModel))
+ .expectNext(response)
+ .verifyComplete();
+
+ verify(httpClient).patch(
+ anyString(),
+ any(RequestDiagnosticContext.class),
+ eq(expectedHeaders.toJavaMap()),
+ eq(bodyBuilder),
+ eq(aaiModel)
+ );
+ }
+
+ @Test
+ void getAaiResponse_shouldCallPatchMethod_withProperUri() {
+ AaiClientConfiguration configuration = secureConfiguration();
+ String expectedUri = constructAaiUri(configuration, aaiModel.getCorrelationId());
+ AaiHttpPatchClient cut = new AaiHttpPatchClient(configuration, bodyBuilder, httpClient);
+
+ given(httpClient.patch(
+ anyString(),
+ any(RequestDiagnosticContext.class),
+ anyMap(),
+ any(JsonBodyBuilder.class),
+ any(AaiModel.class)
+ )).willReturn(Mono.just(response));
+
+ StepVerifier
+ .create(cut.getAaiResponse(aaiModel))
+ .expectNext(response)
+ .verifyComplete();
+
+ verify(httpClient).patch(
+ eq(expectedUri),
+ any(RequestDiagnosticContext.class),
+ anyMap(),
+ eq(bodyBuilder),
+ eq(aaiModel)
+ );
+ }
+}
diff --git a/rest-services/aai-client/src/test/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/put/AaiHttpPutClientTest.java b/rest-services/aai-client/src/test/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/put/AaiHttpPutClientTest.java
new file mode 100644
index 00000000..7ce47a00
--- /dev/null
+++ b/rest-services/aai-client/src/test/java/org/onap/dcaegen2/services/sdk/rest/services/aai/client/service/http/put/AaiHttpPutClientTest.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.sdk.rest.services.aai.client.service.http.put;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyMap;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.BDDMockito.given;
+import static org.mockito.Mockito.verify;
+import static org.onap.dcaegen2.services.sdk.rest.services.aai.client.AaiClientConfigurations.secureConfiguration;
+
+import java.util.HashMap;
+import java.util.Map;
+import org.junit.jupiter.api.Test;
+import org.onap.dcaegen2.services.sdk.rest.services.aai.client.service.http.AbstractHttpClientTest;
+import org.onap.dcaegen2.services.sdk.rest.services.model.AaiModel;
+import org.onap.dcaegen2.services.sdk.rest.services.model.JsonBodyBuilder;
+import org.onap.dcaegen2.services.sdk.rest.services.model.logging.RequestDiagnosticContext;
+import reactor.core.publisher.Mono;
+import reactor.test.StepVerifier;
+
+class AaiHttpPutClientTest extends AbstractHttpClientTest {
+
+ @Test
+ void getAaiResponse_shouldCallPutMethod_withGivenAaiHeaders() {
+ Map<String, String> headers = new HashMap<>();
+ AaiHttpPutClient cut = new AaiHttpPutClient(secureConfiguration(headers), bodyBuilder, "", httpClient);
+
+ given(httpClient.put(
+ anyString(),
+ any(RequestDiagnosticContext.class),
+ anyMap(),
+ any(JsonBodyBuilder.class),
+ any(AaiModel.class)
+ )).willReturn(Mono.just(response));
+
+ StepVerifier
+ .create(cut.getAaiResponse(aaiModel))
+ .expectNext(response)
+ .verifyComplete();
+
+ verify(httpClient).put(
+ anyString(),
+ any(RequestDiagnosticContext.class),
+ eq(headers),
+ eq(bodyBuilder),
+ eq(aaiModel)
+ );
+ }
+
+ @Test
+ void getAaiResponse_shouldCallPutMethod_withProperUri() {
+ String uri = "test-uri";
+ AaiHttpPutClient cut = new AaiHttpPutClient(secureConfiguration(), bodyBuilder, uri, httpClient);
+
+ given(httpClient.put(
+ anyString(),
+ any(RequestDiagnosticContext.class),
+ anyMap(),
+ any(JsonBodyBuilder.class),
+ any(AaiModel.class)
+ )).willReturn(Mono.just(response));
+
+ StepVerifier
+ .create(cut.getAaiResponse(aaiModel))
+ .expectNext(response)
+ .verifyComplete();
+
+ verify(httpClient).put(
+ eq(uri),
+ any(RequestDiagnosticContext.class),
+ anyMap(),
+ eq(bodyBuilder),
+ eq(aaiModel)
+ );
+ }
+}
diff --git a/rest-services/aai-client/src/test/resources/server.pass b/rest-services/aai-client/src/test/resources/server.pass
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/rest-services/aai-client/src/test/resources/server.pass
diff --git a/rest-services/aai-client/src/test/resources/server.pkcs12 b/rest-services/aai-client/src/test/resources/server.pkcs12
new file mode 100644
index 00000000..40e25932
--- /dev/null
+++ b/rest-services/aai-client/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/rest-services/aai-client/src/test/resources/trust.pass b/rest-services/aai-client/src/test/resources/trust.pass
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/rest-services/aai-client/src/test/resources/trust.pass
diff --git a/rest-services/aai-client/src/test/resources/trust.pkcs12 b/rest-services/aai-client/src/test/resources/trust.pkcs12
new file mode 100644
index 00000000..01b61373
--- /dev/null
+++ b/rest-services/aai-client/src/test/resources/trust.pkcs12
Binary files differ