2 * ============LICENSE_START=======================================================
3 * BBS-RELOCATION-CPE-AUTHENTICATION-HANDLER
4 * ================================================================================
5 * Copyright (C) 2019 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.bbs.event.processor.config;
23 import static org.junit.jupiter.api.Assertions.assertAll;
24 import static org.junit.jupiter.api.Assertions.assertEquals;
25 import static org.junit.jupiter.api.Assertions.assertFalse;
26 import static org.junit.jupiter.api.Assertions.assertTrue;
28 import java.util.Collections;
29 import java.util.HashMap;
32 import org.junit.FixMethodOrder;
33 import org.junit.jupiter.api.DisplayName;
34 import org.junit.jupiter.api.Test;
35 import org.junit.runners.MethodSorters;
36 import org.onap.bbs.event.processor.model.GeneratedAppConfigObject;
37 import org.onap.bbs.event.processor.model.ImmutableDmaapInfo;
38 import org.onap.bbs.event.processor.model.ImmutableGeneratedAppConfigObject;
39 import org.onap.bbs.event.processor.model.ImmutableStreamsObject;
40 import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.config.DmaapConsumerConfiguration;
41 import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.config.DmaapPublisherConfiguration;
42 import org.springframework.beans.factory.annotation.Autowired;
43 import org.springframework.boot.context.properties.EnableConfigurationProperties;
44 import org.springframework.boot.test.context.SpringBootTest;
45 import org.springframework.test.context.TestPropertySource;
47 @SpringBootTest(classes = {
48 AaiClientProperties.class,
49 DmaapReRegistrationConsumerProperties.class,
50 DmaapCpeAuthenticationConsumerProperties.class,
51 DmaapProducerProperties.class,
52 SecurityProperties.class,
53 GenericProperties.class})
54 @EnableConfigurationProperties
55 @TestPropertySource(properties = {
56 "configs.aai.client.aaiHost=test localhost",
57 "configs.aai.client.aaiPort=1234",
58 "configs.aai.client.aaiProtocol=https",
59 "configs.aai.client.aaiUserName=AAI",
60 "configs.aai.client.aaiUserPassword=AAI",
61 "configs.aai.client.aaiIgnoreSslCertificateErrors=true",
62 "configs.aai.client.aaiHeaders.X-FromAppId=bbs",
63 "configs.aai.client.aaiHeaders.X-TransactionId=9999",
64 "configs.aai.client.aaiHeaders.Accept=application/json",
65 "configs.aai.client.aaiHeaders.Real-Time=true",
66 "configs.aai.client.aaiHeaders.Content-Type=application/merge-patch+json",
67 "configs.dmaap.consumer.re-registration.dmaapHostName=test localhost",
68 "configs.dmaap.consumer.re-registration.dmaapPortNumber=1234",
69 "configs.dmaap.consumer.re-registration.dmaapTopicName=/events/unauthenticated.PNF_REREGISTRATION",
70 "configs.dmaap.consumer.re-registration.dmaapProtocol=http",
71 "configs.dmaap.consumer.re-registration.dmaapContentType=application/json",
72 "configs.dmaap.consumer.re-registration.consumerId=c12",
73 "configs.dmaap.consumer.re-registration.consumerGroup=OpenDcae-c12",
74 "configs.dmaap.consumer.re-registration.timeoutMs=-1",
75 "configs.dmaap.consumer.re-registration.messageLimit=1",
76 "configs.dmaap.consumer.cpe-authentication.dmaapHostName=test localhost",
77 "configs.dmaap.consumer.cpe-authentication.dmaapPortNumber=1234",
78 "configs.dmaap.consumer.cpe-authentication.dmaapTopicName=/events/unauthenticated.CPE_AUTHENTICATION",
79 "configs.dmaap.consumer.cpe-authentication.dmaapProtocol=http",
80 "configs.dmaap.consumer.cpe-authentication.dmaapContentType=application/json",
81 "configs.dmaap.consumer.cpe-authentication.consumerId=c12",
82 "configs.dmaap.consumer.cpe-authentication.consumerGroup=OpenDcae-c12",
83 "configs.dmaap.consumer.cpe-authentication.timeoutMs=-1",
84 "configs.dmaap.consumer.cpe-authentication.messageLimit=1",
85 "configs.dmaap.producer.dmaapHostName=test localhost",
86 "configs.dmaap.producer.dmaapPortNumber=1234",
87 "configs.dmaap.producer.dmaapTopicName=/events/unauthenticated.DCAE_CL_OUTPUT",
88 "configs.dmaap.producer.dmaapProtocol=http",
89 "configs.dmaap.producer.dmaapContentType=application/json",
90 "configs.security.trustStorePath=test trust store path",
91 "configs.security.trustStorePasswordPath=test trust store password path",
92 "configs.security.keyStorePath=test key store path",
93 "configs.security.keyStorePasswordPath=test key store password path",
94 "configs.security.enableDmaapCertAuth=true",
95 "configs.security.enableAaiCertAuth=true",
96 "configs.application.pipelinesPollingIntervalSec=30",
97 "configs.application.pipelinesTimeoutSec=15",
98 "configs.application.re-registration.policyScope=reRegPolicyScope",
99 "configs.application.re-registration.clControlName=reRegControlName",
100 "configs.application.cpe-authentication.policyScope=cpeAuthPolicyScope",
101 "configs.application.cpe-authentication.clControlName=cpeAuthControlName"})
102 @DisplayName("Application Configuration Unit-Tests")
103 // Ordering tests because we need a first configuration population from @TestPropertySource
104 // and then update of the config parameters based on a new Consul-retrieved Configuration object
105 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
106 class ApplicationConfigurationTest {
108 private ApplicationConfiguration configuration;
111 public ApplicationConfigurationTest(AaiClientProperties aaiClientProperties,
112 DmaapReRegistrationConsumerProperties dmaapReRegistrationConsumerProperties,
113 DmaapCpeAuthenticationConsumerProperties
114 dmaapCpeAuthenticationConsumerProperties,
115 DmaapProducerProperties dmaapProducerProperties,
116 SecurityProperties securityProperties,
117 GenericProperties genericProperties) {
118 this.configuration = new ApplicationConfiguration(aaiClientProperties,
119 dmaapReRegistrationConsumerProperties,
120 dmaapCpeAuthenticationConsumerProperties,
121 dmaapProducerProperties,
127 void testA_configurationObjectSuccessfullyPopulated() {
129 AaiClientConfiguration aaiClientConfiguration = configuration.getAaiClientConfiguration();
130 assertAll("AAI Client Configuration Properties",
131 () -> assertEquals("test localhost", aaiClientConfiguration.aaiHost()),
132 () -> assertEquals(Integer.valueOf(1234), aaiClientConfiguration.aaiPort()),
133 () -> assertEquals("https", aaiClientConfiguration.aaiProtocol()),
134 () -> assertEquals("AAI", aaiClientConfiguration.aaiUserName()),
135 () -> assertEquals("AAI", aaiClientConfiguration.aaiUserPassword()),
136 () -> assertTrue(aaiClientConfiguration.aaiIgnoreSslCertificateErrors()),
137 () -> assertEquals("bbs", aaiClientConfiguration.aaiHeaders().get("X-FromAppId")),
138 () -> assertEquals("9999", aaiClientConfiguration.aaiHeaders().get("X-TransactionId")),
139 () -> assertEquals("application/json", aaiClientConfiguration.aaiHeaders().get("Accept")),
140 () -> assertEquals("true", aaiClientConfiguration.aaiHeaders().get("Real-Time")),
141 () -> assertEquals("application/merge-patch+json",
142 aaiClientConfiguration.aaiHeaders().get("Content-Type"))
145 DmaapConsumerConfiguration dmaapConsumerReRegistrationConfig =
146 configuration.getDmaapReRegistrationConsumerConfiguration();
147 assertAll("DMaaP Consumer Re-Registration Configuration Properties",
148 () -> assertEquals("test localhost", dmaapConsumerReRegistrationConfig.dmaapHostName()),
149 () -> assertEquals(Integer.valueOf(1234), dmaapConsumerReRegistrationConfig.dmaapPortNumber()),
150 () -> assertEquals("/events/unauthenticated.PNF_REREGISTRATION",
151 dmaapConsumerReRegistrationConfig.dmaapTopicName()),
152 () -> assertEquals("http", dmaapConsumerReRegistrationConfig.dmaapProtocol()),
153 () -> assertEquals("", dmaapConsumerReRegistrationConfig.dmaapUserName()),
154 () -> assertEquals("", dmaapConsumerReRegistrationConfig.dmaapUserPassword()),
155 () -> assertEquals("application/json", dmaapConsumerReRegistrationConfig.dmaapContentType()),
156 () -> assertEquals("c12", dmaapConsumerReRegistrationConfig.consumerId()),
157 () -> assertEquals("OpenDcae-c12", dmaapConsumerReRegistrationConfig.consumerGroup()),
158 () -> assertEquals(Integer.valueOf(-1), dmaapConsumerReRegistrationConfig.timeoutMs()),
159 () -> assertEquals(Integer.valueOf(1), dmaapConsumerReRegistrationConfig.messageLimit())
162 DmaapConsumerConfiguration dmaapConsumerCpeAuthenticationConfig =
163 configuration.getDmaapCpeAuthenticationConsumerConfiguration();
164 assertAll("DMaaP Consumer CPE Authentication Configuration Properties",
165 () -> assertEquals("test localhost", dmaapConsumerCpeAuthenticationConfig.dmaapHostName()),
166 () -> assertEquals(Integer.valueOf(1234), dmaapConsumerCpeAuthenticationConfig.dmaapPortNumber()),
167 () -> assertEquals("/events/unauthenticated.CPE_AUTHENTICATION",
168 dmaapConsumerCpeAuthenticationConfig.dmaapTopicName()),
169 () -> assertEquals("http", dmaapConsumerCpeAuthenticationConfig.dmaapProtocol()),
170 () -> assertEquals("", dmaapConsumerCpeAuthenticationConfig.dmaapUserName()),
171 () -> assertEquals("", dmaapConsumerCpeAuthenticationConfig.dmaapUserPassword()),
172 () -> assertEquals("application/json", dmaapConsumerCpeAuthenticationConfig.dmaapContentType()),
173 () -> assertEquals("c12", dmaapConsumerCpeAuthenticationConfig.consumerId()),
174 () -> assertEquals("OpenDcae-c12", dmaapConsumerCpeAuthenticationConfig.consumerGroup()),
175 () -> assertEquals(Integer.valueOf(-1), dmaapConsumerCpeAuthenticationConfig.timeoutMs()),
176 () -> assertEquals(Integer.valueOf(1), dmaapConsumerCpeAuthenticationConfig.messageLimit())
179 DmaapPublisherConfiguration dmaapPublisherConfiguration = configuration.getDmaapPublisherConfiguration();
180 assertAll("DMaaP Publisher Configuration Properties",
181 () -> assertEquals("test localhost", dmaapPublisherConfiguration.dmaapHostName()),
182 () -> assertEquals(Integer.valueOf(1234), dmaapPublisherConfiguration.dmaapPortNumber()),
183 () -> assertEquals("/events/unauthenticated.DCAE_CL_OUTPUT",
184 dmaapPublisherConfiguration.dmaapTopicName()),
185 () -> assertEquals("http", dmaapPublisherConfiguration.dmaapProtocol()),
186 () -> assertEquals("", dmaapPublisherConfiguration.dmaapUserName()),
187 () -> assertEquals("", dmaapPublisherConfiguration.dmaapUserPassword()),
188 () -> assertEquals("application/json", dmaapPublisherConfiguration.dmaapContentType())
191 assertAll("Generic Application Properties",
192 () -> assertEquals(30, configuration.getPipelinesPollingIntervalInSeconds()),
193 () -> assertEquals(15, configuration.getPipelinesTimeoutInSeconds()),
194 () -> assertEquals("reRegPolicyScope", configuration.getReRegistrationCloseLoopPolicyScope()),
195 () -> assertEquals("cpeAuthPolicyScope", configuration.getCpeAuthenticationCloseLoopPolicyScope()),
196 () -> assertEquals("reRegControlName", configuration.getReRegistrationCloseLoopControlName()),
197 () -> assertEquals("cpeAuthControlName", configuration.getCpeAuthenticationCloseLoopControlName())
202 void testB_passingNewConfiguration_UpdateSucceeds() {
203 Map<String, GeneratedAppConfigObject.StreamsObject> subscribes = new HashMap<>();
205 GeneratedAppConfigObject.DmaapInfo dmaapInfo1 = ImmutableDmaapInfo.builder()
206 .clientId("1500462518108")
207 .clientRole("com.dcae.member")
209 .topicUrl("https://we-are-message-router1.us:3901/events/unauthenticated.PNF_UPDATE")
211 GeneratedAppConfigObject.StreamsObject streamsObject1 = ImmutableStreamsObject.builder()
212 .type("message_router")
213 .aafUsername("some-user")
214 .aafPassword("some-password")
215 .dmaapInfo(dmaapInfo1)
217 GeneratedAppConfigObject.DmaapInfo dmaapInfo2 = ImmutableDmaapInfo.builder()
218 .clientId("1500462518108")
219 .clientRole("com.dcae.member")
221 .topicUrl("https://we-are-message-router2.us:3902/events/unauthenticated.CPE_AUTHENTICATION")
223 GeneratedAppConfigObject.StreamsObject streamsObject2 = ImmutableStreamsObject.builder()
224 .type("message_router")
225 .aafUsername("some-user")
226 .aafPassword("some-password")
227 .dmaapInfo(dmaapInfo2)
230 subscribes.put("config_key_1", streamsObject1);
231 subscribes.put("config_key_2", streamsObject2);
233 // Create Publishes Objects
234 GeneratedAppConfigObject.DmaapInfo dmaapInfo3 = ImmutableDmaapInfo.builder()
235 .clientId("1500462518108")
236 .clientRole("com.dcae.member")
238 .topicUrl("https://we-are-message-router3.us:3903/events/unauthenticated.DCAE_CL_OUTPUT")
240 GeneratedAppConfigObject.StreamsObject streamsObject3 = ImmutableStreamsObject.builder()
241 .type("message_router")
242 .aafUsername("some-user")
243 .aafPassword("some-password")
244 .dmaapInfo(dmaapInfo3)
247 // Final config object
248 GeneratedAppConfigObject updatedConfiguration = ImmutableGeneratedAppConfigObject.builder()
249 .dmaapProtocol("https")
250 .dmaapContentType("application/json")
251 .dmaapConsumerConsumerId("c13")
252 .dmaapConsumerConsumerGroup("OpenDcae-c13")
253 .dmaapMessageLimit(10)
255 .aaiHost("aai.onap.svc.cluster.local")
258 .aaiUsername("AAI-update")
259 .aaiPassword("AAI-update")
260 .aaiIgnoreSslCertificateErrors(false)
261 .pipelinesPollingIntervalSec(20)
262 .pipelinesTimeoutSec(20)
263 .cbsPollingIntervalSec(180)
264 .reRegistrationPolicyScope("policyScope-update")
265 .reRegistrationClControlName("controlName-update")
266 .cpeAuthPolicyScope("policyScope-update")
267 .cpeAuthClControlName("controlName-update")
268 .reRegConfigKey("config_key_1")
269 .cpeAuthConfigKey("config_key_2")
270 .closeLoopConfigKey("config_key_3")
271 .streamSubscribesMap(subscribes)
272 .streamPublishesMap(Collections.singletonMap("config_key_3", streamsObject3))
275 // Update the configuration
276 configuration.updateCurrentConfiguration(updatedConfiguration);
278 AaiClientConfiguration aaiClientConfiguration = configuration.getAaiClientConfiguration();
279 assertAll("AAI Client Configuration Properties",
280 () -> assertEquals("aai.onap.svc.cluster.local", aaiClientConfiguration.aaiHost()),
281 () -> assertEquals(Integer.valueOf(8443), aaiClientConfiguration.aaiPort()),
282 () -> assertEquals("http", aaiClientConfiguration.aaiProtocol()),
283 () -> assertEquals("AAI-update", aaiClientConfiguration.aaiUserName()),
284 () -> assertEquals("AAI-update", aaiClientConfiguration.aaiUserPassword()),
285 () -> assertFalse(aaiClientConfiguration.aaiIgnoreSslCertificateErrors()),
286 () -> assertEquals("bbs", aaiClientConfiguration.aaiHeaders().get("X-FromAppId")),
287 () -> assertEquals("9999", aaiClientConfiguration.aaiHeaders().get("X-TransactionId")),
288 () -> assertEquals("application/json", aaiClientConfiguration.aaiHeaders().get("Accept")),
289 () -> assertEquals("true", aaiClientConfiguration.aaiHeaders().get("Real-Time")),
290 () -> assertEquals("application/merge-patch+json",
291 aaiClientConfiguration.aaiHeaders().get("Content-Type"))
294 DmaapConsumerConfiguration dmaapConsumerReRegistrationConfig =
295 configuration.getDmaapReRegistrationConsumerConfiguration();
296 assertAll("DMaaP Consumer Re-Registration Configuration Properties",
297 () -> assertEquals("we-are-message-router1.us", dmaapConsumerReRegistrationConfig.dmaapHostName()),
298 () -> assertEquals(Integer.valueOf(3901), dmaapConsumerReRegistrationConfig.dmaapPortNumber()),
299 () -> assertEquals("/events/unauthenticated.PNF_UPDATE",
300 dmaapConsumerReRegistrationConfig.dmaapTopicName()),
301 () -> assertEquals("https", dmaapConsumerReRegistrationConfig.dmaapProtocol()),
302 () -> assertEquals("", dmaapConsumerReRegistrationConfig.dmaapUserName()),
303 () -> assertEquals("", dmaapConsumerReRegistrationConfig.dmaapUserPassword()),
304 () -> assertEquals("application/json", dmaapConsumerReRegistrationConfig.dmaapContentType()),
305 () -> assertEquals("c13", dmaapConsumerReRegistrationConfig.consumerId()),
306 () -> assertEquals("OpenDcae-c13", dmaapConsumerReRegistrationConfig.consumerGroup()),
307 () -> assertEquals(Integer.valueOf(5), dmaapConsumerReRegistrationConfig.timeoutMs()),
308 () -> assertEquals(Integer.valueOf(10), dmaapConsumerReRegistrationConfig.messageLimit())
311 DmaapConsumerConfiguration dmaapConsumerCpeAuthenticationConfig =
312 configuration.getDmaapCpeAuthenticationConsumerConfiguration();
313 assertAll("DMaaP Consumer CPE Authentication Configuration Properties",
314 () -> assertEquals("we-are-message-router2.us", dmaapConsumerCpeAuthenticationConfig.dmaapHostName()),
315 () -> assertEquals(Integer.valueOf(3902), dmaapConsumerCpeAuthenticationConfig.dmaapPortNumber()),
316 () -> assertEquals("/events/unauthenticated.CPE_AUTHENTICATION",
317 dmaapConsumerCpeAuthenticationConfig.dmaapTopicName()),
318 () -> assertEquals("https", dmaapConsumerCpeAuthenticationConfig.dmaapProtocol()),
319 () -> assertEquals("", dmaapConsumerCpeAuthenticationConfig.dmaapUserName()),
320 () -> assertEquals("", dmaapConsumerCpeAuthenticationConfig.dmaapUserPassword()),
321 () -> assertEquals("application/json", dmaapConsumerCpeAuthenticationConfig.dmaapContentType()),
322 () -> assertEquals("c13", dmaapConsumerCpeAuthenticationConfig.consumerId()),
323 () -> assertEquals("OpenDcae-c13", dmaapConsumerCpeAuthenticationConfig.consumerGroup()),
324 () -> assertEquals(Integer.valueOf(5), dmaapConsumerCpeAuthenticationConfig.timeoutMs()),
325 () -> assertEquals(Integer.valueOf(10), dmaapConsumerCpeAuthenticationConfig.messageLimit())
328 DmaapPublisherConfiguration dmaapPublisherConfiguration = configuration.getDmaapPublisherConfiguration();
329 assertAll("DMaaP Publisher Configuration Properties",
330 () -> assertEquals("we-are-message-router3.us", dmaapPublisherConfiguration.dmaapHostName()),
331 () -> assertEquals(Integer.valueOf(3903), dmaapPublisherConfiguration.dmaapPortNumber()),
332 () -> assertEquals("/events/unauthenticated.DCAE_CL_OUTPUT",
333 dmaapPublisherConfiguration.dmaapTopicName()),
334 () -> assertEquals("https", dmaapPublisherConfiguration.dmaapProtocol()),
335 () -> assertEquals("", dmaapPublisherConfiguration.dmaapUserName()),
336 () -> assertEquals("", dmaapPublisherConfiguration.dmaapUserPassword()),
337 () -> assertEquals("application/json", dmaapPublisherConfiguration.dmaapContentType())
340 assertAll("Generic Application Properties",
341 () -> assertEquals(20, configuration.getPipelinesPollingIntervalInSeconds()),
342 () -> assertEquals(20, configuration.getPipelinesTimeoutInSeconds()),
343 () -> assertEquals(180, configuration.getCbsPollingInterval()),
344 () -> assertEquals("policyScope-update", configuration.getReRegistrationCloseLoopPolicyScope()),
345 () -> assertEquals("policyScope-update", configuration.getCpeAuthenticationCloseLoopPolicyScope()),
346 () -> assertEquals("controlName-update", configuration.getReRegistrationCloseLoopControlName()),
347 () -> assertEquals("controlName-update", configuration.getCpeAuthenticationCloseLoopControlName())