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 static java.lang.ClassLoader.getSystemResource;
24 import static org.assertj.core.api.Assertions.assertThat;
25 import static org.junit.jupiter.api.Assumptions.assumeFalse;
27 import com.google.gson.Gson;
28 import com.google.gson.JsonObject;
29 import java.net.URISyntaxException;
30 import java.nio.file.Files;
31 import java.nio.file.Paths;
32 import java.time.Duration;
33 import org.jetbrains.annotations.Nullable;
34 import org.junit.jupiter.api.Test;
35 import org.onap.dcaegen2.services.prh.TestAppConfiguration;
36 import org.onap.dcaegen2.services.prh.adapter.aai.api.AaiClientConfiguration;
37 import org.onap.dcaegen2.services.prh.adapter.aai.api.ImmutableAaiClientConfiguration;
38 import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.ContentType;
39 import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.model.MessageRouterPublishRequest;
40 import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.model.MessageRouterSubscribeRequest;
41 import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.model.config.MessageRouterPublisherConfig;
42 import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.model.config.MessageRouterSubscriberConfig;
43 import org.onap.dcaegen2.services.sdk.security.ssl.SecurityKeys;
46 class ConsulConfigurationParserTest {
48 private final String correctJson =
49 new String(Files.readAllBytes(Paths.get(getSystemResource("configurationFromCbs.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
73 .getMessageRouterSubscribeRequest();
76 assertThat(messageRouterSubscribeRequest.sourceDefinition().topicUrl())
77 .isEqualTo("http://dmaap-mr:2222/events/unauthenticated.VES_PNFREG_OUTPUT");
78 assertThat(messageRouterSubscribeRequest.consumerGroup()).isEqualTo("OpenDCAE-c12");
79 assertThat(messageRouterSubscribeRequest.consumerId()).isEqualTo("c12");
80 assertThat(messageRouterSubscribeRequest.timeout()).isEqualTo(Duration.ofMillis(-1));
84 void shouldCreateMessageRouterPublishConfigurationCorrectly() {
86 MessageRouterPublishRequest messageRouterPublishRequest = consulConfigurationParser
87 .getMessageRouterPublishRequest();
90 assertThat(messageRouterPublishRequest.contentType()).isEqualTo(ContentType.APPLICATION_JSON);
91 assertThat(messageRouterPublishRequest.sinkDefinition().topicUrl())
92 .isEqualTo("http://dmaap-mr:2222/events/unauthenticated.PNF_READY");
96 void shouldCreateMessageRouterUpdatePublishConfigurationCorrectly() {
98 MessageRouterPublishRequest messageRouterPublishRequest = consulConfigurationParser
99 .getMessageRouterUpdatePublishRequest();
102 assertThat(messageRouterPublishRequest.contentType()).isEqualTo(ContentType.APPLICATION_JSON);
103 assertThat(messageRouterPublishRequest.sinkDefinition().topicUrl())
104 .isEqualTo("http://dmaap-mr:2222/events/unauthenticated.PNF_UPDATE");
108 void whenDmaapCertAuthIsDisabled_MessageRouterPublisherConfigSecurityKeysShouldBeIgnored() {
109 assumeFalse(correctConfig.getAsJsonObject("config").get("security.enableDmaapCertAuth").getAsBoolean());
111 MessageRouterPublisherConfig messageRouterPublisherConfig = consulConfigurationParser
112 .getMessageRouterPublisherConfig();
114 assertThat(messageRouterPublisherConfig.securityKeys()).isNull();
118 void whenDmaapCertAuthIsDisabled_MessageRouterSubscriberConfigSecurityKeysShouldBeIgnored() {
119 assumeFalse(correctConfig.getAsJsonObject("config").get("security.enableDmaapCertAuth").getAsBoolean());
121 MessageRouterSubscriberConfig messageRouterSubscriberConfig = consulConfigurationParser
122 .getMessageRouterSubscriberConfig();
124 assertThat(messageRouterSubscriberConfig.securityKeys()).isNull();
129 void whenDmaapCertAuthIsEnabled_MessageRouterPublisherConfigSecurityKeysShouldBeLoaded() {
130 CbsContentParser consulConfigurationParser = new CbsContentParser(getConfigWithSslEnabled(correctJson));
132 MessageRouterPublisherConfig messageRouterPublisherConfig = consulConfigurationParser
133 .getMessageRouterPublisherConfig();
135 verifySecurityKeys(messageRouterPublisherConfig.securityKeys());
140 void whenDmaapCertAuthIsEnabled_MessageRouterSubscriberConfigSecurityKeysShouldBeLoaded() {
141 CbsContentParser consulConfigurationParser = new CbsContentParser(getConfigWithSslEnabled(correctJson));
143 MessageRouterSubscriberConfig messageRouterSubscriberConfig = consulConfigurationParser
144 .getMessageRouterSubscriberConfig();
146 verifySecurityKeys(messageRouterSubscriberConfig.securityKeys());
149 private static void verifySecurityKeys(@Nullable SecurityKeys securityKeys) {
150 assertThat(securityKeys).isNotNull();
151 assertThat(securityKeys.trustStore().path().endsWith("org.onap.dcae.trust.jks")).isTrue();
152 assertThat(securityKeys.keyStore().path().endsWith("org.onap.dcae.jks")).isTrue();
153 securityKeys.trustStorePassword()
154 .use(chars -> assertThat(new String(chars)).isEqualTo("*TQH?Lnszprs4LmlAj38yds("));
155 securityKeys.keyStorePassword()
156 .use(chars -> assertThat(new String(chars)).isEqualTo("mYHC98!qX}7h?W}jRv}MIXTJ"));
159 private static JsonObject getConfigWithSslEnabled(String configJsonString) {
160 JsonObject configJson = new Gson().fromJson(configJsonString, JsonObject.class);
161 JsonObject config = configJson.getAsJsonObject("config");
162 config.addProperty("security.enableDmaapCertAuth", true);
163 config.addProperty("security.enableAaiCertAuth", true);
164 config.addProperty("security.trustStorePath", testResourceToPath("/org.onap.dcae.trust.jks"));
165 config.addProperty("security.trustStorePasswordPath", testResourceToPath("/truststore.password"));
166 config.addProperty("security.keyStorePath", testResourceToPath("/org.onap.dcae.jks"));
167 config.addProperty("security.keyStorePasswordPath", testResourceToPath("/keystore.password"));
172 private static String testResourceToPath(String resource) {
174 return Paths.get(ConsulConfigurationParserTest.class.getResource(resource).toURI()).toString();
175 } catch (URISyntaxException e) {
176 throw new RuntimeException("Failed resolving test resource path", e);