59feacaa33f2702a5776c43d2ce4a2d94a3d209d
[dcaegen2/services.git] /
1 /*
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
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.bbs.event.processor.config;
22
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;
27
28 import java.util.Collections;
29 import java.util.HashMap;
30 import java.util.Map;
31
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;
46
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 {
107
108     private ApplicationConfiguration configuration;
109
110     @Autowired
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,
122                 securityProperties,
123                 genericProperties);
124     }
125
126     @Test
127     void testA_configurationObjectSuccessfullyPopulated() {
128
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"))
143         );
144
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())
160         );
161
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())
177         );
178
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())
189         );
190
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())
198         );
199     }
200
201     @Test
202     void testB_passingNewConfiguration_UpdateSucceeds() {
203         Map<String, GeneratedAppConfigObject.StreamsObject> subscribes = new HashMap<>();
204
205         GeneratedAppConfigObject.DmaapInfo dmaapInfo1 = ImmutableDmaapInfo.builder()
206                 .clientId("1500462518108")
207                 .clientRole("com.dcae.member")
208                 .location("mtc00")
209                 .topicUrl("https://we-are-message-router1.us:3901/events/unauthenticated.PNF_UPDATE")
210                 .build();
211         GeneratedAppConfigObject.StreamsObject streamsObject1 = ImmutableStreamsObject.builder()
212                 .type("message_router")
213                 .aafUsername("some-user")
214                 .aafPassword("some-password")
215                 .dmaapInfo(dmaapInfo1)
216                 .build();
217         GeneratedAppConfigObject.DmaapInfo dmaapInfo2 = ImmutableDmaapInfo.builder()
218                 .clientId("1500462518108")
219                 .clientRole("com.dcae.member")
220                 .location("mtc00")
221                 .topicUrl("https://we-are-message-router2.us:3902/events/unauthenticated.CPE_AUTHENTICATION")
222                 .build();
223         GeneratedAppConfigObject.StreamsObject streamsObject2 = ImmutableStreamsObject.builder()
224                 .type("message_router")
225                 .aafUsername("some-user")
226                 .aafPassword("some-password")
227                 .dmaapInfo(dmaapInfo2)
228                 .build();
229
230         subscribes.put("config_key_1", streamsObject1);
231         subscribes.put("config_key_2", streamsObject2);
232
233         // Create Publishes Objects
234         GeneratedAppConfigObject.DmaapInfo dmaapInfo3 = ImmutableDmaapInfo.builder()
235                 .clientId("1500462518108")
236                 .clientRole("com.dcae.member")
237                 .location("mtc00")
238                 .topicUrl("https://we-are-message-router3.us:3903/events/unauthenticated.DCAE_CL_OUTPUT")
239                 .build();
240         GeneratedAppConfigObject.StreamsObject streamsObject3 = ImmutableStreamsObject.builder()
241                 .type("message_router")
242                 .aafUsername("some-user")
243                 .aafPassword("some-password")
244                 .dmaapInfo(dmaapInfo3)
245                 .build();
246
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)
254                 .dmaapTimeoutMs(5)
255                 .aaiHost("aai.onap.svc.cluster.local")
256                 .aaiPort(8443)
257                 .aaiProtocol("http")
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))
273                 .build();
274
275         // Update the configuration
276         configuration.updateCurrentConfiguration(updatedConfiguration);
277
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"))
292         );
293
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())
309         );
310
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())
326         );
327
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())
338         );
339
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())
348         );
349     }
350 }