certificate configuration for DMaaP and AAI 33/71033/5
authorpkaras <piotr.karas@nokia.com>
Thu, 25 Oct 2018 12:56:21 +0000 (14:56 +0200)
committerpkaras <piotr.karas@nokia.com>
Thu, 25 Oct 2018 13:34:45 +0000 (15:34 +0200)
Change-Id: If074b4b1b5dce0dd5a69cd464cf6259177580736
Issue-ID: DCAEGEN2-888
Signed-off-by: Pawel <piotr.karas@nokia.com>
18 files changed:
prh-aai-client/src/main/java/org/onap/dcaegen2/services/prh/config/AaiClientConfiguration.java
prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/configuration/AppConfig.java
prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/configuration/CloudConfigParser.java
prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/configuration/CloudConfiguration.java
prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/configuration/PrhAppConfig.java
prh-app-server/src/main/resources/prh_endpoints.json
prh-app-server/src/test/java/org/onap/dcaegen2/services/prh/TestAppConfiguration.java [new file with mode: 0644]
prh-app-server/src/test/java/org/onap/dcaegen2/services/prh/configuration/CloudConfigParserTest.java
prh-app-server/src/test/java/org/onap/dcaegen2/services/prh/configuration/PrhAppConfigTest.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/DmaapConsumerTaskImplTest.java
prh-app-server/src/test/java/org/onap/dcaegen2/services/prh/tasks/DmaapPublisherTaskImplTest.java
prh-app-server/src/test/resources/correct_config.json [moved from prh-app-server/src/test/resources/prh_endpoints.json with 65% similarity]
prh-app-server/src/test/resources/flattened_configuration.json [new file with mode: 0644]
prh-app-server/src/test/resources/incorrect_config.json [new file with mode: 0644]
prh-dmaap-client/src/main/java/org/onap/dcaegen2/services/prh/config/DmaapCustomConfig.java
prh-dmaap-client/src/test/java/org/onap/dcaegen2/services/prh/service/config/DmaapConsumerConfigurationTest.java
prh-dmaap-client/src/test/java/org/onap/dcaegen2/services/prh/service/config/DmaapPublisherConfigurationTest.java

index 4727f4b..706c328 100644 (file)
@@ -62,4 +62,22 @@ public abstract class AaiClientConfiguration implements Serializable {
     @Value.Parameter
     public abstract Map<String, String> aaiHeaders();
 
+    @Value.Parameter
+    public abstract String keyFile();
+
+    @Value.Parameter
+    public abstract String trustStore();
+
+    @Value.Parameter
+    public abstract  String trustStorePassword();
+
+    @Value.Parameter
+    public abstract String keyStore();
+
+    @Value.Parameter
+    public abstract String keyStorePassword();
+
+    @Value.Parameter
+    public abstract Boolean enableAaiCertAuth();
+
 }
index c5c77ec..643462f 100644 (file)
@@ -32,7 +32,6 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.context.properties.EnableConfigurationProperties;
 import org.springframework.context.annotation.Configuration;
 
-
 /**
  * @author <a href="mailto:przemyslaw.wasala@nokia.com">Przemysław Wąsala</a> on 4/9/18
  */
@@ -120,6 +119,27 @@ public class AppConfig extends PrhAppConfig {
     @Value("${aai.aaiClientConfiguration.aaiPnfPath:}")
     public String aaiPnfPath;
 
+    @Value("${security.keyFile:}")
+    public String keyFile;
+
+    @Value("${security.trustStore:}")
+    public String trustStore;
+
+    @Value("${security.trustStorePassword:}")
+    public String trustStorePassword;
+
+    @Value("${security.keyStore:}")
+    public String keyStore;
+
+    @Value("${security.keyStorePassword:}")
+    public String keyStorePassword;
+
+    @Value("${security.enableAaiCertAuth:}")
+    public Boolean enableAaiCertAuth;
+
+    @Value("${security.enableDmaapCertAuth:}")
+    public Boolean enableDmaapCertAuth;
+
     @Override
     public DmaapConsumerConfiguration getDmaapConsumerConfiguration() {
         return new ImmutableDmaapConsumerConfiguration.Builder()
@@ -153,6 +173,24 @@ public class AppConfig extends PrhAppConfig {
                 .orElse(dmaapConsumerConfiguration.consumerGroup()))
             .consumerId(Optional.ofNullable(consumerId).filter(isEmpty.negate())
                 .orElse(dmaapConsumerConfiguration.consumerId()))
+            .keyFile(
+                Optional.ofNullable(keyFile).filter(p -> !p.isEmpty())
+                    .orElse(dmaapConsumerConfiguration.keyFile()))
+            .trustStore(
+                Optional.ofNullable(trustStore).filter(p -> !p.isEmpty())
+                    .orElse(dmaapConsumerConfiguration.trustStore()))
+            .trustStorePassword(
+                Optional.ofNullable(trustStorePassword).filter(isEmpty.negate())
+                    .orElse(dmaapConsumerConfiguration.trustStorePassword()))
+            .keyStore(
+                Optional.ofNullable(keyStore).filter(p -> !p.isEmpty())
+                    .orElse(dmaapConsumerConfiguration.keyStore()))
+            .keyStorePassword(
+                Optional.ofNullable(keyStorePassword).filter(isEmpty.negate())
+                    .orElse(dmaapConsumerConfiguration.keyStorePassword()))
+            .enableDmaapCertAuth(
+                Optional.ofNullable(enableDmaapCertAuth).filter(p -> !p.toString().isEmpty())
+                    .orElse(dmaapConsumerConfiguration.enableDmaapCertAuth()))
             .build();
     }
 
@@ -177,6 +215,24 @@ public class AppConfig extends PrhAppConfig {
             .aaiPnfPath(
                 Optional.ofNullable(aaiPnfPath).filter(isEmpty.negate()).orElse(aaiClientConfiguration.aaiPnfPath()))
             .aaiHeaders(aaiClientConfiguration.aaiHeaders())
+            .keyFile(
+                Optional.ofNullable(keyFile).filter(p -> !p.isEmpty())
+                    .orElse(aaiClientConfiguration.keyFile()))
+            .trustStore(
+                Optional.ofNullable(trustStore).filter(p -> !p.isEmpty())
+                    .orElse(aaiClientConfiguration.trustStore()))
+            .trustStorePassword(
+                Optional.ofNullable(trustStorePassword).filter(isEmpty.negate())
+                    .orElse(aaiClientConfiguration.trustStorePassword()))
+            .keyStore(
+                Optional.ofNullable(keyStore).filter(p -> !p.isEmpty())
+                    .orElse(aaiClientConfiguration.keyStore()))
+            .keyStorePassword(
+                Optional.ofNullable(keyStorePassword).filter(isEmpty.negate())
+                    .orElse(aaiClientConfiguration.keyStorePassword()))
+            .enableAaiCertAuth(
+                Optional.ofNullable(enableAaiCertAuth).filter(p -> !p.toString().isEmpty())
+                    .orElse(aaiClientConfiguration.enableAaiCertAuth()))
             .build();
     }
 
@@ -204,7 +260,24 @@ public class AppConfig extends PrhAppConfig {
             .dmaapUserPassword(
                 Optional.ofNullable(producerDmaapUserPassword).filter(isEmpty.negate())
                     .orElse(dmaapPublisherConfiguration.dmaapUserPassword()))
+            .keyFile(
+                Optional.ofNullable(keyFile).filter(p -> !p.isEmpty())
+                    .orElse(dmaapPublisherConfiguration.keyFile()))
+            .trustStore(
+                Optional.ofNullable(trustStore).filter(p -> !p.isEmpty())
+                    .orElse(dmaapPublisherConfiguration.trustStore()))
+            .trustStorePassword(
+                Optional.ofNullable(trustStorePassword).filter(isEmpty.negate())
+                    .orElse(dmaapPublisherConfiguration.trustStorePassword()))
+            .keyStore(
+                Optional.ofNullable(keyStore).filter(p -> !p.isEmpty())
+                    .orElse(dmaapPublisherConfiguration.keyStore()))
+            .keyStorePassword(
+                Optional.ofNullable(keyStorePassword).filter(isEmpty.negate())
+                    .orElse(dmaapPublisherConfiguration.keyStorePassword()))
+            .enableDmaapCertAuth(
+                Optional.ofNullable(enableDmaapCertAuth).filter(p -> !p.toString().isEmpty())
+                    .orElse(dmaapPublisherConfiguration.enableDmaapCertAuth()))
             .build();
     }
-
 }
index 32d8a56..2e57256 100644 (file)
@@ -33,6 +33,11 @@ import org.onap.dcaegen2.services.prh.config.ImmutableDmaapPublisherConfiguratio
  */
 class CloudConfigParser {
 
+    private static final String SECURITY_KEY_FILE = "security.keyFile";
+    private static final String SECURITY_TRUST_STORE = "security.trustStore";
+    private static final String SECURITY_KEY_STORE = "security.keyStore";
+    private static final String KEY_STORE_PASS = "security.keyStorePassword";
+    private static final String TRUST_STORE_PASS = "security.trustStorePassword";
     private final JsonObject jsonObject;
 
     CloudConfigParser(JsonObject jsonObject) {
@@ -48,6 +53,12 @@ class CloudConfigParser {
             .dmaapContentType(jsonObject.get("dmaap.dmaapProducerConfiguration.dmaapContentType").getAsString())
             .dmaapHostName(jsonObject.get("dmaap.dmaapProducerConfiguration.dmaapHostName").getAsString())
             .dmaapUserName(jsonObject.get("dmaap.dmaapProducerConfiguration.dmaapUserName").getAsString())
+            .keyFile(jsonObject.get(SECURITY_KEY_FILE).getAsString())
+            .trustStore(jsonObject.get(SECURITY_TRUST_STORE).getAsString())
+            .trustStorePassword(jsonObject.get(TRUST_STORE_PASS).getAsString())
+            .keyStore(jsonObject.get(SECURITY_KEY_STORE).getAsString())
+            .keyStorePassword(jsonObject.get(KEY_STORE_PASS).getAsString())
+            .enableDmaapCertAuth(jsonObject.get("security.enableDmaapCertAuth").getAsBoolean())
             .build();
     }
 
@@ -62,6 +73,12 @@ class CloudConfigParser {
             .aaiUserPassword(jsonObject.get("aai.aaiClientConfiguration.aaiUserPassword").getAsString())
             .aaiProtocol(jsonObject.get("aai.aaiClientConfiguration.aaiProtocol").getAsString())
             .aaiBasePath(jsonObject.get("aai.aaiClientConfiguration.aaiBasePath").getAsString())
+            .keyFile(jsonObject.get(SECURITY_KEY_FILE).getAsString())
+            .trustStore(jsonObject.get(SECURITY_TRUST_STORE).getAsString())
+            .trustStorePassword(jsonObject.get(TRUST_STORE_PASS).getAsString())
+            .keyStore(jsonObject.get(SECURITY_KEY_STORE).getAsString())
+            .keyStorePassword(jsonObject.get(KEY_STORE_PASS).getAsString())
+            .enableAaiCertAuth(jsonObject.get("security.enableAaiCertAuth").getAsBoolean())
             .build();
     }
 
@@ -78,6 +95,12 @@ class CloudConfigParser {
             .dmaapProtocol(jsonObject.get("dmaap.dmaapConsumerConfiguration.dmaapProtocol").getAsString())
             .consumerId(jsonObject.get("dmaap.dmaapConsumerConfiguration.consumerId").getAsString())
             .consumerGroup(jsonObject.get("dmaap.dmaapConsumerConfiguration.consumerGroup").getAsString())
+            .keyFile(jsonObject.get(SECURITY_KEY_FILE).getAsString())
+            .trustStore(jsonObject.get(SECURITY_TRUST_STORE).getAsString())
+            .trustStorePassword(jsonObject.get(TRUST_STORE_PASS).getAsString())
+            .keyStore(jsonObject.get(SECURITY_KEY_STORE).getAsString())
+            .keyStorePassword(jsonObject.get(KEY_STORE_PASS).getAsString())
+            .enableDmaapCertAuth(jsonObject.get("security.enableDmaapCertAuth").getAsBoolean())
             .build();
     }
 }
\ No newline at end of file
index e598b4b..1e1e049 100644 (file)
@@ -104,9 +104,8 @@ public class CloudConfiguration extends AppConfig {
         return Optional.ofNullable(aaiClientCloudConfiguration).orElse(super.getAaiClientConfiguration());
     }
 
-
     @Override
     public DmaapConsumerConfiguration getDmaapConsumerConfiguration() {
         return Optional.ofNullable(dmaapConsumerCloudConfiguration).orElse(super.getDmaapConsumerConfiguration());
     }
-}
+}
\ No newline at end of file
index 18cd1f8..54c6353 100644 (file)
@@ -26,8 +26,6 @@ import com.google.gson.JsonObject;
 import com.google.gson.JsonParser;
 import com.google.gson.JsonSyntaxException;
 import com.google.gson.TypeAdapterFactory;
-import java.io.BufferedInputStream;
-import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
@@ -59,6 +57,7 @@ public abstract class PrhAppConfig implements Config {
     private static final String AAI_CONFIG = "aaiClientConfiguration";
     private static final String DMAAP_PRODUCER = "dmaapProducerConfiguration";
     private static final String DMAAP_CONSUMER = "dmaapConsumerConfiguration";
+    private static final String SECURITY = "security";
 
     private static final Logger LOGGER = LoggerFactory.getLogger(PrhAppConfig.class);
 
@@ -92,22 +91,25 @@ public abstract class PrhAppConfig implements Config {
         GsonBuilder gsonBuilder = new GsonBuilder();
         ServiceLoader.load(TypeAdapterFactory.class).forEach(gsonBuilder::registerTypeAdapterFactory);
         JsonParser parser = new JsonParser();
-        JsonObject jsonObject;
 
         try (InputStream inputStream = resourceFile.getInputStream()) {
             JsonElement rootElement = getJsonElement(parser, inputStream);
             if (rootElement.isJsonObject()) {
-                jsonObject = rootElement.getAsJsonObject();
+                JsonObject jsonObject = concatenateJsonObjects(
+                        rootElement.getAsJsonObject().getAsJsonObject(CONFIG).getAsJsonObject(AAI).getAsJsonObject(AAI_CONFIG),
+                        rootElement.getAsJsonObject().getAsJsonObject(CONFIG).getAsJsonObject(SECURITY));
                 aaiClientConfiguration = deserializeType(gsonBuilder,
-                    jsonObject.getAsJsonObject(CONFIG).getAsJsonObject(AAI).getAsJsonObject(AAI_CONFIG),
+                        jsonObject,
                     AaiClientConfiguration.class);
-
                 dmaapConsumerConfiguration = deserializeType(gsonBuilder,
-                    jsonObject.getAsJsonObject(CONFIG).getAsJsonObject(DMAAP).getAsJsonObject(DMAAP_CONSUMER),
+                    concatenateJsonObjects(
+                        rootElement.getAsJsonObject().getAsJsonObject(CONFIG).getAsJsonObject(DMAAP).getAsJsonObject(DMAAP_CONSUMER),
+                        rootElement.getAsJsonObject().getAsJsonObject(CONFIG).getAsJsonObject(SECURITY)),
                     DmaapConsumerConfiguration.class);
-
                 dmaapPublisherConfiguration = deserializeType(gsonBuilder,
-                    jsonObject.getAsJsonObject(CONFIG).getAsJsonObject(DMAAP).getAsJsonObject(DMAAP_PRODUCER),
+                    concatenateJsonObjects(
+                        rootElement.getAsJsonObject().getAsJsonObject(CONFIG).getAsJsonObject(DMAAP).getAsJsonObject(DMAAP_PRODUCER),
+                        rootElement.getAsJsonObject().getAsJsonObject(CONFIG).getAsJsonObject(SECURITY)),
                     DmaapPublisherConfiguration.class);
             }
         } catch (IOException e) {
@@ -121,6 +123,12 @@ public abstract class PrhAppConfig implements Config {
         return parser.parse(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
     }
 
+    private JsonObject concatenateJsonObjects(JsonObject target, JsonObject source) {
+        source.entrySet()
+            .forEach(entry -> target.add(entry.getKey(), entry.getValue()));
+        return target;
+    }
+
     private <T> T deserializeType(@NotNull GsonBuilder gsonBuilder, @NotNull JsonObject jsonObject,
         @NotNull Class<T> type) {
         return gsonBuilder.create().fromJson(jsonObject, type);
@@ -130,7 +138,4 @@ public abstract class PrhAppConfig implements Config {
         this.resourceFile = resourceFile;
     }
 
-    InputStream getInputStream(@NotNull String filepath) throws IOException {
-        return new BufferedInputStream(new FileInputStream(filepath));
-    }
 }
\ No newline at end of file
index b3bff7d..75917f1 100644 (file)
           "Content-Type": "application/merge-patch+json"
         }
       }
+    },
+    "security": {
+        "keyFile" : "/opt/app/prh/local/org.onap.prh.keyfile",
+        "trustStore" : "change it",
+        "trustStorePassword" : "change it",
+        "keyStore" : "change it",
+        "keyStorePassword" : "change it",
+        "enableAaiCertAuth" : "false",
+        "enableDmaapCertAuth" : "false"
     }
   }
 }
\ No newline at end of file
diff --git a/prh-app-server/src/test/java/org/onap/dcaegen2/services/prh/TestAppConfiguration.java b/prh-app-server/src/test/java/org/onap/dcaegen2/services/prh/TestAppConfiguration.java
new file mode 100644 (file)
index 0000000..88aa434
--- /dev/null
@@ -0,0 +1,87 @@
+/*
+ * ============LICENSE_START=======================================================
+ * PNF-REGISTRATION-HANDLER
+ * ================================================================================
+ * Copyright (C) 2018 NOKIA Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.dcaegen2.services.prh;
+
+import org.onap.dcaegen2.services.prh.config.ImmutableAaiClientConfiguration;
+import org.onap.dcaegen2.services.prh.config.ImmutableDmaapConsumerConfiguration;
+import org.onap.dcaegen2.services.prh.config.ImmutableDmaapPublisherConfiguration;
+
+
+public class TestAppConfiguration {
+    public static ImmutableDmaapConsumerConfiguration createDefaultDmaapConsumerConfiguration() {
+        return new ImmutableDmaapConsumerConfiguration.Builder()
+                .consumerGroup("OpenDCAE-c12")
+                .consumerId("c12")
+                .dmaapContentType("application/json")
+                .dmaapHostName("message-router.onap.svc.cluster.local")
+                .dmaapPortNumber(3904)
+                .dmaapProtocol("http")
+                .dmaapUserName("admin")
+                .dmaapUserPassword("admin")
+                .keyFile("/opt/app/prh/local/org.onap.prh.keyfile")
+                .trustStore("/opt/app/prh/local/org.onap.prh.trust.jks")
+                .trustStorePassword("change_it")
+                .keyStore("/opt/app/prh/local/org.onap.prh.p12")
+                .keyStorePassword("change_it")
+                .enableDmaapCertAuth(false)
+                .dmaapTopicName("/events/unauthenticated.SEC_OTHER_OUTPUT")
+                .timeoutMs(-1)
+                .messageLimit(-1)
+                .build();
+    }
+
+    public static ImmutableDmaapPublisherConfiguration createDefaultDmaapPublisherConfiguration() {
+        return new ImmutableDmaapPublisherConfiguration.Builder()
+                .dmaapContentType("application/json")
+                .dmaapHostName("message-router.onap.svc.cluster.local")
+                .dmaapPortNumber(3904)
+                .dmaapProtocol("http")
+                .dmaapUserName("admin")
+                .dmaapUserPassword("admin")
+                .keyFile("/opt/app/prh/local/org.onap.prh.keyfile")
+                .trustStore("/opt/app/prh/local/org.onap.prh.trust.jks")
+                .trustStorePassword("change_it")
+                .keyStore("/opt/app/prh/local/org.onap.prh.p12")
+                .keyStorePassword("change_it")
+                .enableDmaapCertAuth(false)
+                .dmaapTopicName("/events/unauthenticated.PNF_READY")
+                .build();
+    }
+
+    public static ImmutableAaiClientConfiguration createDefaultAaiClientConfiguration() {
+        return new ImmutableAaiClientConfiguration.Builder()
+                .aaiHost("aai.onap.svc.cluster.local")
+                .aaiPort(8443)
+                .aaiProtocol("https")
+                .aaiUserName("AAI")
+                .aaiUserPassword("AAI")
+                .aaiIgnoreSslCertificateErrors(true)
+                .aaiBasePath("/aai/v12")
+                .aaiPnfPath("/network/pnfs/pnf")
+                .keyFile("/opt/app/prh/local/org.onap.prh.keyfile")
+                .trustStore("/opt/app/prh/local/org.onap.prh.trust.jks")
+                .trustStorePassword("change_it")
+                .keyStore("/opt/app/prh/local/org.onap.prh.p12")
+                .keyStorePassword("change_it")
+                .enableAaiCertAuth(false)
+                .build();
+    }
+}
\ No newline at end of file
index dd0a3db..f05dfa7 100644 (file)
 
 package org.onap.dcaegen2.services.prh.configuration;
 
+import static java.lang.ClassLoader.getSystemResource;
 import static org.assertj.core.api.Assertions.assertThat;
 
 import com.google.gson.Gson;
 import com.google.gson.JsonObject;
+import java.nio.file.Files;
+import java.nio.file.Paths;
 import org.junit.jupiter.api.Test;
+import org.onap.dcaegen2.services.prh.TestAppConfiguration;
 import org.onap.dcaegen2.services.prh.config.AaiClientConfiguration;
 import org.onap.dcaegen2.services.prh.config.DmaapConsumerConfiguration;
 import org.onap.dcaegen2.services.prh.config.DmaapPublisherConfiguration;
@@ -32,79 +36,25 @@ import org.onap.dcaegen2.services.prh.config.ImmutableAaiClientConfiguration;
 import org.onap.dcaegen2.services.prh.config.ImmutableDmaapConsumerConfiguration;
 import org.onap.dcaegen2.services.prh.config.ImmutableDmaapPublisherConfiguration;
 
-public class CloudConfigParserTest {
 
-    private static final String correctJson =
-        "{\"aai.aaiClientConfiguration.aaiIgnoreSslCertificateErrors\": true, "
-            + "\"dmaap.dmaapProducerConfiguration.dmaapTopicName\": \"/events/unauthenticated.PNF_READY\", "
-            + "\"dmaap.dmaapConsumerCon"
-            + "figuration.timeoutMs\": -1, \"dmaap.dmaapConsumerConfiguration.dmaapHostName\": "
-            + "\"message-router.onap.svc.cluster.local\", \"aai.aaiClientConfiguration.aaiPnfPath\": "
-            + "\"/network/pnfs/pnf\", \"aai.aaiClientConfiguration.aai"
-            + "UserPassword\": \"AAI\", \"dmaap.dmaapConsumerConfiguration.dmaapUserName\": \"admin\", "
-            + "\"aai.aaiClientConfiguration.aaiBasePath\": \"/aai/v12\", "
-            + "\"dmaap.dmaapProducerConfiguration.dmaapPortNumber\": 3904, \"aai.aaiClientConf"
-            + "iguration.aaiHost\": \"aai.onap.svc.cluster.local\", "
-            + "\"dmaap.dmaapConsumerConfiguration.dmaapUserPassword\": \"admin\", "
-            + "\"dmaap.dmaapProducerConfiguration.dmaapProtocol\": \"http\", \"dmaap.dmaapProducerConfiguration.dmaapC"
-            + "ontentType\": \"application/json\", "
-            + "\"dmaap.dmaapConsumerConfiguration.dmaapTopicName\": \"/events/unauthenticated.SEC_OTHER_OUTPUT\", "
-            + "\"dmaap.dmaapConsumerConfiguration.dmaapPortNumber\": 3904, \"dmaap.dmaapConsumerConfi"
-            + "guration.dmaapContentType\": \"application/json\", \"dmaap.dmaapConsumerConfiguration.messageLimit\": "
-            + "-1, \"dmaap.dmaapConsumerConfiguration.dmaapProtocol\": \"http\", "
-            + "\"aai.aaiClientConfiguration.aaiUserName\": \"AAI\", \"dm"
-            + "aap.dmaapConsumerConfiguration.consumerId\": \"c12\", \"dmaap.dmaapProducerConfiguration.dmaapHostName\""
-            + ": \"message-router.onap.svc.cluster.local\", \"aai.aaiClientConfiguration.aaiHostPortNumber\": "
-            + "8443, \"dmaap.dmaapConsumerConfiguration.consumerGroup\": \"OpenDCAE-c12\", "
-            + "\"aai.aaiClientConfiguration.aaiProtocol\": \"https\", "
-            + "\"dmaap.dmaapProducerConfiguration.dmaapUserName\": \"admin\", "
-            + "\"dmaap.dmaapProducerConfiguration.dmaapUserPasswor"
-            + "d\": \"admin\"}";
+class CloudConfigParserTest {
 
-    private static final ImmutableAaiClientConfiguration correctAaiClientConfig =
-        new ImmutableAaiClientConfiguration.Builder()
-            .aaiHost("aai.onap.svc.cluster.local")
-            .aaiPort(8443)
-            .aaiUserName("AAI")
-            .aaiPnfPath("/network/pnfs/pnf")
-            .aaiIgnoreSslCertificateErrors(true)
-            .aaiUserPassword("AAI")
-            .aaiProtocol("https")
-            .aaiBasePath("/aai/v12")
-            .build();
-
-    private static final ImmutableDmaapConsumerConfiguration correctDmaapConsumerConfig =
-        new ImmutableDmaapConsumerConfiguration.Builder()
-            .timeoutMs(-1)
-            .dmaapHostName("message-router.onap.svc.cluster.local")
-            .dmaapUserName("admin")
-            .dmaapUserPassword("admin")
-            .dmaapTopicName("/events/unauthenticated.SEC_OTHER_OUTPUT")
-            .dmaapPortNumber(3904)
-            .dmaapContentType("application/json")
-            .messageLimit(-1)
-            .dmaapProtocol("http")
-            .consumerId("c12")
-            .consumerGroup("OpenDCAE-c12")
-            .build();
-
-    private static final ImmutableDmaapPublisherConfiguration correctDmaapPublisherConfig =
-        new ImmutableDmaapPublisherConfiguration.Builder()
-            .dmaapTopicName("/events/unauthenticated.PNF_READY")
-            .dmaapUserPassword("admin")
-            .dmaapPortNumber(3904)
-            .dmaapProtocol("http")
-            .dmaapContentType("application/json")
-            .dmaapHostName("message-router.onap.svc.cluster.local")
-            .dmaapUserName("admin")
-            .build();
-
-    private CloudConfigParser cloudConfigParser = new CloudConfigParser(
-        new Gson().fromJson(correctJson, JsonObject.class));
+    private final String correctJson =
+            new String(Files.readAllBytes(Paths.get(getSystemResource("flattened_configuration.json").toURI())));
+    private final ImmutableAaiClientConfiguration correctAaiClientConfig =
+            TestAppConfiguration.createDefaultAaiClientConfiguration();
+    private final ImmutableDmaapConsumerConfiguration correctDmaapConsumerConfig =
+            TestAppConfiguration.createDefaultDmaapConsumerConfiguration();
+    private final ImmutableDmaapPublisherConfiguration correctDmaapPublisherConfig =
+            TestAppConfiguration.createDefaultDmaapPublisherConfiguration();
+    private final CloudConfigParser cloudConfigParser = new CloudConfigParser(
+            new Gson().fromJson(correctJson, JsonObject.class));
 
+    CloudConfigParserTest() throws Exception {
+    }
 
     @Test
-    public void shouldCreateAaiConfigurationCorrectly() {
+    void shouldCreateAaiConfigurationCorrectly() {
         // when
         AaiClientConfiguration aaiClientConfig = cloudConfigParser.getAaiClientConfig();
 
@@ -115,7 +65,7 @@ public class CloudConfigParserTest {
 
 
     @Test
-    public void shouldCreateDmaapConsumerConfigurationCorrectly() {
+    void shouldCreateDmaapConsumerConfigurationCorrectly() {
         // when
         DmaapConsumerConfiguration dmaapConsumerConfig = cloudConfigParser.getDmaapConsumerConfig();
 
@@ -126,7 +76,7 @@ public class CloudConfigParserTest {
 
 
     @Test
-    public void shouldCreateDmaapPublisherConfigurationCorrectly() {
+    void shouldCreateDmaapPublisherConfigurationCorrectly() {
         // when
         DmaapPublisherConfiguration dmaapPublisherConfig = cloudConfigParser.getDmaapPublisherConfig();
 
index c4c86db..61e17d3 100644 (file)
 
 package org.onap.dcaegen2.services.prh.configuration;
 
+import static java.lang.ClassLoader.getSystemResource;
+import static java.nio.file.Files.readAllBytes;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyString;
 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.when;
 
@@ -35,8 +38,7 @@ import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.nio.charset.StandardCharsets;
-import java.util.Objects;
-import org.junit.jupiter.api.Assertions;
+import java.nio.file.Paths;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
@@ -44,51 +46,22 @@ import org.onap.dcaegen2.services.prh.integration.junit5.mockito.MockitoExtensio
 import org.springframework.core.io.InputStreamResource;
 import org.springframework.core.io.Resource;
 
+
 /**
  * @author <a href="mailto:przemyslaw.wasala@nokia.com">Przemysław Wąsala</a> on 4/9/18
  */
 @ExtendWith({MockitoExtension.class})
 class PrhAppConfigTest {
 
-    private static final String PRH_ENDPOINTS = "prh_endpoints.json";
-    private static final String jsonString = "{\"configs\":{\"aai\":{\"aaiClientConfiguration\":{\"aaiHost\":"
-        + "\"localhost\",\"aaiPort\":8080,\"aaiIgnoreSslCertificateErrors\":true,\"aaiProtocol\":"
-        + "\"https\",\"aaiUserName\":\"admin\",\"aaiUserPassword\":\"admin\",\"aaiBasePath\":\"/aai/v11\","
-        + "\"aaiPnfPath\":\"/network/pnfs/pnf\",\"aaiHeaders\":{\"X-FromAppId\":\"prh\",\"X-TransactionId\":\"9999\","
-        + "\"Accept\":\"application/json\",\"Real-Time\":\"true\",\"Content-Type\":\"application/merge-patch+json\","
-        + "\"Authorization\":\"Basic QUFJOkFBSQ==\"}}},"
-        + "\"dmaap\":{\"dmaapConsumerConfiguration\":{\"consumerGroup\":\"other\",\"consumerId\":\"1\","
-        + "\"dmaapContentType\":\"application/json\",\"dmaapHostName\":\"localhost\",\"dmaapPortNumber\":2222,"
-        + "\"dmaapProtocol\":\"http\",\"dmaapTopicName\":\"temp\",\"dmaapUserName\":\"admin\",\"dmaapUserPassword\""
-        + ":\"admin\",\"messageLimit\":1000,\"timeoutMs\":1000},\"dmaapProducerConfiguration\":{\"dmaapContentType\":"
-        + "\"application/json\",\"dmaapHostName\":\"localhost\",\"dmaapPortNumber\":2223,\"dmaapProtocol\":\"http\","
-        + "\"dmaapTopicName\":\"temp\",\"dmaapUserName\":\"admin\",\"dmaapUserPassword\":\"admin\"}}}}";
-
-    private static final String incorrectJsonString = "{\"configs\":{\"aai\":{\"aaiClientConfiguration\":{\"aaiHost\":"
-        + "\"localhost\",\"aaiPort\":8080,\"aaiIgnoreSslCertificateErrors\":true,\"aaiProtocol\":\"https\","
-        + "\"aaiUserName\":\"admin\",\"aaiUserPassword\":\"admin\",\"aaiBasePath\":\"/aai/v11\",\"aaiPnfPath\":"
-        + "\"/network/pnfs/pnf\",\"aaiHeaders\":{\"X-FromAppId\":\"prh\",\"X-TransactionId\":\"9999\",\"Accept\":"
-        + "\"application/json\",\"Real-Time\":\"true\",\"Content-Type\":\"application/merge-patch+json\","
-        + "\"Authorization\":\"Basic QUFJOkFBSQ==\"}}},\"dmaap\""
-        + ":{\"dmaapConsumerConfiguration\":{\"consumerGroup\":\"other\",\"consumerId\":\"1\",\"dmaapContentType\""
-        + ":\"application/json\",\"dmaapHostName\":\"localhost\",\"dmaapPortNumber\":2222,\"dmaapProtocol\":\"http\""
-        + ",\"dmaapTopicName\":\"temp\",\"dmaapUserName\":\"admin\",\"dmaapUserPassword\":\"admin\",\"messageLimit\""
-        + ":1000,\"timeoutMs\":1000},\"dmaapProducerConfiguration\":{\"dmaapContentType\":\"application/json\","
-        + "\"dmaapHostName\":\"localhost\",\"dmaapPortNumber\":2223,\"dmaapProtocol\":\"http\",\"dmaaptopicName\""
-        + ":\"temp\",\"dmaapuserName\":\"admin\",\"dmaapuserPassword\":\"admin\"}}}}";
-
+    private final String jsonString =
+            new String(readAllBytes(Paths.get(getSystemResource("correct_config.json").toURI())));
+    private final String incorrectJsonString =
+            new String(readAllBytes(Paths.get(getSystemResource("incorrect_config.json").toURI())));
     private PrhAppConfig prhAppConfig;
     private AppConfig appConfig;
 
-    private static InputStream inputStream;
 
-    static {
-        try {
-            inputStream = Objects
-                .requireNonNull(PrhAppConfigTest.class.getClassLoader().getResource(PRH_ENDPOINTS)).openStream();
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
+    PrhAppConfigTest() throws Exception {
     }
 
     @BeforeEach
@@ -98,30 +71,16 @@ class PrhAppConfigTest {
     }
 
     @Test
-    void whenApplicationWasStarted_FilePathIsSet() throws IOException {
-        //
-        // When
-        //
-        doReturn(inputStream).when(prhAppConfig).getInputStream(anyString());
-        //
-        // Then
-        //
-        verify(prhAppConfig, times(0)).initFileStreamReader();
-    }
-
-    @Test
-    void whenTheConfigurationFits_GetAaiAndDmaapObjectRepresentationConfiguration()
-        throws IOException {
+    void whenTheConfigurationFits_GetAaiAndDmaapObjectRepresentationConfiguration() {
         //
         // Given
         //
         InputStream inputStream = new ByteArrayInputStream((jsonString.getBytes(
-            StandardCharsets.UTF_8)));
+                StandardCharsets.UTF_8)));
         //
         // When
         //
         prhAppConfig.setResourceFile(new InputStreamResource(inputStream));
-        doReturn(inputStream).when(prhAppConfig).getInputStream(any());
         prhAppConfig.initFileStreamReader();
         appConfig.dmaapConsumerConfiguration = prhAppConfig.getDmaapConsumerConfiguration();
         appConfig.dmaapPublisherConfiguration = prhAppConfig.getDmaapPublisherConfiguration();
@@ -129,16 +88,13 @@ class PrhAppConfigTest {
         //
         // Then
         //
-        verify(prhAppConfig, times(1)).initFileStreamReader();
-        Assertions.assertNotNull(prhAppConfig.getAaiClientConfiguration());
-        Assertions.assertNotNull(prhAppConfig.getDmaapConsumerConfiguration());
-        Assertions.assertNotNull(prhAppConfig.getDmaapPublisherConfiguration());
-        Assertions
-            .assertEquals(appConfig.getDmaapPublisherConfiguration(), prhAppConfig.getDmaapPublisherConfiguration());
-        Assertions
-            .assertEquals(appConfig.getDmaapConsumerConfiguration(), prhAppConfig.getDmaapConsumerConfiguration());
-        Assertions
-            .assertEquals(appConfig.getAaiClientConfiguration(), prhAppConfig.getAaiClientConfiguration());
+        verify(prhAppConfig).initFileStreamReader();
+        assertNotNull(prhAppConfig.getDmaapConsumerConfiguration());
+        assertNotNull(prhAppConfig.getDmaapPublisherConfiguration());
+        assertNotNull(prhAppConfig.getAaiClientConfiguration());
+        assertEquals(appConfig.getDmaapPublisherConfiguration(), prhAppConfig.getDmaapPublisherConfiguration());
+        assertEquals(appConfig.getDmaapConsumerConfiguration(), prhAppConfig.getDmaapConsumerConfiguration());
+        assertEquals(appConfig.getAaiClientConfiguration(), prhAppConfig.getAaiClientConfiguration());
 
     }
 
@@ -147,7 +103,7 @@ class PrhAppConfigTest {
         //
         // Given
         InputStream inputStream = new ByteArrayInputStream((jsonString.getBytes(
-            StandardCharsets.UTF_8)));
+                StandardCharsets.UTF_8)));
         Resource resource = spy(new InputStreamResource(inputStream));
         //
         when(resource.getInputStream()).thenThrow(new IOException());
@@ -159,47 +115,44 @@ class PrhAppConfigTest {
         //
         // Then
         //
-        verify(prhAppConfig, times(1)).initFileStreamReader();
-        Assertions.assertNull(prhAppConfig.getAaiClientConfiguration());
-        Assertions.assertNull(prhAppConfig.getDmaapConsumerConfiguration());
-        Assertions.assertNull(prhAppConfig.getDmaapPublisherConfiguration());
+        verify(prhAppConfig).initFileStreamReader();
+        assertNull(prhAppConfig.getAaiClientConfiguration());
+        assertNull(prhAppConfig.getDmaapConsumerConfiguration());
+        assertNull(prhAppConfig.getDmaapPublisherConfiguration());
 
     }
 
     @Test
-    void whenFileIsExistsButJsonIsIncorrect() throws IOException {
+    void whenFileIsExistsButJsonIsIncorrect() {
         //
         // Given
         //
         InputStream inputStream = new ByteArrayInputStream((incorrectJsonString.getBytes(
-            StandardCharsets.UTF_8)));
+                StandardCharsets.UTF_8)));
         //
         // When
         //
         prhAppConfig.setResourceFile(new InputStreamResource(inputStream));
-        doReturn(inputStream).when(prhAppConfig).getInputStream(any());
         prhAppConfig.initFileStreamReader();
 
         //
         // Then
         //
-        verify(prhAppConfig, times(1)).initFileStreamReader();
-        Assertions.assertNotNull(prhAppConfig.getAaiClientConfiguration());
-        Assertions.assertNotNull(prhAppConfig.getDmaapConsumerConfiguration());
-        Assertions.assertNull(prhAppConfig.getDmaapPublisherConfiguration());
+        verify(prhAppConfig).initFileStreamReader();
+        assertNotNull(prhAppConfig.getAaiClientConfiguration());
+        assertNotNull(prhAppConfig.getDmaapConsumerConfiguration());
+        assertNull(prhAppConfig.getDmaapPublisherConfiguration());
 
     }
 
 
     @Test
-    void whenTheConfigurationFits_ButRootElementIsNotAJsonObject()
-        throws IOException {
+    void whenTheConfigurationFits_ButRootElementIsNotAJsonObject() {
         // Given
         InputStream inputStream = new ByteArrayInputStream((jsonString.getBytes(
-            StandardCharsets.UTF_8)));
+                StandardCharsets.UTF_8)));
         // When
         prhAppConfig.setResourceFile(new InputStreamResource(inputStream));
-        doReturn(inputStream).when(prhAppConfig).getInputStream(any());
         JsonElement jsonElement = mock(JsonElement.class);
         when(jsonElement.isJsonObject()).thenReturn(false);
         doReturn(jsonElement).when(prhAppConfig).getJsonElement(any(JsonParser.class), any(InputStream.class));
@@ -209,9 +162,9 @@ class PrhAppConfigTest {
         appConfig.aaiClientConfiguration = prhAppConfig.getAaiClientConfiguration();
 
         // Then
-        verify(prhAppConfig, times(1)).initFileStreamReader();
-        Assertions.assertNull(prhAppConfig.getAaiClientConfiguration());
-        Assertions.assertNull(prhAppConfig.getDmaapConsumerConfiguration());
-        Assertions.assertNull(prhAppConfig.getDmaapPublisherConfiguration());
+        verify(prhAppConfig).initFileStreamReader();
+        assertNull(prhAppConfig.getAaiClientConfiguration());
+        assertNull(prhAppConfig.getDmaapConsumerConfiguration());
+        assertNull(prhAppConfig.getDmaapPublisherConfiguration());
     }
 }
\ No newline at end of file
index 6a9326e..56d7b81 100644 (file)
@@ -29,13 +29,14 @@ import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.verifyNoMoreInteractions;
 import static org.mockito.Mockito.when;
 
+
 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.config.AaiClientConfiguration;
-import org.onap.dcaegen2.services.prh.config.ImmutableAaiClientConfiguration;
 import org.onap.dcaegen2.services.prh.configuration.AppConfig;
 import org.onap.dcaegen2.services.prh.exceptions.PrhTaskException;
 import org.onap.dcaegen2.services.prh.model.ConsumerDmaapModel;
@@ -51,14 +52,6 @@ import reactor.test.StepVerifier;
  */
 class AaiProducerTaskImplTest {
 
-
-    private static final String AAI_HOST = "/aai/v11/network/pnfs/pnf/NOKQTFCOC540002E";
-    private static final Integer PORT = 1234;
-    private static final String PROTOCOL = "https";
-    private static final String USER_NAME_PASSWORD = "PRH";
-    private static final String BASE_PATH = "/aai/v11";
-    private static final String PNF_PATH = "/network/pnfs/pnf";
-
     private ConsumerDmaapModel consumerDmaapModel;
     private AaiProducerTaskImpl aaiProducerTask;
     private AaiClientConfiguration aaiClientConfiguration;
@@ -69,16 +62,7 @@ class AaiProducerTaskImplTest {
     @BeforeEach
     void setUp() {
         clientResponse = mock(ClientResponse.class);
-        aaiClientConfiguration = new ImmutableAaiClientConfiguration.Builder()
-            .aaiHost(AAI_HOST)
-            .aaiPort(PORT)
-            .aaiProtocol(PROTOCOL)
-            .aaiUserName(USER_NAME_PASSWORD)
-            .aaiUserPassword(USER_NAME_PASSWORD)
-            .aaiIgnoreSslCertificateErrors(true)
-            .aaiBasePath(BASE_PATH)
-            .aaiPnfPath(PNF_PATH)
-            .build();
+        aaiClientConfiguration = TestAppConfiguration.createDefaultAaiClientConfiguration();
         consumerDmaapModel = ImmutableConsumerDmaapModel.builder().ipv4("10.16.123.234")
             .ipv6("0:0:0:0:0:FFFF:0A10:7BEA")
             .correlationId("NOKQTFCOC540002E").build();
index c17e254..8d6218e 100644 (file)
 package org.onap.dcaegen2.services.prh.tasks;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
 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.when;
+import static org.onap.dcaegen2.services.prh.TestAppConfiguration.createDefaultDmaapConsumerConfiguration;
 
 import com.google.gson.JsonElement;
 import com.google.gson.JsonParser;
@@ -35,16 +36,14 @@ import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
 import org.mockito.Mockito;
 import org.onap.dcaegen2.services.prh.config.DmaapConsumerConfiguration;
-import org.onap.dcaegen2.services.prh.config.ImmutableDmaapConsumerConfiguration;
 import org.onap.dcaegen2.services.prh.configuration.AppConfig;
-import org.onap.dcaegen2.services.prh.exceptions.DmaapEmptyResponseException;
 import org.onap.dcaegen2.services.prh.model.ConsumerDmaapModel;
 import org.onap.dcaegen2.services.prh.model.ImmutableConsumerDmaapModel;
 import org.onap.dcaegen2.services.prh.service.DmaapConsumerJsonParser;
 import org.onap.dcaegen2.services.prh.service.consumer.DMaaPConsumerReactiveHttpClient;
 import reactor.core.publisher.Flux;
 import reactor.core.publisher.Mono;
-import reactor.test.StepVerifier;
+
 
 /**
  * @author <a href="mailto:przemyslaw.wasala@nokia.com">Przemysław Wąsala</a> on 5/17/18
@@ -61,10 +60,7 @@ class DmaapConsumerTaskImplTest {
 
     @BeforeAll
     static void setUp() {
-        dmaapConsumerConfiguration = new ImmutableDmaapConsumerConfiguration.Builder().consumerGroup("OpenDCAE-c12")
-            .consumerId("c12").dmaapContentType("application/json").dmaapHostName("54.45.33.2").dmaapPortNumber(1234)
-            .dmaapProtocol("https").dmaapUserName("PRH").dmaapUserPassword("PRH")
-            .dmaapTopicName("unauthenticated.SEC_OTHER_OUTPUT").timeoutMs(-1).messageLimit(-1).build();
+        dmaapConsumerConfiguration = createDefaultDmaapConsumerConfiguration();
 
         consumerDmaapModel = ImmutableConsumerDmaapModel.builder().ipv4("10.16.123.234")
             .ipv6("0:0:0:0:0:FFFF:0A10:7BEA")
@@ -113,8 +109,8 @@ class DmaapConsumerTaskImplTest {
         Flux<ConsumerDmaapModel> response = dmaapConsumerTask.execute("Sample input");
 
         //then
-        verify(dMaaPConsumerReactiveHttpClient, times(1)).getDMaaPConsumerResponse();
-        assertEquals(null, response.blockFirst());
+        verify(dMaaPConsumerReactiveHttpClient).getDMaaPConsumerResponse();
+        assertNull(response.blockFirst());
     }
 
     @Test
@@ -126,7 +122,7 @@ class DmaapConsumerTaskImplTest {
         Flux<ConsumerDmaapModel> response = dmaapConsumerTask.execute("Sample input");
 
         //then
-        verify(dMaaPConsumerReactiveHttpClient, times(1)).getDMaaPConsumerResponse();
+        verify(dMaaPConsumerReactiveHttpClient).getDMaaPConsumerResponse();
         assertEquals(consumerDmaapModel, response.blockFirst());
     }
 
index fad7a06..00d6fc4 100644 (file)
@@ -29,12 +29,12 @@ 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 static org.onap.dcaegen2.services.prh.TestAppConfiguration.createDefaultDmaapPublisherConfiguration;
 
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.function.Executable;
 import org.onap.dcaegen2.services.prh.config.DmaapPublisherConfiguration;
-import org.onap.dcaegen2.services.prh.config.ImmutableDmaapPublisherConfiguration;
 import org.onap.dcaegen2.services.prh.configuration.AppConfig;
 import org.onap.dcaegen2.services.prh.exceptions.DmaapNotFoundException;
 import org.onap.dcaegen2.services.prh.exceptions.PrhTaskException;
@@ -59,10 +59,7 @@ class DmaapPublisherTaskImplTest {
 
     @BeforeAll
     static void setUp() {
-        dmaapPublisherConfiguration = new ImmutableDmaapPublisherConfiguration.Builder()
-            .dmaapContentType("application/json").dmaapHostName("54.45.33.2").dmaapPortNumber(1234)
-            .dmaapProtocol("https").dmaapUserName("PRH").dmaapUserPassword("PRH")
-            .dmaapTopicName("unauthenticated.SEC_OTHER_OUTPUT").build();
+        dmaapPublisherConfiguration = createDefaultDmaapPublisherConfiguration();
         consumerDmaapModel = ImmutableConsumerDmaapModel.builder().ipv4("10.16.123.234")
             .ipv6("0:0:0:0:0:FFFF:0A10:7BEA")
             .correlationId("NOKQTFCOC540002E").build();
@@ -6,8 +6,8 @@
         "aaiPort": 8080,
         "aaiIgnoreSslCertificateErrors": true,
         "aaiProtocol": "https",
-        "aaiUserName": "AAI",
-        "aaiUserPassword": "AAI",
+        "aaiUserName": "admin",
+        "aaiUserPassword": "admin",
         "aaiBasePath": "/aai/v11",
         "aaiPnfPath": "/network/pnfs/pnf",
         "aaiHeaders": {
@@ -15,7 +15,8 @@
           "X-TransactionId": "9999",
           "Accept": "application/json",
           "Real-Time": "true",
-          "Content-Type": "application/merge-patch+json"
+          "Content-Type": "application/merge-patch+json",
+          "Authorization": "Basic QUFJOkFBSQ=="
         }
       }
     },
@@ -27,7 +28,7 @@
         "dmaapHostName": "localhost",
         "dmaapPortNumber": 2222,
         "dmaapProtocol": "http",
-        "dmaapTopicName": "/events/pnfReady",
+        "dmaapTopicName": "temp",
         "dmaapUserName": "admin",
         "dmaapUserPassword": "admin",
         "messageLimit": 1000,
         "dmaapHostName": "localhost",
         "dmaapPortNumber": 2223,
         "dmaapProtocol": "http",
-        "dmaapTopicName": "/events/pnfReady",
+        "dmaapTopicName": "temp",
         "dmaapUserName": "admin",
         "dmaapUserPassword": "admin"
       }
+    },
+    "security": {
+      "keyFile": "/opt/app/prh/local/org.onap.prh.keyfile",
+      "trustStore": "/opt/app/prh/local/org.onap.prh.trust.jks",
+      "trustStorePassword": "change it",
+      "keyStore": "/opt/app/prh/local/org.onap.prh.p12",
+      "keyStorePassword": "change it",
+      "enableAaiCertAuth": "false",
+      "enableDmaapCertAuth": "false"
     }
   }
 }
\ No newline at end of file
diff --git a/prh-app-server/src/test/resources/flattened_configuration.json b/prh-app-server/src/test/resources/flattened_configuration.json
new file mode 100644 (file)
index 0000000..6584a59
--- /dev/null
@@ -0,0 +1,35 @@
+{
+  "aai.aaiClientConfiguration.aaiIgnoreSslCertificateErrors": true,
+  "dmaap.dmaapProducerConfiguration.dmaapTopicName": "/events/unauthenticated.PNF_READY",
+  "dmaap.dmaapConsumerConfiguration.timeoutMs": -1,
+  "dmaap.dmaapConsumerConfiguration.dmaapHostName": "message-router.onap.svc.cluster.local",
+  "aai.aaiClientConfiguration.aaiPnfPath": "/network/pnfs/pnf",
+  "aai.aaiClientConfiguration.aaiUserPassword": "AAI",
+  "dmaap.dmaapConsumerConfiguration.dmaapUserName": "admin",
+  "aai.aaiClientConfiguration.aaiBasePath": "/aai/v12",
+  "dmaap.dmaapProducerConfiguration.dmaapPortNumber": 3904,
+  "aai.aaiClientConfiguration.aaiHost": "aai.onap.svc.cluster.local",
+  "dmaap.dmaapConsumerConfiguration.dmaapUserPassword": "admin",
+  "dmaap.dmaapProducerConfiguration.dmaapProtocol": "http",
+  "dmaap.dmaapProducerConfiguration.dmaapContentType": "application/json",
+  "dmaap.dmaapConsumerConfiguration.dmaapTopicName": "/events/unauthenticated.SEC_OTHER_OUTPUT",
+  "dmaap.dmaapConsumerConfiguration.dmaapPortNumber": 3904,
+  "dmaap.dmaapConsumerConfiguration.dmaapContentType": "application/json",
+  "dmaap.dmaapConsumerConfiguration.messageLimit": -1,
+  "dmaap.dmaapConsumerConfiguration.dmaapProtocol": "http",
+  "aai.aaiClientConfiguration.aaiUserName": "AAI",
+  "dmaap.dmaapConsumerConfiguration.consumerId": "c12",
+  "dmaap.dmaapProducerConfiguration.dmaapHostName": "message-router.onap.svc.cluster.local",
+  "aai.aaiClientConfiguration.aaiHostPortNumber": 8443,
+  "dmaap.dmaapConsumerConfiguration.consumerGroup": "OpenDCAE-c12",
+  "aai.aaiClientConfiguration.aaiProtocol": "https",
+  "dmaap.dmaapProducerConfiguration.dmaapUserName": "admin",
+  "dmaap.dmaapProducerConfiguration.dmaapUserPassword": "admin",
+  "security.keyFile": "/opt/app/prh/local/org.onap.prh.keyfile",
+  "security.trustStore": "/opt/app/prh/local/org.onap.prh.trust.jks",
+  "security.trustStorePassword": "change_it",
+  "security.keyStore": "/opt/app/prh/local/org.onap.prh.p12",
+  "security.keyStorePassword": "change_it",
+  "security.enableAaiCertAuth": false,
+  "security.enableDmaapCertAuth": false
+}
\ No newline at end of file
diff --git a/prh-app-server/src/test/resources/incorrect_config.json b/prh-app-server/src/test/resources/incorrect_config.json
new file mode 100644 (file)
index 0000000..f320d98
--- /dev/null
@@ -0,0 +1,57 @@
+{
+  "configs": {
+    "aai": {
+      "aaiClientConfiguration": {
+        "aaiHost": "localhost",
+        "aaiPort": 8080,
+        "aaiIgnoreSslCertificateErrors": true,
+        "aaiProtocol": "https",
+        "aaiUserName": "admin",
+        "aaiUserPassword": "admin",
+        "aaiBasePath": "/aai/v11",
+        "aaiPnfPath": "/network/pnfs/pnf",
+        "aaiHeaders": {
+          "X-FromAppId": "prh",
+          "X-TransactionId": "9999",
+          "Accept": "application/json",
+          "Real-Time": "true",
+          "Content-Type": "application/merge-patch+json",
+          "Authorization": "Basic QUFJOkFBSQ=="
+        }
+      }
+    },
+    "dmaap": {
+      "dmaapConsumerConfiguration": {
+        "consumerGroup": "other",
+        "consumerId": "1",
+        "dmaapContentType": "application/json",
+        "dmaapHostName": "localhost",
+        "dmaapPortNumber": 2222,
+        "dmaapProtocol": "http",
+        "dmaapTopicName": "temp",
+        "dmaapUserName": "admin",
+        "dmaapUserPassword": "admin",
+        "messageLimit": 1000,
+        "timeoutMs": 1000
+      },
+      "dmaapProducerConfiguration": {
+        "dmaapContentType": "application/json",
+        "dmaapHostName": "localhost",
+        "dmaapPortNumber": 2223,
+        "dmaapProtocol": "http",
+        "dmaaptopicName": "temp",
+        "dmaapuserName": "admin",
+        "dmaapuserPassword": "admin"
+      }
+    },
+    "security": {
+      "keyFile": "/opt/app/prh/local/org.onap.prh.keyfile",
+      "trustStore": "/opt/app/prh/local/org.onap.prh.trust.jks",
+      "trustStorePassword": "change it",
+      "keyStore": "/opt/app/prh/local/org.onap.prh.p12",
+      "keyStorePassword": "change it",
+      "enableAaiCertAuth": "false",
+      "enableDmaapCertAuth": "false"
+    }
+  }
+}
\ No newline at end of file
index b21cc6e..8691111 100644 (file)
@@ -49,6 +49,24 @@ public interface DmaapCustomConfig extends Serializable {
     @Value.Parameter
     String dmaapContentType();
 
+    @Value.Parameter
+    String keyFile();
+
+    @Value.Parameter
+    String trustStore();
+
+    @Value.Parameter
+    String trustStorePassword();
+
+    @Value.Parameter
+    String keyStore();
+
+    @Value.Parameter
+    String keyStorePassword();
+
+    @Value.Parameter
+    Boolean enableDmaapCertAuth();
+
     interface Builder<T extends DmaapCustomConfig, B extends Builder<T, B>> {
 
         B dmaapHostName(String dmaapHostName);
@@ -65,6 +83,18 @@ public interface DmaapCustomConfig extends Serializable {
 
         B dmaapContentType(String dmaapContentType);
 
+        B keyFile(String keyFile);
+
+        B trustStore(String trustStore);
+
+        B trustStorePassword(String trustStorePass);
+
+        B keyStore(String keyStore);
+
+        B keyStorePassword(String keyStorePass);
+
+        B enableDmaapCertAuth(Boolean enableDmaapCertAuth);
+
         T build();
     }
 }
index 2239d11..01d470a 100644 (file)
@@ -20,7 +20,8 @@
 
 package org.onap.dcaegen2.services.prh.service.config;
 
-import org.junit.jupiter.api.Assertions;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
 import org.junit.jupiter.api.Test;
 import org.onap.dcaegen2.services.prh.config.DmaapConsumerConfiguration;
 import org.onap.dcaegen2.services.prh.config.ImmutableDmaapConsumerConfiguration;
@@ -43,33 +44,41 @@ class DmaapConsumerConfigurationTest {
         String consumerGroup = "other";
         Integer timeoutMs = 1000;
         Integer messageLimit = 1000;
+        String keyFile = "keyFile";
+        String trustStore = "trustStore";
+        String trustStorePass = "trustPass";
+        String keyStore = "keyStore";
+        String keyStorePass = "keyPass";
+        Boolean enableDmaapCertAuth = true;
 
         // When
         configuration = new ImmutableDmaapConsumerConfiguration.Builder()
-            .consumerId(consumerId)
-            .dmaapHostName(dmaapHostName)
-            .dmaapPortNumber(dmaapPortNumber)
-            .dmaapTopicName(dmaapTopicName)
-            .dmaapProtocol(dmaapProtocol)
-            .dmaapUserName(dmaapUserName)
-            .dmaapUserPassword(dmaapUserPassword)
-            .dmaapContentType(dmaapContentType)
-            .consumerGroup(consumerGroup)
-            .timeoutMs(timeoutMs)
-            .messageLimit(messageLimit)
-            .build();
+                .consumerId(consumerId)
+                .dmaapHostName(dmaapHostName)
+                .dmaapPortNumber(dmaapPortNumber)
+                .dmaapTopicName(dmaapTopicName)
+                .dmaapProtocol(dmaapProtocol)
+                .dmaapUserName(dmaapUserName)
+                .dmaapUserPassword(dmaapUserPassword)
+                .dmaapContentType(dmaapContentType)
+                .consumerGroup(consumerGroup)
+                .timeoutMs(timeoutMs)
+                .messageLimit(messageLimit)
+                .keyFile(keyFile)
+                .trustStore(trustStore)
+                .trustStorePassword(trustStorePass)
+                .keyStore(keyStore)
+                .keyStorePassword(keyStorePass)
+                .enableDmaapCertAuth(enableDmaapCertAuth)
+                .build();
 
         // Then
-        Assertions.assertNotNull(configuration);
-        Assertions.assertEquals(consumerId, configuration.consumerId());
-        Assertions.assertEquals(dmaapHostName, configuration.dmaapHostName());
-        Assertions.assertEquals(dmaapPortNumber, configuration.dmaapPortNumber());
-        Assertions.assertEquals(dmaapTopicName, configuration.dmaapTopicName());
-        Assertions.assertEquals(dmaapProtocol, configuration.dmaapProtocol());
-        Assertions.assertEquals(dmaapUserName, configuration.dmaapUserName());
-        Assertions.assertEquals(dmaapUserPassword, configuration.dmaapUserPassword());
-        Assertions.assertEquals(consumerGroup, configuration.consumerGroup());
-        Assertions.assertEquals(timeoutMs, configuration.timeoutMs());
-        Assertions.assertEquals(messageLimit, configuration.messageLimit());
+        assertEquals("DmaapConsumerConfiguration{"
+                + "consumerId=1, consumerGroup=other, timeoutMs=1000, messageLimit=1000, dmaapHostName=localhost, "
+                + "dmaapPortNumber=2222, dmaapTopicName=temp, dmaapProtocol=http, dmaapUserName=admin, "
+                + "dmaapUserPassword=admin, dmaapContentType=application/json, keyFile=keyFile, "
+                + "trustStore=trustStore, trustStorePassword=trustPass, keyStore=keyStore, "
+                + "keyStorePassword=keyPass, enableDmaapCertAuth=true}", configuration.toString());
+
     }
 }
index f4a8f10..d647138 100644 (file)
@@ -20,7 +20,8 @@
 
 package org.onap.dcaegen2.services.prh.service.config;
 
-import org.junit.jupiter.api.Assertions;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
 import org.junit.jupiter.api.Test;
 import org.onap.dcaegen2.services.prh.config.DmaapPublisherConfiguration;
 import org.onap.dcaegen2.services.prh.config.ImmutableDmaapPublisherConfiguration;
@@ -40,25 +41,35 @@ class DmaapPublisherConfigurationTest {
         String dmaapUserName = "admin";
         String dmaapUserPassword = "admin";
         String dmaapContentType = "application/json";
+        String keyFile = "keyFile";
+        String trustStore = "trustStore";
+        String trustStorePass = "trustPass";
+        String keyStore = "keyStore";
+        String keyStorePass = "keyPass";
+        Boolean enableDmaapCertAuth = true;
 
         // When
         configuration = new ImmutableDmaapPublisherConfiguration.Builder()
-            .dmaapHostName(dmaapHostName)
-            .dmaapPortNumber(dmaapPortNumber)
-            .dmaapTopicName(dmaapTopicName)
-            .dmaapProtocol(dmaapProtocol)
-            .dmaapUserName(dmaapUserName)
-            .dmaapUserPassword(dmaapUserPassword)
-            .dmaapContentType(dmaapContentType)
-            .build();
+                .dmaapHostName(dmaapHostName)
+                .dmaapPortNumber(dmaapPortNumber)
+                .dmaapTopicName(dmaapTopicName)
+                .dmaapProtocol(dmaapProtocol)
+                .dmaapUserName(dmaapUserName)
+                .dmaapUserPassword(dmaapUserPassword)
+                .dmaapContentType(dmaapContentType)
+                .keyFile(keyFile)
+                .trustStore(trustStore)
+                .trustStorePassword(trustStorePass)
+                .keyStore(keyStore)
+                .keyStorePassword(keyStorePass)
+                .enableDmaapCertAuth(enableDmaapCertAuth)
+                .build();
 
         // Then
-        Assertions.assertNotNull(configuration);
-        Assertions.assertEquals(dmaapHostName, configuration.dmaapHostName());
-        Assertions.assertEquals(dmaapPortNumber, configuration.dmaapPortNumber());
-        Assertions.assertEquals(dmaapTopicName, configuration.dmaapTopicName());
-        Assertions.assertEquals(dmaapProtocol, configuration.dmaapProtocol());
-        Assertions.assertEquals(dmaapUserName, configuration.dmaapUserName());
-        Assertions.assertEquals(dmaapUserPassword, configuration.dmaapUserPassword());
+        assertEquals("DmaapPublisherConfiguration{dmaapHostName=localhost, dmaapPortNumber=2222, "
+                + "dmaapTopicName=temp, dmaapProtocol=http, dmaapUserName=admin, dmaapUserPassword=admin, "
+                + "dmaapContentType=application/json, keyFile=keyFile, trustStore=trustStore, "
+                + "trustStorePassword=trustPass, keyStore=keyStore, keyStorePassword=keyPass, "
+                + "enableDmaapCertAuth=true}", configuration.toString());
     }
 }