96594ae4b561f35a56aa9ec43326c03182d758ca
[dcaegen2/services/prh.git] /
1 /*
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
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
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=========================================================
19  */
20
21 package org.onap.dcaegen2.services.prh.configuration;
22
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.api.AaiClientConfiguration;
29 import org.onap.dcaegen2.services.sdk.rest.services.aai.client.api.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;
36
37 import java.net.URISyntaxException;
38 import java.nio.file.Files;
39 import java.nio.file.Paths;
40 import java.time.Duration;
41
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;
45
46
47 class ConsulConfigurationParserTest {
48
49     private final String correctJson =
50             new String(Files.readAllBytes(Paths.get(getSystemResource("configurationFromCbs.json").toURI())));
51     private final ImmutableAaiClientConfiguration correctAaiClientConfig =
52             TestAppConfiguration.createDefaultAaiClientConfiguration();
53
54     private final JsonObject correctConfig = new Gson().fromJson(correctJson, JsonObject.class);
55     private final CbsContentParser consulConfigurationParser = new CbsContentParser(correctConfig);
56
57     ConsulConfigurationParserTest() throws Exception {
58     }
59
60     @Test
61     void shouldCreateAaiConfigurationCorrectly() {
62         // when
63         AaiClientConfiguration aaiClientConfig = consulConfigurationParser.getAaiClientConfig();
64
65         // then
66         assertThat(aaiClientConfig).isNotNull();
67         assertThat(aaiClientConfig).isEqualToComparingFieldByField(correctAaiClientConfig);
68     }
69
70     @Test
71     void shouldCreateMessageRouterSubscribeRequestCorrectly() {
72         // given
73         MessageRouterSubscribeRequest messageRouterSubscribeRequest = consulConfigurationParser.getMessageRouterSubscribeRequest();
74
75         // then
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));
80     }
81
82     @Test
83     void shouldCreateMessageRouterPublishConfigurationCorrectly() {
84         // when
85         MessageRouterPublishRequest messageRouterPublishRequest = consulConfigurationParser.getMessageRouterPublishRequest();
86
87         // then
88         assertThat(messageRouterPublishRequest.contentType()).isEqualTo(ContentType.APPLICATION_JSON);
89         assertThat(messageRouterPublishRequest.sinkDefinition().topicUrl()).isEqualTo("http://dmaap-mr:2222/events/unauthenticated.PNF_READY");
90     }
91
92     @Test
93     void shouldCreateMessageRouterUpdatePublishConfigurationCorrectly() {
94         // when
95         MessageRouterPublishRequest messageRouterPublishRequest = consulConfigurationParser.getMessageRouterUpdatePublishRequest();
96
97         // then
98         assertThat(messageRouterPublishRequest.contentType()).isEqualTo(ContentType.APPLICATION_JSON);
99         assertThat(messageRouterPublishRequest.sinkDefinition().topicUrl()).isEqualTo("http://dmaap-mr:2222/events/unauthenticated.PNF_UPDATE");
100     }
101
102     @Test
103     void whenDmaapCertAuthIsDisabled_MessageRouterPublisherConfigSecurityKeysShouldBeIgnored() {
104         assumeFalse(correctConfig.getAsJsonObject("config").get("security.enableDmaapCertAuth").getAsBoolean());
105
106         MessageRouterPublisherConfig messageRouterPublisherConfig = consulConfigurationParser.getMessageRouterPublisherConfig();
107
108         assertThat(messageRouterPublisherConfig.securityKeys()).isNull();
109     }
110
111     @Test
112     void whenDmaapCertAuthIsDisabled_MessageRouterSubscriberConfigSecurityKeysShouldBeIgnored() {
113         assumeFalse(correctConfig.getAsJsonObject("config").get("security.enableDmaapCertAuth").getAsBoolean());
114
115         MessageRouterSubscriberConfig messageRouterSubscriberConfig = consulConfigurationParser.getMessageRouterSubscriberConfig();
116
117         assertThat(messageRouterSubscriberConfig.securityKeys()).isNull();
118     }
119
120
121     @Test
122     void whenDmaapCertAuthIsEnabled_MessageRouterPublisherConfigSecurityKeysShouldBeLoaded() {
123         CbsContentParser consulConfigurationParser = new CbsContentParser(getConfigWithSslEnabled(correctJson));
124
125         MessageRouterPublisherConfig messageRouterPublisherConfig = consulConfigurationParser.getMessageRouterPublisherConfig();
126
127         verifySecurityKeys(messageRouterPublisherConfig.securityKeys());
128     }
129
130
131     @Test
132     void whenDmaapCertAuthIsEnabled_MessageRouterSubscriberConfigSecurityKeysShouldBeLoaded() {
133         CbsContentParser consulConfigurationParser = new CbsContentParser(getConfigWithSslEnabled(correctJson));
134
135         MessageRouterSubscriberConfig messageRouterSubscriberConfig = consulConfigurationParser.getMessageRouterSubscriberConfig();
136
137         verifySecurityKeys(messageRouterSubscriberConfig.securityKeys());
138     }
139
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"));
146     }
147
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"));
157         return configJson;
158     }
159
160
161     private static String testResourceToPath(String resource) {
162         try {
163             return Paths.get(ConsulConfigurationParserTest.class.getResource(resource).toURI()).toString();
164         } catch (URISyntaxException e) {
165             throw new RuntimeException("Failed resolving test resource path", e);
166         }
167     }
168
169 }