2 * ============LICENSE_START=======================================================
3 * PNF-REGISTRATION-HANDLER
4 * ================================================================================
5 * Copyright (C) 2018 NOKIA Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
21 package org.onap.dcaegen2.services.prh.configuration;
23 import com.google.gson.Gson;
24 import com.google.gson.JsonObject;
25 import org.jetbrains.annotations.Nullable;
26 import org.junit.jupiter.api.Test;
27 import org.onap.dcaegen2.services.prh.TestAppConfiguration;
28 import org.onap.dcaegen2.services.sdk.rest.services.aai.client.config.AaiClientConfiguration;
29 import org.onap.dcaegen2.services.sdk.rest.services.aai.client.config.ImmutableAaiClientConfiguration;
30 import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.model.MessageRouterPublishRequest;
31 import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.model.MessageRouterSubscribeRequest;
32 import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.model.config.MessageRouterPublisherConfig;
33 import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.model.config.MessageRouterSubscriberConfig;
34 import org.onap.dcaegen2.services.sdk.security.ssl.SecurityKeys;
36 import java.net.URISyntaxException;
37 import java.nio.file.Files;
38 import java.nio.file.Paths;
39 import java.time.Duration;
41 import static java.lang.ClassLoader.getSystemResource;
42 import static org.assertj.core.api.Assertions.assertThat;
43 import static org.junit.jupiter.api.Assumptions.assumeFalse;
46 class ConsulConfigurationParserTest {
48 private final String correctJson =
49 new String(Files.readAllBytes(Paths.get(getSystemResource("flattened_configuration.json").toURI())));
50 private final ImmutableAaiClientConfiguration correctAaiClientConfig =
51 TestAppConfiguration.createDefaultAaiClientConfiguration();
53 private final JsonObject correctConfig = new Gson().fromJson(correctJson, JsonObject.class);
54 private final CbsContentParser consulConfigurationParser = new CbsContentParser(correctConfig);
56 ConsulConfigurationParserTest() throws Exception {
60 void shouldCreateAaiConfigurationCorrectly() {
62 AaiClientConfiguration aaiClientConfig = consulConfigurationParser.getAaiClientConfig();
65 assertThat(aaiClientConfig).isNotNull();
66 assertThat(aaiClientConfig).isEqualToComparingFieldByField(correctAaiClientConfig);
70 void shouldCreateMessageRouterSubscribeRequestCorrectly() {
72 MessageRouterSubscribeRequest messageRouterSubscribeRequest = consulConfigurationParser.getMessageRouterSubscribeRequest();
75 assertThat(messageRouterSubscribeRequest.sourceDefinition().topicUrl()).isEqualTo("http://dmaap-mr:2222/events/unauthenticated.VES_PNFREG_OUTPUT");
76 assertThat(messageRouterSubscribeRequest.consumerGroup()).isEqualTo("OpenDCAE-c12");
77 assertThat(messageRouterSubscribeRequest.consumerId()).isEqualTo("c12");
78 assertThat(messageRouterSubscribeRequest.timeout()).isEqualTo(Duration.ofMillis(-1));
82 void shouldCreateMessageRouterPublishConfigurationCorrectly() {
84 MessageRouterPublishRequest messageRouterPublishRequest = consulConfigurationParser.getMessageRouterPublishRequest();
87 assertThat(messageRouterPublishRequest.contentType()).isEqualTo("application/json");
88 assertThat(messageRouterPublishRequest.sinkDefinition().topicUrl()).isEqualTo("http://dmaap-mr:2222/events/unauthenticated.PNF_READY");
92 void whenDmaapCertAuthIsDisabled_MessageRouterPublisherConfigSecurityKeysShouldBeIgnored() {
93 assumeFalse(correctConfig.getAsJsonObject("config").get("security.enableDmaapCertAuth").getAsBoolean());
95 MessageRouterPublisherConfig messageRouterPublisherConfig = consulConfigurationParser.getMessageRouterPublisherConfig();
97 assertThat(messageRouterPublisherConfig.securityKeys()).isNull();
101 void whenDmaapCertAuthIsDisabled_MessageRouterSubscriberConfigSecurityKeysShouldBeIgnored() {
102 assumeFalse(correctConfig.getAsJsonObject("config").get("security.enableDmaapCertAuth").getAsBoolean());
104 MessageRouterSubscriberConfig messageRouterSubscriberConfig = consulConfigurationParser.getMessageRouterSubscriberConfig();
106 assertThat(messageRouterSubscriberConfig.securityKeys()).isNull();
111 void whenDmaapCertAuthIsEnabled_MessageRouterPublisherConfigSecurityKeysShouldBeLoaded() {
112 CbsContentParser consulConfigurationParser = new CbsContentParser(getConfigWithSslEnabled(correctJson));
114 MessageRouterPublisherConfig messageRouterPublisherConfig = consulConfigurationParser.getMessageRouterPublisherConfig();
116 verifySecurityKeys(messageRouterPublisherConfig.securityKeys());
121 void whenDmaapCertAuthIsEnabled_MessageRouterSubscriberConfigSecurityKeysShouldBeLoaded() {
122 CbsContentParser consulConfigurationParser = new CbsContentParser(getConfigWithSslEnabled(correctJson));
124 MessageRouterSubscriberConfig messageRouterSubscriberConfig = consulConfigurationParser.getMessageRouterSubscriberConfig();
126 verifySecurityKeys(messageRouterSubscriberConfig.securityKeys());
129 private static void verifySecurityKeys(@Nullable SecurityKeys securityKeys) {
130 assertThat(securityKeys).isNotNull();
131 assertThat(securityKeys.trustStore().path().endsWith("org.onap.dcae.trust.jks")).isTrue();
132 assertThat(securityKeys.keyStore().path().endsWith("org.onap.dcae.jks")).isTrue();
133 securityKeys.trustStorePassword().use(chars -> assertThat(new String(chars)).isEqualTo("*TQH?Lnszprs4LmlAj38yds("));
134 securityKeys.keyStorePassword().use(chars -> assertThat(new String(chars)).isEqualTo("mYHC98!qX}7h?W}jRv}MIXTJ"));
137 private static JsonObject getConfigWithSslEnabled(String configJsonString) {
138 JsonObject configJson = new Gson().fromJson(configJsonString, JsonObject.class);
139 JsonObject config = configJson.getAsJsonObject("config");
140 config.addProperty("security.enableDmaapCertAuth", true);
141 config.addProperty("security.enableAaiCertAuth", true);
142 config.addProperty("security.trustStorePath", testResourceToPath("/org.onap.dcae.trust.jks"));
143 config.addProperty("security.trustStorePasswordPath", testResourceToPath("/truststore.password"));
144 config.addProperty("security.keyStorePath", testResourceToPath("/org.onap.dcae.jks"));
145 config.addProperty("security.keyStorePasswordPath", testResourceToPath("/keystore.password"));
150 private static String testResourceToPath(String resource) {
152 return Paths.get(ConsulConfigurationParserTest.class.getResource(resource).toURI()).toString();
153 } catch (URISyntaxException e) {
154 throw new RuntimeException("Failed resolving test resource path", e);