24586a08d6860ccef97d2deeeb32cf889d53a536
[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.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;
35
36 import java.net.URISyntaxException;
37 import java.nio.file.Files;
38 import java.nio.file.Paths;
39 import java.time.Duration;
40
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;
44
45
46 class ConsulConfigurationParserTest {
47
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();
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.getMessageRouterSubscribeRequest();
73
74         // then
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));
79     }
80
81     @Test
82     void shouldCreateMessageRouterPublishConfigurationCorrectly() {
83         // when
84         MessageRouterPublishRequest messageRouterPublishRequest = consulConfigurationParser.getMessageRouterPublishRequest();
85
86         // then
87         assertThat(messageRouterPublishRequest.contentType()).isEqualTo("application/json");
88         assertThat(messageRouterPublishRequest.sinkDefinition().topicUrl()).isEqualTo("http://dmaap-mr:2222/events/unauthenticated.PNF_READY");
89     }
90
91     @Test
92     void whenDmaapCertAuthIsDisabled_MessageRouterPublisherConfigSecurityKeysShouldBeIgnored() {
93         assumeFalse(correctConfig.getAsJsonObject("config").get("security.enableDmaapCertAuth").getAsBoolean());
94
95         MessageRouterPublisherConfig messageRouterPublisherConfig = consulConfigurationParser.getMessageRouterPublisherConfig();
96
97         assertThat(messageRouterPublisherConfig.securityKeys()).isNull();
98     }
99
100     @Test
101     void whenDmaapCertAuthIsDisabled_MessageRouterSubscriberConfigSecurityKeysShouldBeIgnored() {
102         assumeFalse(correctConfig.getAsJsonObject("config").get("security.enableDmaapCertAuth").getAsBoolean());
103
104         MessageRouterSubscriberConfig messageRouterSubscriberConfig = consulConfigurationParser.getMessageRouterSubscriberConfig();
105
106         assertThat(messageRouterSubscriberConfig.securityKeys()).isNull();
107     }
108
109
110     @Test
111     void whenDmaapCertAuthIsEnabled_MessageRouterPublisherConfigSecurityKeysShouldBeLoaded() {
112         CbsContentParser consulConfigurationParser = new CbsContentParser(getConfigWithSslEnabled(correctJson));
113
114         MessageRouterPublisherConfig messageRouterPublisherConfig = consulConfigurationParser.getMessageRouterPublisherConfig();
115
116         verifySecurityKeys(messageRouterPublisherConfig.securityKeys());
117     }
118
119
120     @Test
121     void whenDmaapCertAuthIsEnabled_MessageRouterSubscriberConfigSecurityKeysShouldBeLoaded() {
122         CbsContentParser consulConfigurationParser = new CbsContentParser(getConfigWithSslEnabled(correctJson));
123
124         MessageRouterSubscriberConfig messageRouterSubscriberConfig = consulConfigurationParser.getMessageRouterSubscriberConfig();
125
126         verifySecurityKeys(messageRouterSubscriberConfig.securityKeys());
127     }
128
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"));
135     }
136
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"));
146         return configJson;
147     }
148
149
150     private static String testResourceToPath(String resource) {
151         try {
152             return Paths.get(ConsulConfigurationParserTest.class.getResource(resource).toURI()).toString();
153         } catch (URISyntaxException e) {
154             throw new RuntimeException("Failed resolving test resource path", e);
155         }
156     }
157
158 }