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.policyVersion=1.0.0",
99 "configs.application.clTargetType=VM",
100 "configs.application.clEventStatus=ONSET",
101 "configs.application.clVersion=1.0.2",
102 "configs.application.clTarget=vserver.vserver-name",
103 "configs.application.clOriginator=DCAE-bbs-event-processor",
104 "configs.application.re-registration.policyScope=reRegPolicyScope",
105 "configs.application.re-registration.clControlName=reRegControlName",
106 "configs.application.cpe-authentication.policyScope=cpeAuthPolicyScope",
107 "configs.application.cpe-authentication.clControlName=cpeAuthControlName"})
108 @DisplayName("Application Configuration Unit-Tests")
109 // Ordering tests because we need a first configuration population from @TestPropertySource
110 // and then update of the config parameters based on a new Consul-retrieved Configuration object
111 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
112 class ApplicationConfigurationTest {
114 private ApplicationConfiguration configuration;
117 public ApplicationConfigurationTest(AaiClientProperties aaiClientProperties,
118 DmaapReRegistrationConsumerProperties dmaapReRegistrationConsumerProperties,
119 DmaapCpeAuthenticationConsumerProperties
120 dmaapCpeAuthenticationConsumerProperties,
121 DmaapProducerProperties dmaapProducerProperties,
122 SecurityProperties securityProperties,
123 GenericProperties genericProperties) {
124 this.configuration = new ApplicationConfiguration(aaiClientProperties,
125 dmaapReRegistrationConsumerProperties,
126 dmaapCpeAuthenticationConsumerProperties,
127 dmaapProducerProperties,
133 void testA_configurationObjectSuccessfullyPopulated() {
135 AaiClientConfiguration aaiClientConfiguration = configuration.getAaiClientConfiguration();
136 assertAll("AAI Client Configuration Properties",
137 () -> assertEquals("test localhost", aaiClientConfiguration.aaiHost()),
138 () -> assertEquals(Integer.valueOf(1234), aaiClientConfiguration.aaiPort()),
139 () -> assertEquals("https", aaiClientConfiguration.aaiProtocol()),
140 () -> assertEquals("AAI", aaiClientConfiguration.aaiUserName()),
141 () -> assertEquals("AAI", aaiClientConfiguration.aaiUserPassword()),
142 () -> assertTrue(aaiClientConfiguration.aaiIgnoreSslCertificateErrors()),
143 () -> assertEquals("bbs", aaiClientConfiguration.aaiHeaders().get("X-FromAppId")),
144 () -> assertEquals("9999", aaiClientConfiguration.aaiHeaders().get("X-TransactionId")),
145 () -> assertEquals("application/json", aaiClientConfiguration.aaiHeaders().get("Accept")),
146 () -> assertEquals("true", aaiClientConfiguration.aaiHeaders().get("Real-Time")),
147 () -> assertEquals("application/merge-patch+json",
148 aaiClientConfiguration.aaiHeaders().get("Content-Type"))
151 DmaapConsumerConfiguration dmaapConsumerReRegistrationConfig =
152 configuration.getDmaapReRegistrationConsumerConfiguration();
153 assertAll("DMaaP Consumer Re-Registration Configuration Properties",
154 () -> assertEquals("test localhost", dmaapConsumerReRegistrationConfig.dmaapHostName()),
155 () -> assertEquals(Integer.valueOf(1234), dmaapConsumerReRegistrationConfig.dmaapPortNumber()),
156 () -> assertEquals("/events/unauthenticated.PNF_REREGISTRATION",
157 dmaapConsumerReRegistrationConfig.dmaapTopicName()),
158 () -> assertEquals("http", dmaapConsumerReRegistrationConfig.dmaapProtocol()),
159 () -> assertEquals("", dmaapConsumerReRegistrationConfig.dmaapUserName()),
160 () -> assertEquals("", dmaapConsumerReRegistrationConfig.dmaapUserPassword()),
161 () -> assertEquals("application/json", dmaapConsumerReRegistrationConfig.dmaapContentType()),
162 () -> assertEquals("c12", dmaapConsumerReRegistrationConfig.consumerId()),
163 () -> assertEquals("OpenDcae-c12", dmaapConsumerReRegistrationConfig.consumerGroup()),
164 () -> assertEquals(Integer.valueOf(-1), dmaapConsumerReRegistrationConfig.timeoutMs()),
165 () -> assertEquals(Integer.valueOf(1), dmaapConsumerReRegistrationConfig.messageLimit())
168 DmaapConsumerConfiguration dmaapConsumerCpeAuthenticationConfig =
169 configuration.getDmaapCpeAuthenticationConsumerConfiguration();
170 assertAll("DMaaP Consumer CPE Authentication Configuration Properties",
171 () -> assertEquals("test localhost", dmaapConsumerCpeAuthenticationConfig.dmaapHostName()),
172 () -> assertEquals(Integer.valueOf(1234), dmaapConsumerCpeAuthenticationConfig.dmaapPortNumber()),
173 () -> assertEquals("/events/unauthenticated.CPE_AUTHENTICATION",
174 dmaapConsumerCpeAuthenticationConfig.dmaapTopicName()),
175 () -> assertEquals("http", dmaapConsumerCpeAuthenticationConfig.dmaapProtocol()),
176 () -> assertEquals("", dmaapConsumerCpeAuthenticationConfig.dmaapUserName()),
177 () -> assertEquals("", dmaapConsumerCpeAuthenticationConfig.dmaapUserPassword()),
178 () -> assertEquals("application/json", dmaapConsumerCpeAuthenticationConfig.dmaapContentType()),
179 () -> assertEquals("c12", dmaapConsumerCpeAuthenticationConfig.consumerId()),
180 () -> assertEquals("OpenDcae-c12", dmaapConsumerCpeAuthenticationConfig.consumerGroup()),
181 () -> assertEquals(Integer.valueOf(-1), dmaapConsumerCpeAuthenticationConfig.timeoutMs()),
182 () -> assertEquals(Integer.valueOf(1), dmaapConsumerCpeAuthenticationConfig.messageLimit())
185 DmaapPublisherConfiguration dmaapPublisherConfiguration = configuration.getDmaapPublisherConfiguration();
186 assertAll("DMaaP Publisher Configuration Properties",
187 () -> assertEquals("test localhost", dmaapPublisherConfiguration.dmaapHostName()),
188 () -> assertEquals(Integer.valueOf(1234), dmaapPublisherConfiguration.dmaapPortNumber()),
189 () -> assertEquals("/events/unauthenticated.DCAE_CL_OUTPUT",
190 dmaapPublisherConfiguration.dmaapTopicName()),
191 () -> assertEquals("http", dmaapPublisherConfiguration.dmaapProtocol()),
192 () -> assertEquals("", dmaapPublisherConfiguration.dmaapUserName()),
193 () -> assertEquals("", dmaapPublisherConfiguration.dmaapUserPassword()),
194 () -> assertEquals("application/json", dmaapPublisherConfiguration.dmaapContentType())
197 assertAll("Generic Application Properties",
198 () -> assertEquals(30, configuration.getPipelinesPollingIntervalInSeconds()),
199 () -> assertEquals(15, configuration.getPipelinesTimeoutInSeconds()),
200 () -> assertEquals("1.0.0", configuration.getPolicyVersion()),
201 () -> assertEquals("VM", configuration.getCloseLoopTargetType()),
202 () -> assertEquals("ONSET", configuration.getCloseLoopEventStatus()),
203 () -> assertEquals("1.0.2", configuration.getCloseLoopVersion()),
204 () -> assertEquals("vserver.vserver-name", configuration.getCloseLoopTarget()),
205 () -> assertEquals("DCAE-bbs-event-processor", configuration.getCloseLoopOriginator()),
206 () -> assertEquals("reRegPolicyScope", configuration.getReRegistrationCloseLoopPolicyScope()),
207 () -> assertEquals("cpeAuthPolicyScope", configuration.getCpeAuthenticationCloseLoopPolicyScope()),
208 () -> assertEquals("reRegControlName", configuration.getReRegistrationCloseLoopControlName()),
209 () -> assertEquals("cpeAuthControlName", configuration.getCpeAuthenticationCloseLoopControlName())
214 void testB_passingNewConfiguration_UpdateSucceeds() {
215 Map<String, GeneratedAppConfigObject.StreamsObject> subscribes = new HashMap<>();
217 GeneratedAppConfigObject.DmaapInfo dmaapInfo1 = ImmutableDmaapInfo.builder()
218 .clientId("1500462518108")
219 .clientRole("com.dcae.member")
221 .topicUrl("https://we-are-message-router1.us:3901/events/unauthenticated.PNF_UPDATE")
223 GeneratedAppConfigObject.StreamsObject streamsObject1 = ImmutableStreamsObject.builder()
224 .type("message_router")
225 .aafUsername("some-user")
226 .aafPassword("some-password")
227 .dmaapInfo(dmaapInfo1)
229 GeneratedAppConfigObject.DmaapInfo dmaapInfo2 = ImmutableDmaapInfo.builder()
230 .clientId("1500462518108")
231 .clientRole("com.dcae.member")
233 .topicUrl("https://we-are-message-router2.us:3902/events/unauthenticated.CPE_AUTHENTICATION")
235 GeneratedAppConfigObject.StreamsObject streamsObject2 = ImmutableStreamsObject.builder()
236 .type("message_router")
237 .aafUsername("some-user")
238 .aafPassword("some-password")
239 .dmaapInfo(dmaapInfo2)
242 subscribes.put("config_key_1", streamsObject1);
243 subscribes.put("config_key_2", streamsObject2);
245 // Create Publishes Objects
246 GeneratedAppConfigObject.DmaapInfo dmaapInfo3 = ImmutableDmaapInfo.builder()
247 .clientId("1500462518108")
248 .clientRole("com.dcae.member")
250 .topicUrl("https://we-are-message-router3.us:3903/events/unauthenticated.DCAE_CL_OUTPUT")
252 GeneratedAppConfigObject.StreamsObject streamsObject3 = ImmutableStreamsObject.builder()
253 .type("message_router")
254 .aafUsername("some-user")
255 .aafPassword("some-password")
256 .dmaapInfo(dmaapInfo3)
259 // Final config object
260 GeneratedAppConfigObject updatedConfiguration = ImmutableGeneratedAppConfigObject.builder()
261 .dmaapProtocol("https")
262 .dmaapContentType("application/json")
263 .dmaapConsumerConsumerId("c13")
264 .dmaapConsumerConsumerGroup("OpenDcae-c13")
265 .dmaapMessageLimit(10)
267 .aaiHost("aai.onap.svc.cluster.local")
270 .aaiUsername("AAI-update")
271 .aaiPassword("AAI-update")
272 .aaiIgnoreSslCertificateErrors(false)
273 .pipelinesPollingIntervalSec(20)
274 .pipelinesTimeoutSec(20)
275 .cbsPollingIntervalSec(180)
276 .policyVersion("2.0.0")
277 .closeLoopTargetType("VM2")
278 .closeLoopEventStatus("ONSET-update")
279 .closeLoopVersion("2.0.2")
280 .closeLoopTarget("Target-update")
281 .closeLoopOriginator("Originator-update")
282 .reRegistrationPolicyScope("policyScope-update")
283 .reRegistrationClControlName("controlName-update")
284 .cpeAuthPolicyScope("policyScope-update")
285 .cpeAuthClControlName("controlName-update")
286 .reRegConfigKey("config_key_1")
287 .cpeAuthConfigKey("config_key_2")
288 .closeLoopConfigKey("config_key_3")
289 .streamSubscribesMap(subscribes)
290 .streamPublishesMap(Collections.singletonMap("config_key_3", streamsObject3))
293 // Update the configuration
294 configuration.updateCurrentConfiguration(updatedConfiguration);
296 AaiClientConfiguration aaiClientConfiguration = configuration.getAaiClientConfiguration();
297 assertAll("AAI Client Configuration Properties",
298 () -> assertEquals("aai.onap.svc.cluster.local", aaiClientConfiguration.aaiHost()),
299 () -> assertEquals(Integer.valueOf(8443), aaiClientConfiguration.aaiPort()),
300 () -> assertEquals("http", aaiClientConfiguration.aaiProtocol()),
301 () -> assertEquals("AAI-update", aaiClientConfiguration.aaiUserName()),
302 () -> assertEquals("AAI-update", aaiClientConfiguration.aaiUserPassword()),
303 () -> assertFalse(aaiClientConfiguration.aaiIgnoreSslCertificateErrors()),
304 () -> assertEquals("bbs", aaiClientConfiguration.aaiHeaders().get("X-FromAppId")),
305 () -> assertEquals("9999", aaiClientConfiguration.aaiHeaders().get("X-TransactionId")),
306 () -> assertEquals("application/json", aaiClientConfiguration.aaiHeaders().get("Accept")),
307 () -> assertEquals("true", aaiClientConfiguration.aaiHeaders().get("Real-Time")),
308 () -> assertEquals("application/merge-patch+json",
309 aaiClientConfiguration.aaiHeaders().get("Content-Type"))
312 DmaapConsumerConfiguration dmaapConsumerReRegistrationConfig =
313 configuration.getDmaapReRegistrationConsumerConfiguration();
314 assertAll("DMaaP Consumer Re-Registration Configuration Properties",
315 () -> assertEquals("we-are-message-router1.us", dmaapConsumerReRegistrationConfig.dmaapHostName()),
316 () -> assertEquals(Integer.valueOf(3901), dmaapConsumerReRegistrationConfig.dmaapPortNumber()),
317 () -> assertEquals("/events/unauthenticated.PNF_UPDATE",
318 dmaapConsumerReRegistrationConfig.dmaapTopicName()),
319 () -> assertEquals("https", dmaapConsumerReRegistrationConfig.dmaapProtocol()),
320 () -> assertEquals("", dmaapConsumerReRegistrationConfig.dmaapUserName()),
321 () -> assertEquals("", dmaapConsumerReRegistrationConfig.dmaapUserPassword()),
322 () -> assertEquals("application/json", dmaapConsumerReRegistrationConfig.dmaapContentType()),
323 () -> assertEquals("c13", dmaapConsumerReRegistrationConfig.consumerId()),
324 () -> assertEquals("OpenDcae-c13", dmaapConsumerReRegistrationConfig.consumerGroup()),
325 () -> assertEquals(Integer.valueOf(5), dmaapConsumerReRegistrationConfig.timeoutMs()),
326 () -> assertEquals(Integer.valueOf(10), dmaapConsumerReRegistrationConfig.messageLimit())
329 DmaapConsumerConfiguration dmaapConsumerCpeAuthenticationConfig =
330 configuration.getDmaapCpeAuthenticationConsumerConfiguration();
331 assertAll("DMaaP Consumer CPE Authentication Configuration Properties",
332 () -> assertEquals("we-are-message-router2.us", dmaapConsumerCpeAuthenticationConfig.dmaapHostName()),
333 () -> assertEquals(Integer.valueOf(3902), dmaapConsumerCpeAuthenticationConfig.dmaapPortNumber()),
334 () -> assertEquals("/events/unauthenticated.CPE_AUTHENTICATION",
335 dmaapConsumerCpeAuthenticationConfig.dmaapTopicName()),
336 () -> assertEquals("https", dmaapConsumerCpeAuthenticationConfig.dmaapProtocol()),
337 () -> assertEquals("", dmaapConsumerCpeAuthenticationConfig.dmaapUserName()),
338 () -> assertEquals("", dmaapConsumerCpeAuthenticationConfig.dmaapUserPassword()),
339 () -> assertEquals("application/json", dmaapConsumerCpeAuthenticationConfig.dmaapContentType()),
340 () -> assertEquals("c13", dmaapConsumerCpeAuthenticationConfig.consumerId()),
341 () -> assertEquals("OpenDcae-c13", dmaapConsumerCpeAuthenticationConfig.consumerGroup()),
342 () -> assertEquals(Integer.valueOf(5), dmaapConsumerCpeAuthenticationConfig.timeoutMs()),
343 () -> assertEquals(Integer.valueOf(10), dmaapConsumerCpeAuthenticationConfig.messageLimit())
346 DmaapPublisherConfiguration dmaapPublisherConfiguration = configuration.getDmaapPublisherConfiguration();
347 assertAll("DMaaP Publisher Configuration Properties",
348 () -> assertEquals("we-are-message-router3.us", dmaapPublisherConfiguration.dmaapHostName()),
349 () -> assertEquals(Integer.valueOf(3903), dmaapPublisherConfiguration.dmaapPortNumber()),
350 () -> assertEquals("/events/unauthenticated.DCAE_CL_OUTPUT",
351 dmaapPublisherConfiguration.dmaapTopicName()),
352 () -> assertEquals("https", dmaapPublisherConfiguration.dmaapProtocol()),
353 () -> assertEquals("", dmaapPublisherConfiguration.dmaapUserName()),
354 () -> assertEquals("", dmaapPublisherConfiguration.dmaapUserPassword()),
355 () -> assertEquals("application/json", dmaapPublisherConfiguration.dmaapContentType())
358 assertAll("Generic Application Properties",
359 () -> assertEquals(20, configuration.getPipelinesPollingIntervalInSeconds()),
360 () -> assertEquals(20, configuration.getPipelinesTimeoutInSeconds()),
361 () -> assertEquals(180, configuration.getCbsPollingInterval()),
362 () -> assertEquals("2.0.0", configuration.getPolicyVersion()),
363 () -> assertEquals("VM2", configuration.getCloseLoopTargetType()),
364 () -> assertEquals("ONSET-update", configuration.getCloseLoopEventStatus()),
365 () -> assertEquals("2.0.2", configuration.getCloseLoopVersion()),
366 () -> assertEquals("Target-update", configuration.getCloseLoopTarget()),
367 () -> assertEquals("Originator-update", configuration.getCloseLoopOriginator()),
368 () -> assertEquals("policyScope-update", configuration.getReRegistrationCloseLoopPolicyScope()),
369 () -> assertEquals("policyScope-update", configuration.getCpeAuthenticationCloseLoopPolicyScope()),
370 () -> assertEquals("controlName-update", configuration.getReRegistrationCloseLoopControlName()),
371 () -> assertEquals("controlName-update", configuration.getCpeAuthenticationCloseLoopControlName())