aaiclient api refactor 30/98930/1
authorMichal Kabaj <michal.kabaj@nokia.com>
Thu, 28 Nov 2019 11:21:19 +0000 (12:21 +0100)
committerMichal Kabaj <michal.kabaj@nokia.com>
Thu, 28 Nov 2019 11:21:19 +0000 (12:21 +0100)
- 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

42 files changed:
pom.xml
prh-app-server/pom.xml
prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/configuration/AaiHttpClientConfig.java
prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/configuration/CbsConfiguration.java
prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/configuration/CbsContentParser.java
prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/configuration/Config.java
prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/tasks/AaiProducerTaskImpl.java
prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/tasks/AaiQueryTask.java
prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/tasks/AaiQueryTaskImpl.java
prh-app-server/src/test/java/org/onap/dcaegen2/services/prh/TestAppConfiguration.java
prh-app-server/src/test/java/org/onap/dcaegen2/services/prh/configuration/ConsulConfigurationParserTest.java
prh-app-server/src/test/java/org/onap/dcaegen2/services/prh/tasks/AaiProducerTaskImplTest.java
prh-app-server/src/test/java/org/onap/dcaegen2/services/prh/tasks/AaiQueryTaskImplTest.java
prh-app-server/src/test/java/org/onap/dcaegen2/services/prh/tasks/BbsActionsTaskTest.java
prh-commons/pom.xml
prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/api/AaiClientConfiguration.java [new file with mode: 0644]
prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/api/AaiHttpClient.java [new file with mode: 0644]
prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/api/get/AaiGetServiceInstanceClient.java [new file with mode: 0644]
prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/api/get/AaiHttpGetClient.java [new file with mode: 0644]
prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/api/patch/AaiHttpPatchClient.java [new file with mode: 0644]
prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/api/put/AaiHttpPutClient.java [new file with mode: 0644]
prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/impl/AaiRequests.java [new file with mode: 0644]
prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/main/AaiHttpClientFactory.java [new file with mode: 0644]
prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/model/AaiModel.java [new file with mode: 0644]
prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/model/AaiServiceInstanceQueryModel.java [new file with mode: 0644]
prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/model/ClientModel.java [new file with mode: 0644]
prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/model/DmaapModel.java [new file with mode: 0644]
prh-commons/src/main/java/org/onap/dcaegen2/services/prh/adapter/aai/model/JsonBodyBuilder.java [new file with mode: 0644]
prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/AaiJsonBodyBuilderImpl.java
prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/ConsumerDmaapModel.java
prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/bbs/LogicalLink.java
prh-commons/src/test/java/org/onap/dcaegen2/services/prh/adapter/aai/AaiClientConfigurations.java [new file with mode: 0644]
prh-commons/src/test/java/org/onap/dcaegen2/services/prh/adapter/aai/AbstractHttpClientTest.java [new file with mode: 0644]
prh-commons/src/test/java/org/onap/dcaegen2/services/prh/adapter/aai/get/AaiGetServiceInstanceClientTest.java [new file with mode: 0644]
prh-commons/src/test/java/org/onap/dcaegen2/services/prh/adapter/aai/get/AaiHttpGetClientTest.java [new file with mode: 0644]
prh-commons/src/test/java/org/onap/dcaegen2/services/prh/adapter/aai/patch/AaiHttpPatchClientTest.java [new file with mode: 0644]
prh-commons/src/test/java/org/onap/dcaegen2/services/prh/adapter/aai/put/AaiHttpPutClientTest.java [new file with mode: 0644]
prh-commons/src/test/resources/server.pass [new file with mode: 0644]
prh-commons/src/test/resources/server.pkcs12 [new file with mode: 0644]
prh-commons/src/test/resources/transaction.json [new file with mode: 0644]
prh-commons/src/test/resources/trust.pass [new file with mode: 0644]
prh-commons/src/test/resources/trust.pkcs12 [new file with mode: 0644]

diff --git a/pom.xml b/pom.xml
index d65e6fe..40e6884 100644 (file)
--- a/pom.xml
+++ b/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>
       </dependency>
       <dependency>
         <groupId>org.onap.dcaegen2.services.sdk.rest.services</groupId>
-        <artifactId>aai-client</artifactId>
+        <artifactId>http-client</artifactId>
+        <version>${sdk.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.onap.dcaegen2.services.sdk.security</groupId>
+        <artifactId>ssl</artifactId>
         <version>${sdk.version}</version>
       </dependency>
       <dependency>
index c4455e6..7cf9935 100644 (file)
       <groupId>org.onap.dcaegen2.services.sdk.rest.services</groupId>
       <artifactId>cbs-client</artifactId>
     </dependency>
-    <dependency>
-      <groupId>org.onap.dcaegen2.services.sdk.rest.services</groupId>
-      <artifactId>aai-client</artifactId>
-    </dependency>
     <dependency>
       <groupId>org.onap.dcaegen2.services.sdk.rest.services</groupId>
       <artifactId>dmaap-client</artifactId>
index 71dedba..9156732 100644 (file)
@@ -22,55 +22,56 @@ package org.onap.dcaegen2.services.prh.configuration;
 
 import java.nio.charset.StandardCharsets;
 import java.util.function.BiFunction;
+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.api.get.AaiGetServiceInstanceClient;
+import org.onap.dcaegen2.services.prh.adapter.aai.api.get.AaiHttpGetClient;
+import org.onap.dcaegen2.services.prh.adapter.aai.api.patch.AaiHttpPatchClient;
+import org.onap.dcaegen2.services.prh.adapter.aai.main.AaiHttpClientFactory;
+import org.onap.dcaegen2.services.prh.adapter.aai.model.AaiModel;
+import org.onap.dcaegen2.services.prh.adapter.aai.model.AaiServiceInstanceQueryModel;
 import org.onap.dcaegen2.services.prh.model.AaiJsonBodyBuilderImpl;
 import org.onap.dcaegen2.services.prh.model.AaiPnfResultModel;
 import org.onap.dcaegen2.services.prh.model.AaiServiceInstanceResultModel;
 import org.onap.dcaegen2.services.prh.model.utils.PrhModelAwareGsonBuilder;
-import org.onap.dcaegen2.services.sdk.rest.services.aai.client.api.AaiClientConfiguration;
-import org.onap.dcaegen2.services.sdk.rest.services.aai.client.main.AaiHttpClientFactory;
-import org.onap.dcaegen2.services.sdk.rest.services.aai.client.api.AaiHttpClient;
-import org.onap.dcaegen2.services.sdk.rest.services.aai.client.api.get.AaiGetServiceInstanceClient;
-import org.onap.dcaegen2.services.sdk.rest.services.aai.client.api.get.AaiHttpGetClient;
-import org.onap.dcaegen2.services.sdk.rest.services.aai.client.api.patch.AaiHttpPatchClient;
 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.aai.client.model.AaiModel;
-import org.onap.dcaegen2.services.sdk.rest.services.aai.client.model.AaiServiceInstanceQueryModel;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
 @Configuration
 public class AaiHttpClientConfig {
+
     @Autowired
     private CbsConfiguration cbsConfiguration;
 
     @Bean
     public AaiHttpClient<AaiModel, HttpResponse> getPatchClientFactory() {
         return createLazyConfigClient(
-                (config, client) -> new AaiHttpPatchClient(config, new AaiJsonBodyBuilderImpl(), client));
+            (config, client) -> new AaiHttpPatchClient(config, new AaiJsonBodyBuilderImpl(), client));
     }
 
     @Bean
     public AaiHttpClient<AaiServiceInstanceQueryModel, AaiServiceInstanceResultModel> getServiceInstanceClient() {
         return createLazyConfigClient(
-                (config, client) -> new AaiGetServiceInstanceClient(config, client)
-                        .map(httpResponse -> {
-                            httpResponse.throwIfUnsuccessful();
-                            return httpResponse.bodyAsJson(StandardCharsets.UTF_8,
-                                    PrhModelAwareGsonBuilder.createGson(), AaiServiceInstanceResultModel.class);
-                        }));
+            (config, client) -> new AaiGetServiceInstanceClient(config, client)
+                .map(httpResponse -> {
+                    httpResponse.throwIfUnsuccessful();
+                    return httpResponse.bodyAsJson(StandardCharsets.UTF_8,
+                        PrhModelAwareGsonBuilder.createGson(), AaiServiceInstanceResultModel.class);
+                }));
     }
 
     @Bean
     public AaiHttpClient<AaiModel, AaiPnfResultModel> getGetClient() {
         return createLazyConfigClient(
-                (config, client) -> new AaiHttpGetClient(config, client)
-                        .map(httpResponse -> {
-                            httpResponse.throwIfUnsuccessful();
-                            return httpResponse.bodyAsJson(StandardCharsets.UTF_8,
-                                    PrhModelAwareGsonBuilder.createGson(), AaiPnfResultModel.class);
-                        }));
+            (config, client) -> new AaiHttpGetClient(config, client)
+                .map(httpResponse -> {
+                    httpResponse.throwIfUnsuccessful();
+                    return httpResponse.bodyAsJson(StandardCharsets.UTF_8,
+                        PrhModelAwareGsonBuilder.createGson(), AaiPnfResultModel.class);
+                }));
     }
 
     private <T, U> AaiHttpClient<T, U> createLazyConfigClient(
@@ -78,7 +79,7 @@ public class AaiHttpClientConfig {
 
         return x -> factoryMethod.apply(
             cbsConfiguration.getAaiClientConfiguration(),
-                new AaiHttpClientFactory(cbsConfiguration.getAaiClientConfiguration()).build()
+            new AaiHttpClientFactory(cbsConfiguration.getAaiClientConfiguration()).build()
         ).getAaiResponse(x);
     }
 }
index f27d2ef..d594222 100644 (file)
@@ -21,7 +21,8 @@
 package org.onap.dcaegen2.services.prh.configuration;
 
 import com.google.gson.JsonObject;
-import org.onap.dcaegen2.services.sdk.rest.services.aai.client.api.AaiClientConfiguration;
+import java.util.Optional;
+import org.onap.dcaegen2.services.prh.adapter.aai.api.AaiClientConfiguration;
 import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.api.DmaapClientFactory;
 import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.api.MessageRouterPublisher;
 import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.api.MessageRouterSubscriber;
@@ -30,8 +31,6 @@ import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.model.MessageRo
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.util.Optional;
-
 
 public class CbsConfiguration implements Config {
     private static final Logger LOGGER = LoggerFactory.getLogger(CbsConfiguration.class);
index ee7ff22..869d537 100644 (file)
 
 package org.onap.dcaegen2.services.prh.configuration;
 
+import static org.onap.dcaegen2.services.sdk.rest.services.cbs.client.api.streams.StreamPredicates.streamWithName;
+
 import com.google.common.reflect.TypeToken;
 import com.google.gson.Gson;
 import com.google.gson.JsonObject;
+import java.nio.file.Paths;
+import java.time.Duration;
+import java.util.Map;
+import org.onap.dcaegen2.services.prh.adapter.aai.api.AaiClientConfiguration;
+import org.onap.dcaegen2.services.prh.adapter.aai.api.ImmutableAaiClientConfiguration;
 import org.onap.dcaegen2.services.sdk.model.streams.RawDataStream;
 import org.onap.dcaegen2.services.sdk.model.streams.dmaap.MessageRouterSink;
 import org.onap.dcaegen2.services.sdk.model.streams.dmaap.MessageRouterSource;
-import org.onap.dcaegen2.services.sdk.rest.services.aai.client.api.AaiClientConfiguration;
-import org.onap.dcaegen2.services.sdk.rest.services.aai.client.api.ImmutableAaiClientConfiguration;
 import org.onap.dcaegen2.services.sdk.rest.services.cbs.client.api.streams.DataStreams;
 import org.onap.dcaegen2.services.sdk.rest.services.cbs.client.api.streams.StreamFromGsonParsers;
 import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.model.ImmutableMessageRouterPublishRequest;
@@ -43,12 +48,6 @@ 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 java.nio.file.Paths;
-import java.time.Duration;
-import java.util.Map;
-
-import static org.onap.dcaegen2.services.sdk.rest.services.cbs.client.api.streams.StreamPredicates.streamWithName;
-
 /**
  * @author <a href="mailto:przemyslaw.wasala@nokia.com">PrzemysÅ‚aw WÄ…sala</a> on 8/21/18
  */
index bf41a0f..adfc8c1 100644 (file)
@@ -20,7 +20,7 @@
 
 package org.onap.dcaegen2.services.prh.configuration;
 
-import org.onap.dcaegen2.services.sdk.rest.services.aai.client.api.AaiClientConfiguration;
+import org.onap.dcaegen2.services.prh.adapter.aai.api.AaiClientConfiguration;
 import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.api.MessageRouterPublisher;
 import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.api.MessageRouterSubscriber;
 import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.model.MessageRouterPublishRequest;
index adf87a4..e0764fd 100644 (file)
 
 package org.onap.dcaegen2.services.prh.tasks;
 
+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.exceptions.AaiNotFoundException;
 import org.onap.dcaegen2.services.prh.exceptions.DmaapNotFoundException;
 import org.onap.dcaegen2.services.prh.exceptions.PrhTaskException;
 import org.onap.dcaegen2.services.prh.model.ConsumerDmaapModel;
 import org.onap.dcaegen2.services.prh.model.utils.HttpUtils;
-import org.onap.dcaegen2.services.sdk.rest.services.aai.client.api.AaiHttpClient;
 import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.HttpResponse;
-import org.onap.dcaegen2.services.sdk.rest.services.aai.client.model.AaiModel;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
index 54a3151..0bcb1de 100644 (file)
@@ -20,7 +20,7 @@
 
 package org.onap.dcaegen2.services.prh.tasks;
 
-import org.onap.dcaegen2.services.sdk.rest.services.aai.client.model.AaiModel;
+import org.onap.dcaegen2.services.prh.adapter.aai.model.AaiModel;
 import reactor.core.publisher.Mono;
 
 @FunctionalInterface
index 3420bf2..46f9d3d 100644 (file)
 
 package org.onap.dcaegen2.services.prh.tasks;
 
-import org.onap.dcaegen2.services.prh.model.*;
-import org.onap.dcaegen2.services.sdk.rest.services.aai.client.api.AaiHttpClient;
-import org.onap.dcaegen2.services.sdk.rest.services.aai.client.model.AaiModel;
-import org.onap.dcaegen2.services.sdk.rest.services.aai.client.model.AaiServiceInstanceQueryModel;
-import org.onap.dcaegen2.services.sdk.rest.services.aai.client.model.ImmutableAaiServiceInstanceQueryModel;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-import reactor.core.publisher.Mono;
-
 import java.util.List;
 import java.util.Optional;
 import java.util.stream.Stream;
+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.AaiServiceInstanceQueryModel;
+import org.onap.dcaegen2.services.prh.adapter.aai.model.ImmutableAaiServiceInstanceQueryModel;
+import org.onap.dcaegen2.services.prh.model.AaiPnfResultModel;
+import org.onap.dcaegen2.services.prh.model.AaiServiceInstanceResultModel;
+import org.onap.dcaegen2.services.prh.model.Relationship;
+import org.onap.dcaegen2.services.prh.model.RelationshipData;
+import org.onap.dcaegen2.services.prh.model.RelationshipDict;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import reactor.core.publisher.Mono;
 
 @Component
 public class AaiQueryTaskImpl implements AaiQueryTask {
index b6af342..a3f024f 100644 (file)
 
 package org.onap.dcaegen2.services.prh;
 
+import java.time.Duration;
+import org.onap.dcaegen2.services.prh.adapter.aai.api.ImmutableAaiClientConfiguration;
 import org.onap.dcaegen2.services.sdk.model.streams.dmaap.ImmutableMessageRouterSink;
 import org.onap.dcaegen2.services.sdk.model.streams.dmaap.ImmutableMessageRouterSource;
-import org.onap.dcaegen2.services.sdk.rest.services.aai.client.api.ImmutableAaiClientConfiguration;
 import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.ContentType;
 import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.model.ImmutableMessageRouterPublishRequest;
 import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.model.ImmutableMessageRouterSubscribeRequest;
 
-import java.time.Duration;
-
 
 public class TestAppConfiguration {
     public static ImmutableMessageRouterSubscribeRequest createDefaultMessageRouterSubscribeRequest() {
index 96594ae..89717a5 100644 (file)
 
 package org.onap.dcaegen2.services.prh.configuration;
 
+import static java.lang.ClassLoader.getSystemResource;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.jupiter.api.Assumptions.assumeFalse;
+
 import com.google.gson.Gson;
 import com.google.gson.JsonObject;
+import java.net.URISyntaxException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.time.Duration;
 import org.jetbrains.annotations.Nullable;
 import org.junit.jupiter.api.Test;
 import org.onap.dcaegen2.services.prh.TestAppConfiguration;
-import org.onap.dcaegen2.services.sdk.rest.services.aai.client.api.AaiClientConfiguration;
-import org.onap.dcaegen2.services.sdk.rest.services.aai.client.api.ImmutableAaiClientConfiguration;
+import org.onap.dcaegen2.services.prh.adapter.aai.api.AaiClientConfiguration;
+import org.onap.dcaegen2.services.prh.adapter.aai.api.ImmutableAaiClientConfiguration;
 import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.ContentType;
 import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.model.MessageRouterPublishRequest;
 import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.model.MessageRouterSubscribeRequest;
@@ -34,22 +42,13 @@ import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.model.config.Me
 import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.model.config.MessageRouterSubscriberConfig;
 import org.onap.dcaegen2.services.sdk.security.ssl.SecurityKeys;
 
-import java.net.URISyntaxException;
-import java.nio.file.Files;
-import java.nio.file.Paths;
-import java.time.Duration;
-
-import static java.lang.ClassLoader.getSystemResource;
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.junit.jupiter.api.Assumptions.assumeFalse;
-
 
 class ConsulConfigurationParserTest {
 
     private final String correctJson =
-            new String(Files.readAllBytes(Paths.get(getSystemResource("configurationFromCbs.json").toURI())));
+        new String(Files.readAllBytes(Paths.get(getSystemResource("configurationFromCbs.json").toURI())));
     private final ImmutableAaiClientConfiguration correctAaiClientConfig =
-            TestAppConfiguration.createDefaultAaiClientConfiguration();
+        TestAppConfiguration.createDefaultAaiClientConfiguration();
 
     private final JsonObject correctConfig = new Gson().fromJson(correctJson, JsonObject.class);
     private final CbsContentParser consulConfigurationParser = new CbsContentParser(correctConfig);
@@ -70,10 +69,12 @@ class ConsulConfigurationParserTest {
     @Test
     void shouldCreateMessageRouterSubscribeRequestCorrectly() {
         // given
-        MessageRouterSubscribeRequest messageRouterSubscribeRequest = consulConfigurationParser.getMessageRouterSubscribeRequest();
+        MessageRouterSubscribeRequest messageRouterSubscribeRequest = consulConfigurationParser
+            .getMessageRouterSubscribeRequest();
 
         // then
-        assertThat(messageRouterSubscribeRequest.sourceDefinition().topicUrl()).isEqualTo("http://dmaap-mr:2222/events/unauthenticated.VES_PNFREG_OUTPUT");
+        assertThat(messageRouterSubscribeRequest.sourceDefinition().topicUrl())
+            .isEqualTo("http://dmaap-mr:2222/events/unauthenticated.VES_PNFREG_OUTPUT");
         assertThat(messageRouterSubscribeRequest.consumerGroup()).isEqualTo("OpenDCAE-c12");
         assertThat(messageRouterSubscribeRequest.consumerId()).isEqualTo("c12");
         assertThat(messageRouterSubscribeRequest.timeout()).isEqualTo(Duration.ofMillis(-1));
@@ -82,28 +83,33 @@ class ConsulConfigurationParserTest {
     @Test
     void shouldCreateMessageRouterPublishConfigurationCorrectly() {
         // when
-        MessageRouterPublishRequest messageRouterPublishRequest = consulConfigurationParser.getMessageRouterPublishRequest();
+        MessageRouterPublishRequest messageRouterPublishRequest = consulConfigurationParser
+            .getMessageRouterPublishRequest();
 
         // then
         assertThat(messageRouterPublishRequest.contentType()).isEqualTo(ContentType.APPLICATION_JSON);
-        assertThat(messageRouterPublishRequest.sinkDefinition().topicUrl()).isEqualTo("http://dmaap-mr:2222/events/unauthenticated.PNF_READY");
+        assertThat(messageRouterPublishRequest.sinkDefinition().topicUrl())
+            .isEqualTo("http://dmaap-mr:2222/events/unauthenticated.PNF_READY");
     }
 
     @Test
     void shouldCreateMessageRouterUpdatePublishConfigurationCorrectly() {
         // when
-        MessageRouterPublishRequest messageRouterPublishRequest = consulConfigurationParser.getMessageRouterUpdatePublishRequest();
+        MessageRouterPublishRequest messageRouterPublishRequest = consulConfigurationParser
+            .getMessageRouterUpdatePublishRequest();
 
         // then
         assertThat(messageRouterPublishRequest.contentType()).isEqualTo(ContentType.APPLICATION_JSON);
-        assertThat(messageRouterPublishRequest.sinkDefinition().topicUrl()).isEqualTo("http://dmaap-mr:2222/events/unauthenticated.PNF_UPDATE");
+        assertThat(messageRouterPublishRequest.sinkDefinition().topicUrl())
+            .isEqualTo("http://dmaap-mr:2222/events/unauthenticated.PNF_UPDATE");
     }
 
     @Test
     void whenDmaapCertAuthIsDisabled_MessageRouterPublisherConfigSecurityKeysShouldBeIgnored() {
         assumeFalse(correctConfig.getAsJsonObject("config").get("security.enableDmaapCertAuth").getAsBoolean());
 
-        MessageRouterPublisherConfig messageRouterPublisherConfig = consulConfigurationParser.getMessageRouterPublisherConfig();
+        MessageRouterPublisherConfig messageRouterPublisherConfig = consulConfigurationParser
+            .getMessageRouterPublisherConfig();
 
         assertThat(messageRouterPublisherConfig.securityKeys()).isNull();
     }
@@ -112,7 +118,8 @@ class ConsulConfigurationParserTest {
     void whenDmaapCertAuthIsDisabled_MessageRouterSubscriberConfigSecurityKeysShouldBeIgnored() {
         assumeFalse(correctConfig.getAsJsonObject("config").get("security.enableDmaapCertAuth").getAsBoolean());
 
-        MessageRouterSubscriberConfig messageRouterSubscriberConfig = consulConfigurationParser.getMessageRouterSubscriberConfig();
+        MessageRouterSubscriberConfig messageRouterSubscriberConfig = consulConfigurationParser
+            .getMessageRouterSubscriberConfig();
 
         assertThat(messageRouterSubscriberConfig.securityKeys()).isNull();
     }
@@ -122,7 +129,8 @@ class ConsulConfigurationParserTest {
     void whenDmaapCertAuthIsEnabled_MessageRouterPublisherConfigSecurityKeysShouldBeLoaded() {
         CbsContentParser consulConfigurationParser = new CbsContentParser(getConfigWithSslEnabled(correctJson));
 
-        MessageRouterPublisherConfig messageRouterPublisherConfig = consulConfigurationParser.getMessageRouterPublisherConfig();
+        MessageRouterPublisherConfig messageRouterPublisherConfig = consulConfigurationParser
+            .getMessageRouterPublisherConfig();
 
         verifySecurityKeys(messageRouterPublisherConfig.securityKeys());
     }
@@ -132,7 +140,8 @@ class ConsulConfigurationParserTest {
     void whenDmaapCertAuthIsEnabled_MessageRouterSubscriberConfigSecurityKeysShouldBeLoaded() {
         CbsContentParser consulConfigurationParser = new CbsContentParser(getConfigWithSslEnabled(correctJson));
 
-        MessageRouterSubscriberConfig messageRouterSubscriberConfig = consulConfigurationParser.getMessageRouterSubscriberConfig();
+        MessageRouterSubscriberConfig messageRouterSubscriberConfig = consulConfigurationParser
+            .getMessageRouterSubscriberConfig();
 
         verifySecurityKeys(messageRouterSubscriberConfig.securityKeys());
     }
@@ -141,8 +150,10 @@ class ConsulConfigurationParserTest {
         assertThat(securityKeys).isNotNull();
         assertThat(securityKeys.trustStore().path().endsWith("org.onap.dcae.trust.jks")).isTrue();
         assertThat(securityKeys.keyStore().path().endsWith("org.onap.dcae.jks")).isTrue();
-        securityKeys.trustStorePassword().use(chars -> assertThat(new String(chars)).isEqualTo("*TQH?Lnszprs4LmlAj38yds("));
-        securityKeys.keyStorePassword().use(chars -> assertThat(new String(chars)).isEqualTo("mYHC98!qX}7h?W}jRv}MIXTJ"));
+        securityKeys.trustStorePassword()
+            .use(chars -> assertThat(new String(chars)).isEqualTo("*TQH?Lnszprs4LmlAj38yds("));
+        securityKeys.keyStorePassword()
+            .use(chars -> assertThat(new String(chars)).isEqualTo("mYHC98!qX}7h?W}jRv}MIXTJ"));
     }
 
     private static JsonObject getConfigWithSslEnabled(String configJsonString) {
index 48494d4..f699a9e 100644 (file)
 
 package org.onap.dcaegen2.services.prh.tasks;
 
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
+import static org.mockito.Mockito.when;
+
 import com.google.gson.JsonObject;
 import io.netty.handler.codec.http.HttpResponseStatus;
+import javax.net.ssl.SSLException;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.function.Executable;
 import org.onap.dcaegen2.services.prh.TestAppConfiguration;
+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.prh.configuration.CbsConfiguration;
 import org.onap.dcaegen2.services.prh.exceptions.PrhTaskException;
 import org.onap.dcaegen2.services.prh.model.ConsumerDmaapModel;
 import org.onap.dcaegen2.services.prh.model.ImmutableConsumerDmaapModel;
-import org.onap.dcaegen2.services.sdk.rest.services.aai.client.api.AaiClientConfiguration;
-import org.onap.dcaegen2.services.sdk.rest.services.aai.client.api.patch.AaiHttpPatchClient;
 import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.HttpResponse;
 import reactor.core.publisher.Mono;
 import reactor.test.StepVerifier;
 
-import javax.net.ssl.SSLException;
-
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.*;
-
 /**
  * @author <a href="mailto:przemyslaw.wasala@nokia.com">PrzemysÅ‚aw WÄ…sala</a> on 5/14/18
  */
index c2393b7..f2d562d 100644 (file)
 
 package org.onap.dcaegen2.services.prh.tasks;
 
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.BDDMockito.given;
+
+import java.util.Collections;
+import java.util.List;
 import org.assertj.core.util.Lists;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
@@ -27,23 +32,17 @@ import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.Mock;
 import org.mockito.junit.jupiter.MockitoExtension;
+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.AaiServiceInstanceQueryModel;
 import org.onap.dcaegen2.services.prh.model.AaiPnfResultModel;
 import org.onap.dcaegen2.services.prh.model.AaiServiceInstanceResultModel;
 import org.onap.dcaegen2.services.prh.model.ImmutableRelationshipData;
 import org.onap.dcaegen2.services.prh.model.Relationship;
 import org.onap.dcaegen2.services.prh.model.RelationshipData;
 import org.onap.dcaegen2.services.prh.model.RelationshipDict;
-import org.onap.dcaegen2.services.sdk.rest.services.aai.client.api.AaiHttpClient;
-import org.onap.dcaegen2.services.sdk.rest.services.aai.client.model.AaiModel;
-import org.onap.dcaegen2.services.sdk.rest.services.aai.client.model.AaiServiceInstanceQueryModel;
 import reactor.core.publisher.Mono;
 
-import java.util.Collections;
-import java.util.List;
-
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.BDDMockito.given;
-
 @ExtendWith(MockitoExtension.class)
 class AaiQueryTaskImplTest {
     @Mock
index 399122d..44c4509 100644 (file)
@@ -36,7 +36,6 @@ import static org.onap.dcaegen2.services.sdk.rest.services.adapters.http.HttpMet
 import static org.onap.dcaegen2.services.sdk.rest.services.adapters.http.HttpMethod.PUT;
 
 import com.google.gson.JsonObject;
-import io.netty.buffer.ByteBuf;
 import io.netty.handler.codec.http.HttpResponseStatus;
 import java.nio.charset.StandardCharsets;
 import java.util.List;
@@ -45,11 +44,11 @@ import org.junit.jupiter.api.Test;
 import org.mockito.ArgumentCaptor;
 import org.mockito.ArgumentMatchers;
 import org.onap.dcaegen2.services.prh.TestAppConfiguration;
+import org.onap.dcaegen2.services.prh.adapter.aai.api.AaiClientConfiguration;
 import org.onap.dcaegen2.services.prh.configuration.CbsConfiguration;
 import org.onap.dcaegen2.services.prh.exceptions.AaiFailureException;
 import org.onap.dcaegen2.services.prh.model.ConsumerDmaapModel;
 import org.onap.dcaegen2.services.prh.model.ImmutableConsumerDmaapModel;
-import org.onap.dcaegen2.services.sdk.rest.services.aai.client.api.AaiClientConfiguration;
 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.ImmutableHttpResponse;
index a807304..0348318 100644 (file)
@@ -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>
   <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>
       <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 (file)
index 0000000..53e7689
--- /dev/null
@@ -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 (file)
index 0000000..b72be56
--- /dev/null
@@ -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 (file)
index 0000000..e6490c6
--- /dev/null
@@ -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 (file)
index 0000000..62c2ef5
--- /dev/null
@@ -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 (file)
index 0000000..cf65547
--- /dev/null
@@ -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 (file)
index 0000000..590c7c0
--- /dev/null
@@ -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 (file)
index 0000000..01e13da
--- /dev/null
@@ -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 (file)
index 0000000..69b5cf8
--- /dev/null
@@ -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 (file)
index 0000000..0d99abb
--- /dev/null
@@ -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 (file)
index 0000000..bc87a86
--- /dev/null
@@ -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 (file)
index 0000000..4c1d2e1
--- /dev/null
@@ -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 (file)
index 0000000..99c9e2a
--- /dev/null
@@ -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 (file)
index 0000000..c13798f
--- /dev/null
@@ -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
index 7ff9b8b..c53da87 100644 (file)
@@ -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;
 
 
index d492e6d..7afb7f1 100644 (file)
@@ -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
index 6194615..ffef092 100644 (file)
@@ -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 (file)
index 0000000..072fa2d
--- /dev/null
@@ -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 (file)
index 0000000..81f51ef
--- /dev/null
@@ -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 (file)
index 0000000..7731741
--- /dev/null
@@ -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 (file)
index 0000000..10fc0f4
--- /dev/null
@@ -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 (file)
index 0000000..6493b56
--- /dev/null
@@ -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 (file)
index 0000000..13a4917
--- /dev/null
@@ -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 (file)
index 0000000..e69de29
diff --git a/prh-commons/src/test/resources/server.pkcs12 b/prh-commons/src/test/resources/server.pkcs12
new file mode 100644 (file)
index 0000000..40e2593
--- /dev/null
@@ -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 (file)
index 0000000..5cbb562
--- /dev/null
@@ -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 (file)
index 0000000..e69de29
diff --git a/prh-commons/src/test/resources/trust.pkcs12 b/prh-commons/src/test/resources/trust.pkcs12
new file mode 100644 (file)
index 0000000..01b6137
Binary files /dev/null and b/prh-commons/src/test/resources/trust.pkcs12 differ