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.ContentType;
31 import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.model.MessageRouterPublishRequest;
32 import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.model.MessageRouterSubscribeRequest;
33 import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.model.config.MessageRouterPublisherConfig;
34 import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.model.config.MessageRouterSubscriberConfig;
35 import org.onap.dcaegen2.services.sdk.security.ssl.SecurityKeys;
37 import java.net.URISyntaxException;
38 import java.nio.file.Files;
39 import java.nio.file.Paths;
40 import java.time.Duration;
42 import static java.lang.ClassLoader.getSystemResource;
43 import static org.assertj.core.api.Assertions.assertThat;
44 import static org.junit.jupiter.api.Assumptions.assumeFalse;
47 class ConsulConfigurationParserTest {
49 private final String correctJson =
50 new String(Files.readAllBytes(Paths.get(getSystemResource("configurationFromCbs.json").toURI())));
51 private final ImmutableAaiClientConfiguration correctAaiClientConfig =
52 TestAppConfiguration.createDefaultAaiClientConfiguration();
54 private final JsonObject correctConfig = new Gson().fromJson(correctJson, JsonObject.class);
55 private final CbsContentParser consulConfigurationParser = new CbsContentParser(correctConfig);
57 ConsulConfigurationParserTest() throws Exception {
61 void shouldCreateAaiConfigurationCorrectly() {
63 AaiClientConfiguration aaiClientConfig = consulConfigurationParser.getAaiClientConfig();
66 assertThat(aaiClientConfig).isNotNull();
67 assertThat(aaiClientConfig).isEqualToComparingFieldByField(correctAaiClientConfig);
71 void shouldCreateMessageRouterSubscribeRequestCorrectly() {
73 MessageRouterSubscribeRequest messageRouterSubscribeRequest = consulConfigurationParser.getMessageRouterSubscribeRequest();
76 assertThat(messageRouterSubscribeRequest.sourceDefinition().topicUrl()).isEqualTo("http://dmaap-mr:2222/events/unauthenticated.VES_PNFREG_OUTPUT");
77 assertThat(messageRouterSubscribeRequest.consumerGroup()).isEqualTo("OpenDCAE-c12");
78 assertThat(messageRouterSubscribeRequest.consumerId()).isEqualTo("c12");
79 assertThat(messageRouterSubscribeRequest.timeout()).isEqualTo(Duration.ofMillis(-1));
83 void shouldCreateMessageRouterPublishConfigurationCorrectly() {
85 MessageRouterPublishRequest messageRouterPublishRequest = consulConfigurationParser.getMessageRouterPublishRequest();
88 assertThat(messageRouterPublishRequest.contentType()).isEqualTo(ContentType.APPLICATION_JSON);
89 assertThat(messageRouterPublishRequest.sinkDefinition().topicUrl()).isEqualTo("http://dmaap-mr:2222/events/unauthenticated.PNF_READY");
93 void shouldCreateMessageRouterUpdatePublishConfigurationCorrectly() {
95 MessageRouterPublishRequest messageRouterPublishRequest = consulConfigurationParser.getMessageRouterUpdatePublishRequest();
98 assertThat(messageRouterPublishRequest.contentType()).isEqualTo(ContentType.APPLICATION_JSON);
99 assertThat(messageRouterPublishRequest.sinkDefinition().topicUrl()).isEqualTo("http://dmaap-mr:2222/events/unauthenticated.PNF_UPDATE");
103 void whenDmaapCertAuthIsDisabled_MessageRouterPublisherConfigSecurityKeysShouldBeIgnored() {
104 assumeFalse(correctConfig.getAsJsonObject("config").get("security.enableDmaapCertAuth").getAsBoolean());
106 MessageRouterPublisherConfig messageRouterPublisherConfig = consulConfigurationParser.getMessageRouterPublisherConfig();
108 assertThat(messageRouterPublisherConfig.securityKeys()).isNull();
112 void whenDmaapCertAuthIsDisabled_MessageRouterSubscriberConfigSecurityKeysShouldBeIgnored() {
113 assumeFalse(correctConfig.getAsJsonObject("config").get("security.enableDmaapCertAuth").getAsBoolean());
115 MessageRouterSubscriberConfig messageRouterSubscriberConfig = consulConfigurationParser.getMessageRouterSubscriberConfig();
117 assertThat(messageRouterSubscriberConfig.securityKeys()).isNull();
122 void whenDmaapCertAuthIsEnabled_MessageRouterPublisherConfigSecurityKeysShouldBeLoaded() {
123 CbsContentParser consulConfigurationParser = new CbsContentParser(getConfigWithSslEnabled(correctJson));
125 MessageRouterPublisherConfig messageRouterPublisherConfig = consulConfigurationParser.getMessageRouterPublisherConfig();
127 verifySecurityKeys(messageRouterPublisherConfig.securityKeys());
132 void whenDmaapCertAuthIsEnabled_MessageRouterSubscriberConfigSecurityKeysShouldBeLoaded() {
133 CbsContentParser consulConfigurationParser = new CbsContentParser(getConfigWithSslEnabled(correctJson));
135 MessageRouterSubscriberConfig messageRouterSubscriberConfig = consulConfigurationParser.getMessageRouterSubscriberConfig();
137 verifySecurityKeys(messageRouterSubscriberConfig.securityKeys());
140 private static void verifySecurityKeys(@Nullable SecurityKeys securityKeys) {
141 assertThat(securityKeys).isNotNull();
142 assertThat(securityKeys.trustStore().path().endsWith("org.onap.dcae.trust.jks")).isTrue();
143 assertThat(securityKeys.keyStore().path().endsWith("org.onap.dcae.jks")).isTrue();
144 securityKeys.trustStorePassword().use(chars -> assertThat(new String(chars)).isEqualTo("*TQH?Lnszprs4LmlAj38yds("));
145 securityKeys.keyStorePassword().use(chars -> assertThat(new String(chars)).isEqualTo("mYHC98!qX}7h?W}jRv}MIXTJ"));
148 private static JsonObject getConfigWithSslEnabled(String configJsonString) {
149 JsonObject configJson = new Gson().fromJson(configJsonString, JsonObject.class);
150 JsonObject config = configJson.getAsJsonObject("config");
151 config.addProperty("security.enableDmaapCertAuth", true);
152 config.addProperty("security.enableAaiCertAuth", true);
153 config.addProperty("security.trustStorePath", testResourceToPath("/org.onap.dcae.trust.jks"));
154 config.addProperty("security.trustStorePasswordPath", testResourceToPath("/truststore.password"));
155 config.addProperty("security.keyStorePath", testResourceToPath("/org.onap.dcae.jks"));
156 config.addProperty("security.keyStorePasswordPath", testResourceToPath("/keystore.password"));
161 private static String testResourceToPath(String resource) {
163 return Paths.get(ConsulConfigurationParserTest.class.getResource(resource).toURI()).toString();
164 } catch (URISyntaxException e) {
165 throw new RuntimeException("Failed resolving test resource path", e);