diff options
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 Binary files differnew file mode 100644 index 00000000..01b61373 --- /dev/null +++ b/rest-services/aai-client/src/test/resources/trust.pkcs12 |