538ff1de49ed09d370d5c208fffa419bde76d816
[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.tasks;
22
23 import static org.mockito.Mockito.doReturn;
24 import static org.mockito.Mockito.mock;
25 import static org.mockito.Mockito.reset;
26 import static org.mockito.Mockito.verify;
27 import static org.mockito.Mockito.when;
28
29 import javax.net.ssl.SSLException;
30
31 import org.junit.Assert;
32 import org.junit.jupiter.api.AfterEach;
33 import org.junit.jupiter.api.BeforeAll;
34 import org.junit.jupiter.api.Test;
35 import org.onap.bbs.event.processor.config.ApplicationConfiguration;
36 import org.onap.bbs.event.processor.exceptions.EmptyDmaapResponseException;
37 import org.onap.bbs.event.processor.model.CpeAuthenticationConsumerDmaapModel;
38 import org.onap.bbs.event.processor.model.ImmutableCpeAuthenticationConsumerDmaapModel;
39 import org.onap.bbs.event.processor.utilities.CpeAuthenticationDmaapConsumerJsonParser;
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.ImmutableDmaapConsumerConfiguration;
42 import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.service.consumer.ConsumerReactiveHttpClientFactory;
43 import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.service.consumer.DMaaPConsumerReactiveHttpClient;
44
45 import reactor.core.publisher.Mono;
46 import reactor.test.StepVerifier;
47
48 class DmaapCpeAuthenticationConsumerTaskImplTest {
49
50     private static final String CPE_AUTHENTICATION_EVENT_TEMPLATE = "{\"event\": {"
51             + "\"commonEventHeader\": { \"sourceName\":\"%s\"},"
52             + "\"stateChangeFields\": {"
53             + " \"oldState\": \"%s\","
54             + " \"newState\": \"%s\","
55             + " \"stateInterface\": \"%s\","
56             + " \"additionalFields\": {"
57             + "   \"macAddress\": \"%s\","
58             + "   \"swVersion\": \"%s\""
59             + "}}}}";
60
61     private static DmaapCpeAuthenticationConsumerTask dmaapConsumerTask;
62     private static CpeAuthenticationConsumerDmaapModel cpeAuthenticationConsumerDmaapModel;
63     private static DMaaPConsumerReactiveHttpClient dMaaPConsumerReactiveHttpClient;
64     private static String eventsArray;
65
66     @BeforeAll
67     static void setUp() throws SSLException {
68
69         final String sourceName = "PNF-CorrelationId";
70         final String oldAuthenticationState = "outOfService";
71         final String newAuthenticationState = "inService";
72         final String stateInterface = "stateInterface";
73         final String rgwMacAddress = "00:0a:95:8d:78:16";
74         final String swVersion = "1.2";
75
76         // Mock Re-registration configuration
77         DmaapConsumerConfiguration dmaapConsumerConfiguration = testVersionOfDmaapConsumerConfiguration();
78         ApplicationConfiguration configuration = mock(ApplicationConfiguration.class);
79         when(configuration.getDmaapCpeAuthenticationConsumerConfiguration()).thenReturn(dmaapConsumerConfiguration);
80
81         // Mock reactive DMaaP client
82         ConsumerReactiveHttpClientFactory httpClientFactory = mock(ConsumerReactiveHttpClientFactory.class);
83         dMaaPConsumerReactiveHttpClient = mock(DMaaPConsumerReactiveHttpClient.class);
84         doReturn(dMaaPConsumerReactiveHttpClient).when(httpClientFactory).create(dmaapConsumerConfiguration);
85
86         dmaapConsumerTask = new DmaapCpeAuthenticationConsumerTaskImpl(configuration,
87                 new CpeAuthenticationDmaapConsumerJsonParser(), httpClientFactory);
88
89         cpeAuthenticationConsumerDmaapModel = ImmutableCpeAuthenticationConsumerDmaapModel.builder()
90                 .correlationId(sourceName)
91                 .oldAuthenticationState(oldAuthenticationState)
92                 .newAuthenticationState(newAuthenticationState)
93                 .stateInterface(stateInterface)
94                 .rgwMacAddress(rgwMacAddress)
95                 .swVersion(swVersion)
96                 .build();
97
98         String event = String.format(CPE_AUTHENTICATION_EVENT_TEMPLATE, sourceName, oldAuthenticationState,
99                 newAuthenticationState, stateInterface, rgwMacAddress, swVersion);
100
101         eventsArray = "[" + event + "]";
102     }
103
104     @AfterEach
105     void resetMock() {
106         reset(dMaaPConsumerReactiveHttpClient);
107     }
108
109     @Test
110     void passingEmptyMessage_NothingHappens() throws Exception {
111         when(dMaaPConsumerReactiveHttpClient.getDMaaPConsumerResponse()).thenReturn(Mono.just(""));
112
113         StepVerifier.create(dmaapConsumerTask.execute("Sample input"))
114                 .expectSubscription()
115                 .expectError(EmptyDmaapResponseException.class);
116         verify(dMaaPConsumerReactiveHttpClient).getDMaaPConsumerResponse();
117     }
118
119     @Test
120     void passingNormalMessage_ResponseSucceeds() throws Exception {
121         when(dMaaPConsumerReactiveHttpClient.getDMaaPConsumerResponse()).thenReturn(Mono.just(eventsArray));
122
123         StepVerifier.create(dmaapConsumerTask.execute("Sample input"))
124                 .expectSubscription()
125                 .consumeNextWith(e -> Assert.assertEquals(e, cpeAuthenticationConsumerDmaapModel));
126         verify(dMaaPConsumerReactiveHttpClient).getDMaaPConsumerResponse();
127     }
128
129     private static DmaapConsumerConfiguration testVersionOfDmaapConsumerConfiguration() {
130         return new ImmutableDmaapConsumerConfiguration.Builder()
131                 .consumerGroup("consumer-group")
132                 .consumerId("consumer-id")
133                 .dmaapContentType("application/json")
134                 .dmaapHostName("message-router.onap.svc.cluster.local")
135                 .dmaapPortNumber(3904)
136                 .dmaapProtocol("http")
137                 .dmaapUserName("admin")
138                 .dmaapUserPassword("admin")
139                 .trustStorePath("change it")
140                 .trustStorePasswordPath("change_it")
141                 .keyStorePath("change it")
142                 .keyStorePasswordPath("change_it")
143                 .enableDmaapCertAuth(false)
144                 .dmaapTopicName("/events/unauthenticated.CPE_AUTHENTICATION")
145                 .timeoutMs(-1)
146                 .messageLimit(-1)
147                 .build();
148     }
149 }