89717a58f50b2ab2f2ba64a0dd2f6a9e02d9a3bc
[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 static java.lang.ClassLoader.getSystemResource;
24 import static org.assertj.core.api.Assertions.assertThat;
25 import static org.junit.jupiter.api.Assumptions.assumeFalse;
26
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;
44
45
46 class ConsulConfigurationParserTest {
47
48     private final String correctJson =
49         new String(Files.readAllBytes(Paths.get(getSystemResource("configurationFromCbs.json").toURI())));
50     private final ImmutableAaiClientConfiguration correctAaiClientConfig =
51         TestAppConfiguration.createDefaultAaiClientConfiguration();
52
53     private final JsonObject correctConfig = new Gson().fromJson(correctJson, JsonObject.class);
54     private final CbsContentParser consulConfigurationParser = new CbsContentParser(correctConfig);
55
56     ConsulConfigurationParserTest() throws Exception {
57     }
58
59     @Test
60     void shouldCreateAaiConfigurationCorrectly() {
61         // when
62         AaiClientConfiguration aaiClientConfig = consulConfigurationParser.getAaiClientConfig();
63
64         // then
65         assertThat(aaiClientConfig).isNotNull();
66         assertThat(aaiClientConfig).isEqualToComparingFieldByField(correctAaiClientConfig);
67     }
68
69     @Test
70     void shouldCreateMessageRouterSubscribeRequestCorrectly() {
71         // given
72         MessageRouterSubscribeRequest messageRouterSubscribeRequest = consulConfigurationParser
73             .getMessageRouterSubscribeRequest();
74
75         // then
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));
81     }
82
83     @Test
84     void shouldCreateMessageRouterPublishConfigurationCorrectly() {
85         // when
86         MessageRouterPublishRequest messageRouterPublishRequest = consulConfigurationParser
87             .getMessageRouterPublishRequest();
88
89         // then
90         assertThat(messageRouterPublishRequest.contentType()).isEqualTo(ContentType.APPLICATION_JSON);
91         assertThat(messageRouterPublishRequest.sinkDefinition().topicUrl())
92             .isEqualTo("http://dmaap-mr:2222/events/unauthenticated.PNF_READY");
93     }
94
95     @Test
96     void shouldCreateMessageRouterUpdatePublishConfigurationCorrectly() {
97         // when
98         MessageRouterPublishRequest messageRouterPublishRequest = consulConfigurationParser
99             .getMessageRouterUpdatePublishRequest();
100
101         // then
102         assertThat(messageRouterPublishRequest.contentType()).isEqualTo(ContentType.APPLICATION_JSON);
103         assertThat(messageRouterPublishRequest.sinkDefinition().topicUrl())
104             .isEqualTo("http://dmaap-mr:2222/events/unauthenticated.PNF_UPDATE");
105     }
106
107     @Test
108     void whenDmaapCertAuthIsDisabled_MessageRouterPublisherConfigSecurityKeysShouldBeIgnored() {
109         assumeFalse(correctConfig.getAsJsonObject("config").get("security.enableDmaapCertAuth").getAsBoolean());
110
111         MessageRouterPublisherConfig messageRouterPublisherConfig = consulConfigurationParser
112             .getMessageRouterPublisherConfig();
113
114         assertThat(messageRouterPublisherConfig.securityKeys()).isNull();
115     }
116
117     @Test
118     void whenDmaapCertAuthIsDisabled_MessageRouterSubscriberConfigSecurityKeysShouldBeIgnored() {
119         assumeFalse(correctConfig.getAsJsonObject("config").get("security.enableDmaapCertAuth").getAsBoolean());
120
121         MessageRouterSubscriberConfig messageRouterSubscriberConfig = consulConfigurationParser
122             .getMessageRouterSubscriberConfig();
123
124         assertThat(messageRouterSubscriberConfig.securityKeys()).isNull();
125     }
126
127
128     @Test
129     void whenDmaapCertAuthIsEnabled_MessageRouterPublisherConfigSecurityKeysShouldBeLoaded() {
130         CbsContentParser consulConfigurationParser = new CbsContentParser(getConfigWithSslEnabled(correctJson));
131
132         MessageRouterPublisherConfig messageRouterPublisherConfig = consulConfigurationParser
133             .getMessageRouterPublisherConfig();
134
135         verifySecurityKeys(messageRouterPublisherConfig.securityKeys());
136     }
137
138
139     @Test
140     void whenDmaapCertAuthIsEnabled_MessageRouterSubscriberConfigSecurityKeysShouldBeLoaded() {
141         CbsContentParser consulConfigurationParser = new CbsContentParser(getConfigWithSslEnabled(correctJson));
142
143         MessageRouterSubscriberConfig messageRouterSubscriberConfig = consulConfigurationParser
144             .getMessageRouterSubscriberConfig();
145
146         verifySecurityKeys(messageRouterSubscriberConfig.securityKeys());
147     }
148
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"));
157     }
158
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"));
168         return configJson;
169     }
170
171
172     private static String testResourceToPath(String resource) {
173         try {
174             return Paths.get(ConsulConfigurationParserTest.class.getResource(resource).toURI()).toString();
175         } catch (URISyntaxException e) {
176             throw new RuntimeException("Failed resolving test resource path", e);
177         }
178     }
179
180 }