4ca61f5e7e0682f5c6b8467983a8b38981320432
[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.utilities;
22
23 import static org.mockito.Mockito.spy;
24
25 import com.google.gson.JsonElement;
26 import com.google.gson.JsonParser;
27
28 import java.util.Optional;
29
30 import org.junit.jupiter.api.BeforeAll;
31 import org.junit.jupiter.api.Test;
32 import org.mockito.Mockito;
33 import org.onap.bbs.event.processor.model.CpeAuthenticationConsumerDmaapModel;
34 import org.onap.bbs.event.processor.model.ImmutableCpeAuthenticationConsumerDmaapModel;
35
36 import reactor.core.publisher.Mono;
37 import reactor.test.StepVerifier;
38
39 class CpeAuthenticationDmaapConsumerJsonParserTest {
40
41     private static JsonParser jsonParser;
42
43     private static final String CPE_AUTHENTICATION_EVENT_TEMPLATE = "{\"event\": {"
44             + "\"commonEventHeader\": { \"sourceName\":\"%s\"},"
45             + "\"stateChangeFields\": {"
46             + " \"oldState\": \"%s\","
47             + " \"newState\": \"%s\","
48             + " \"stateInterface\": \"%s\","
49             + " \"additionalFields\": {"
50             + "   \"macAddress\": \"%s\","
51             + "   \"swVersion\": \"%s\""
52             + "}}}}";
53
54     private static final String CPE_AUTHENTICATION_EVENT_TEMPLATE_WITH_MISSING_AUTHENTICATION_STATE = "{\"event\": {"
55             + "\"commonEventHeader\": { \"sourceName\":\"%s\"},"
56             + "\"stateChangeFields\": {"
57             + " \"oldState\": \"%s\","
58             + " \"stateInterface\": \"%s\","
59             + " \"additionalFields\": {"
60             + "   \"macAddress\": \"%s\","
61             + "   \"swVersion\": \"%s\""
62             + "}}}}";
63
64     private static final String CPE_AUTHENTICATION_EVENT_TEMPLATE_WITH_MISSING_SOURCE_NAME = "{\"event\": {"
65             + "\"commonEventHeader\": { },"
66             + "\"stateChangeFields\": {"
67             + " \"oldState\": \"%s\","
68             + " \"newState\": \"%s\","
69             + " \"stateInterface\": \"%s\","
70             + " \"additionalFields\": {"
71             + "   \"macAddress\": \"%s\","
72             + "   \"swVersion\": \"%s\""
73             + "}}}}";
74
75     private static final String CPE_AUTHENTICATION_EVENT_TEMPLATE_WITH_MISSING_SOURCE_NAME_VALUE = "{\"event\": {"
76             + "\"commonEventHeader\": { \"sourceName\":\"\"},"
77             + "\"stateChangeFields\": {"
78             + " \"oldState\": \"%s\","
79             + " \"newState\": \"%s\","
80             + " \"stateInterface\": \"%s\","
81             + " \"additionalFields\": {"
82             + "   \"macAddress\": \"%s\","
83             + "   \"swVersion\": \"%s\""
84             + "}}}}";
85
86     private static final String CPE_AUTHENTICATION_EVENT_TEMPLATE_WITH_MISSING_STATE_CHANGE_FIELDS = "{\"event\": {"
87             + "\"commonEventHeader\": { \"sourceName\":\"\"},"
88             + "\"somethingElse\": {"
89             + " \"oldState\": \"%s\","
90             + " \"newState\": \"%s\","
91             + " \"stateInterface\": \"%s\","
92             + " \"additionalFields\": {"
93             + "   \"macAddress\": \"%s\","
94             + "   \"swVersion\": \"%s\""
95             + "}}}}";
96
97     @BeforeAll
98     static void init() {
99         jsonParser = new JsonParser();
100     }
101
102     @Test
103     void passingNonJson_EmptyFluxIsReturned() {
104
105         CpeAuthenticationDmaapConsumerJsonParser consumerJsonParser =
106                 new CpeAuthenticationDmaapConsumerJsonParser();
107
108         StepVerifier.create(consumerJsonParser.extractModelFromDmaap(Mono.just("not JSON")))
109                 .expectSubscription()
110                 .verifyComplete();
111     }
112
113     @Test
114     void passingNoEvents_EmptyFluxIsReturned() {
115
116         CpeAuthenticationDmaapConsumerJsonParser consumerJsonParser =
117                 new CpeAuthenticationDmaapConsumerJsonParser();
118
119         StepVerifier.create(consumerJsonParser.extractModelFromDmaap(Mono.just("[]")))
120                 .expectSubscription()
121                 .verifyComplete();
122     }
123
124     @Test
125     void passingOneCorrectEvent_validationSucceeds() {
126
127         String sourceName = "PNF-CorrelationId";
128         String oldAuthenticationState = "outOfService";
129         String newAuthenticationState = "inService";
130         String stateInterface = "stateInterface";
131         String rgwMacAddress = "00:0a:95:8d:78:16";
132         String swVersion = "1.2";
133
134         String event = String.format(CPE_AUTHENTICATION_EVENT_TEMPLATE, sourceName, oldAuthenticationState,
135                 newAuthenticationState, stateInterface, rgwMacAddress, swVersion);
136
137         CpeAuthenticationDmaapConsumerJsonParser consumerJsonParser =
138                 spy(new CpeAuthenticationDmaapConsumerJsonParser());
139         JsonElement jsonElement = jsonParser.parse(event);
140         Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject()))
141                 .when(consumerJsonParser).getJsonObjectFromAnArray(jsonElement);
142
143         String eventsArray = "[" + event + "]";
144
145         CpeAuthenticationConsumerDmaapModel expectedEventObject = ImmutableCpeAuthenticationConsumerDmaapModel.builder()
146                 .correlationId(sourceName)
147                 .oldAuthenticationState(oldAuthenticationState)
148                 .newAuthenticationState(newAuthenticationState)
149                 .stateInterface(stateInterface)
150                 .rgwMacAddress(rgwMacAddress)
151                 .swVersion(swVersion)
152                 .build();
153
154         StepVerifier.create(consumerJsonParser.extractModelFromDmaap(Mono.just(eventsArray)))
155                 .expectSubscription()
156                 .expectNext(expectedEventObject);
157     }
158
159     @Test
160     void passingTwoCorrectEvents_validationSucceeds() {
161
162         String sourceName1 = "PNF-CorrelationId";
163         String sourceName2 = "PNF-CorrelationId";
164         String oldAuthenticationState = "outOfService";
165         String newAuthenticationState = "inService";
166         String stateInterface = "stateInterface";
167         String rgwMacAddress1 = "00:0a:95:8d:78:16";
168         String rgwMacAddress2 = "00:0a:95:8d:78:17";
169         String swVersion = "1.2";
170
171         String firstEvent = String.format(CPE_AUTHENTICATION_EVENT_TEMPLATE, sourceName1, oldAuthenticationState,
172                 newAuthenticationState, stateInterface, rgwMacAddress1, swVersion);
173         String secondEvent = String.format(CPE_AUTHENTICATION_EVENT_TEMPLATE, sourceName2, oldAuthenticationState,
174                 newAuthenticationState, stateInterface, rgwMacAddress2, swVersion);
175
176         CpeAuthenticationDmaapConsumerJsonParser consumerJsonParser =
177                 spy(new CpeAuthenticationDmaapConsumerJsonParser());
178         JsonElement jsonElement1 = jsonParser.parse(firstEvent);
179         Mockito.doReturn(Optional.of(jsonElement1.getAsJsonObject()))
180                 .when(consumerJsonParser).getJsonObjectFromAnArray(jsonElement1);
181         JsonElement jsonElement2 = jsonParser.parse(secondEvent);
182         Mockito.doReturn(Optional.of(jsonElement2.getAsJsonObject()))
183                 .when(consumerJsonParser).getJsonObjectFromAnArray(jsonElement2);
184
185         String eventsArray = "[" + firstEvent + secondEvent + "]";
186
187         CpeAuthenticationConsumerDmaapModel expectedFirstEventObject =
188                 ImmutableCpeAuthenticationConsumerDmaapModel.builder()
189                 .correlationId(sourceName1)
190                 .oldAuthenticationState(oldAuthenticationState)
191                 .newAuthenticationState(newAuthenticationState)
192                 .stateInterface(stateInterface)
193                 .rgwMacAddress(rgwMacAddress1)
194                 .swVersion(swVersion)
195                 .build();
196         CpeAuthenticationConsumerDmaapModel expectedSecondEventObject =
197                 ImmutableCpeAuthenticationConsumerDmaapModel.builder()
198                 .correlationId(sourceName2)
199                 .oldAuthenticationState(oldAuthenticationState)
200                 .newAuthenticationState(newAuthenticationState)
201                 .stateInterface(stateInterface)
202                 .rgwMacAddress(rgwMacAddress2)
203                 .swVersion(swVersion)
204                 .build();
205
206         StepVerifier.create(consumerJsonParser.extractModelFromDmaap(Mono.just(eventsArray)))
207                 .expectSubscription()
208                 .expectNext(expectedFirstEventObject)
209                 .expectNext(expectedSecondEventObject);
210     }
211
212     @Test
213     void passingJsonWithMissingAuthenticationState_validationFails() {
214
215         String sourceName = "PNF-CorrelationId";
216         String oldAuthenticationState = "outOfService";
217         String stateInterface = "stateInterface";
218         String rgwMacAddress = "00:0a:95:8d:78:16";
219         String swVersion = "1.2";
220
221         String event = String.format(CPE_AUTHENTICATION_EVENT_TEMPLATE_WITH_MISSING_AUTHENTICATION_STATE, sourceName,
222                 oldAuthenticationState, stateInterface, rgwMacAddress, swVersion);
223
224         CpeAuthenticationDmaapConsumerJsonParser consumerJsonParser =
225                 spy(new CpeAuthenticationDmaapConsumerJsonParser());
226         JsonElement jsonElement = jsonParser.parse(event);
227         Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject()))
228                 .when(consumerJsonParser).getJsonObjectFromAnArray(jsonElement);
229
230         String eventsArray = "[" + event + "]";
231
232         StepVerifier.create(consumerJsonParser.extractModelFromDmaap(Mono.just(eventsArray)))
233                 .expectSubscription()
234                 .verifyComplete();
235     }
236
237     @Test
238     void passingJsonWithMissingSourceName_validationFails() {
239
240         String oldAuthenticationState = "outOfService";
241         String newAuthenticationState = "inService";
242         String stateInterface = "stateInterface";
243         String rgwMacAddress = "00:0a:95:8d:78:16";
244         String swVersion = "1.2";
245
246         String event = String.format(CPE_AUTHENTICATION_EVENT_TEMPLATE_WITH_MISSING_SOURCE_NAME,
247                 oldAuthenticationState, newAuthenticationState, stateInterface, rgwMacAddress, swVersion);
248
249         CpeAuthenticationDmaapConsumerJsonParser consumerJsonParser =
250                 spy(new CpeAuthenticationDmaapConsumerJsonParser());
251         JsonElement jsonElement = jsonParser.parse(event);
252         Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject()))
253                 .when(consumerJsonParser).getJsonObjectFromAnArray(jsonElement);
254
255         String eventsArray = "[" + event + "]";
256
257         StepVerifier.create(consumerJsonParser.extractModelFromDmaap(Mono.just(eventsArray)))
258                 .expectSubscription()
259                 .verifyComplete();
260     }
261
262     @Test
263     void passingJsonWithMissingSourceNameValue_validationFails() {
264
265         String oldAuthenticationState = "outOfService";
266         String newAuthenticationState = "inService";
267         String stateInterface = "stateInterface";
268         String rgwMacAddress = "00:0a:95:8d:78:16";
269         String swVersion = "1.2";
270
271         String event = String.format(CPE_AUTHENTICATION_EVENT_TEMPLATE_WITH_MISSING_SOURCE_NAME_VALUE,
272                 oldAuthenticationState, newAuthenticationState, stateInterface, rgwMacAddress, swVersion);
273
274         CpeAuthenticationDmaapConsumerJsonParser consumerJsonParser =
275                 spy(new CpeAuthenticationDmaapConsumerJsonParser());
276         JsonElement jsonElement = jsonParser.parse(event);
277         Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject()))
278                 .when(consumerJsonParser).getJsonObjectFromAnArray(jsonElement);
279
280         String eventsArray = "[" + event + "]";
281
282         StepVerifier.create(consumerJsonParser.extractModelFromDmaap(Mono.just(eventsArray)))
283                 .expectSubscription()
284                 .verifyComplete();
285     }
286
287     @Test
288     void passingJsonWithMissingStateChangeFieldsHeader_validationFails() {
289
290         String oldAuthenticationState = "outOfService";
291         String newAuthenticationState = "inService";
292         String stateInterface = "stateInterface";
293         String rgwMacAddress = "00:0a:95:8d:78:16";
294         String swVersion = "1.2";
295
296         String event = String.format(CPE_AUTHENTICATION_EVENT_TEMPLATE_WITH_MISSING_STATE_CHANGE_FIELDS,
297                 oldAuthenticationState, newAuthenticationState, stateInterface, rgwMacAddress, swVersion);
298
299         CpeAuthenticationDmaapConsumerJsonParser consumerJsonParser =
300                 spy(new CpeAuthenticationDmaapConsumerJsonParser());
301         JsonElement jsonElement = jsonParser.parse(event);
302         Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject()))
303                 .when(consumerJsonParser).getJsonObjectFromAnArray(jsonElement);
304
305         String eventsArray = "[" + event + "]";
306
307         StepVerifier.create(consumerJsonParser.extractModelFromDmaap(Mono.just(eventsArray)))
308                 .expectSubscription()
309                 .verifyComplete();
310     }
311 }