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.utilities;
23 import static org.mockito.Mockito.spy;
25 import com.google.gson.JsonElement;
26 import com.google.gson.JsonParser;
27 import com.google.gson.stream.JsonReader;
29 import java.io.StringReader;
30 import java.util.Optional;
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;
38 import reactor.core.publisher.Mono;
39 import reactor.test.StepVerifier;
41 class CpeAuthenticationDmaapConsumerJsonParserTest {
43 private static JsonParser jsonParser;
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\""
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\""
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\""
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\""
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\""
101 jsonParser = new JsonParser();
105 void passingNonJson_getIllegalStateException() {
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();
113 StepVerifier.create(consumerJsonParser.extractModelFromDmaap(Mono.just(notJson)))
114 .expectSubscription()
115 .verifyError(IllegalStateException.class);
119 void passingNoEvents_EmptyFluxIsReturned() {
121 CpeAuthenticationDmaapConsumerJsonParser consumerJsonParser =
122 new CpeAuthenticationDmaapConsumerJsonParser();
124 StepVerifier.create(consumerJsonParser.extractModelFromDmaap(Mono.just(jsonParser.parse("[]"))))
125 .expectSubscription()
130 void passingOneCorrectEvent_validationSucceeds() {
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";
139 String event = String.format(CPE_AUTHENTICATION_EVENT_TEMPLATE, sourceName, oldAuthenticationState,
140 newAuthenticationState, stateInterface, rgwMacAddress, swVersion);
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);
148 String eventsArray = "[" + event + "]";
150 CpeAuthenticationConsumerDmaapModel expectedEventObject = ImmutableCpeAuthenticationConsumerDmaapModel.builder()
151 .correlationId(sourceName)
152 .oldAuthenticationState(oldAuthenticationState)
153 .newAuthenticationState(newAuthenticationState)
154 .stateInterface(stateInterface)
155 .rgwMacAddress(rgwMacAddress)
156 .swVersion(swVersion)
159 StepVerifier.create(consumerJsonParser.extractModelFromDmaap(Mono.just(jsonParser.parse(eventsArray))))
160 .expectSubscription()
161 .expectNext(expectedEventObject);
165 void passingTwoCorrectEvents_validationSucceeds() {
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";
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);
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);
190 String eventsArray = "[" + firstEvent + "," + secondEvent + "]";
192 CpeAuthenticationConsumerDmaapModel expectedFirstEventObject =
193 ImmutableCpeAuthenticationConsumerDmaapModel.builder()
194 .correlationId(sourceName1)
195 .oldAuthenticationState(oldAuthenticationState)
196 .newAuthenticationState(newAuthenticationState)
197 .stateInterface(stateInterface)
198 .rgwMacAddress(rgwMacAddress1)
199 .swVersion(swVersion)
201 CpeAuthenticationConsumerDmaapModel expectedSecondEventObject =
202 ImmutableCpeAuthenticationConsumerDmaapModel.builder()
203 .correlationId(sourceName2)
204 .oldAuthenticationState(oldAuthenticationState)
205 .newAuthenticationState(newAuthenticationState)
206 .stateInterface(stateInterface)
207 .rgwMacAddress(rgwMacAddress2)
208 .swVersion(swVersion)
211 StepVerifier.create(consumerJsonParser.extractModelFromDmaap(Mono.just(jsonParser.parse(eventsArray))))
212 .expectSubscription()
213 .expectNext(expectedFirstEventObject)
214 .expectNext(expectedSecondEventObject);
218 void passingJsonWithMissingAuthenticationState_validationFails() {
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";
226 String event = String.format(CPE_AUTHENTICATION_EVENT_TEMPLATE_WITH_MISSING_AUTHENTICATION_STATE, sourceName,
227 oldAuthenticationState, stateInterface, rgwMacAddress, swVersion);
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);
235 String eventsArray = "[" + event + "]";
237 StepVerifier.create(consumerJsonParser.extractModelFromDmaap(Mono.just(jsonParser.parse(eventsArray))))
238 .expectSubscription()
243 void passingJsonWithMissingSourceName_validationFails() {
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";
251 String event = String.format(CPE_AUTHENTICATION_EVENT_TEMPLATE_WITH_MISSING_SOURCE_NAME,
252 oldAuthenticationState, newAuthenticationState, stateInterface, rgwMacAddress, swVersion);
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);
260 String eventsArray = "[" + event + "]";
262 StepVerifier.create(consumerJsonParser.extractModelFromDmaap(Mono.just(jsonParser.parse(eventsArray))))
263 .expectSubscription()
268 void passingJsonWithMissingSourceNameValue_validationFails() {
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";
276 String event = String.format(CPE_AUTHENTICATION_EVENT_TEMPLATE_WITH_MISSING_SOURCE_NAME_VALUE,
277 oldAuthenticationState, newAuthenticationState, stateInterface, rgwMacAddress, swVersion);
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);
285 String eventsArray = "[" + event + "]";
287 StepVerifier.create(consumerJsonParser.extractModelFromDmaap(Mono.just(jsonParser.parse(eventsArray))))
288 .expectSubscription()
293 void passingJsonWithMissingStateChangeFieldsHeader_validationFails() {
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";
301 String event = String.format(CPE_AUTHENTICATION_EVENT_TEMPLATE_WITH_MISSING_STATE_CHANGE_FIELDS,
302 oldAuthenticationState, newAuthenticationState, stateInterface, rgwMacAddress, swVersion);
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);
310 String eventsArray = "[" + event + "]";
312 StepVerifier.create(consumerJsonParser.extractModelFromDmaap(Mono.just(jsonParser.parse(eventsArray))))
313 .expectSubscription()