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