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;
28 import java.util.Optional;
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;
36 import reactor.core.publisher.Mono;
37 import reactor.test.StepVerifier;
39 class CpeAuthenticationDmaapConsumerJsonParserTest {
41 private static JsonParser jsonParser;
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\""
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\""
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\""
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\""
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\""
99 jsonParser = new JsonParser();
103 void passingNonJson_EmptyFluxIsReturned() {
105 CpeAuthenticationDmaapConsumerJsonParser consumerJsonParser =
106 new CpeAuthenticationDmaapConsumerJsonParser();
108 StepVerifier.create(consumerJsonParser.extractModelFromDmaap(Mono.just("not JSON")))
109 .expectSubscription()
114 void passingNoEvents_EmptyFluxIsReturned() {
116 CpeAuthenticationDmaapConsumerJsonParser consumerJsonParser =
117 new CpeAuthenticationDmaapConsumerJsonParser();
119 StepVerifier.create(consumerJsonParser.extractModelFromDmaap(Mono.just("[]")))
120 .expectSubscription()
125 void passingOneCorrectEvent_validationSucceeds() {
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";
134 String event = String.format(CPE_AUTHENTICATION_EVENT_TEMPLATE, sourceName, oldAuthenticationState,
135 newAuthenticationState, stateInterface, rgwMacAddress, swVersion);
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);
143 String eventsArray = "[" + event + "]";
145 CpeAuthenticationConsumerDmaapModel expectedEventObject = ImmutableCpeAuthenticationConsumerDmaapModel.builder()
146 .correlationId(sourceName)
147 .oldAuthenticationState(oldAuthenticationState)
148 .newAuthenticationState(newAuthenticationState)
149 .stateInterface(stateInterface)
150 .rgwMacAddress(rgwMacAddress)
151 .swVersion(swVersion)
154 StepVerifier.create(consumerJsonParser.extractModelFromDmaap(Mono.just(eventsArray)))
155 .expectSubscription()
156 .expectNext(expectedEventObject);
160 void passingTwoCorrectEvents_validationSucceeds() {
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";
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);
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);
185 String eventsArray = "[" + firstEvent + secondEvent + "]";
187 CpeAuthenticationConsumerDmaapModel expectedFirstEventObject =
188 ImmutableCpeAuthenticationConsumerDmaapModel.builder()
189 .correlationId(sourceName1)
190 .oldAuthenticationState(oldAuthenticationState)
191 .newAuthenticationState(newAuthenticationState)
192 .stateInterface(stateInterface)
193 .rgwMacAddress(rgwMacAddress1)
194 .swVersion(swVersion)
196 CpeAuthenticationConsumerDmaapModel expectedSecondEventObject =
197 ImmutableCpeAuthenticationConsumerDmaapModel.builder()
198 .correlationId(sourceName2)
199 .oldAuthenticationState(oldAuthenticationState)
200 .newAuthenticationState(newAuthenticationState)
201 .stateInterface(stateInterface)
202 .rgwMacAddress(rgwMacAddress2)
203 .swVersion(swVersion)
206 StepVerifier.create(consumerJsonParser.extractModelFromDmaap(Mono.just(eventsArray)))
207 .expectSubscription()
208 .expectNext(expectedFirstEventObject)
209 .expectNext(expectedSecondEventObject);
213 void passingJsonWithMissingAuthenticationState_validationFails() {
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";
221 String event = String.format(CPE_AUTHENTICATION_EVENT_TEMPLATE_WITH_MISSING_AUTHENTICATION_STATE, sourceName,
222 oldAuthenticationState, stateInterface, rgwMacAddress, swVersion);
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);
230 String eventsArray = "[" + event + "]";
232 StepVerifier.create(consumerJsonParser.extractModelFromDmaap(Mono.just(eventsArray)))
233 .expectSubscription()
238 void passingJsonWithMissingSourceName_validationFails() {
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";
246 String event = String.format(CPE_AUTHENTICATION_EVENT_TEMPLATE_WITH_MISSING_SOURCE_NAME,
247 oldAuthenticationState, newAuthenticationState, stateInterface, rgwMacAddress, swVersion);
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);
255 String eventsArray = "[" + event + "]";
257 StepVerifier.create(consumerJsonParser.extractModelFromDmaap(Mono.just(eventsArray)))
258 .expectSubscription()
263 void passingJsonWithMissingSourceNameValue_validationFails() {
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";
271 String event = String.format(CPE_AUTHENTICATION_EVENT_TEMPLATE_WITH_MISSING_SOURCE_NAME_VALUE,
272 oldAuthenticationState, newAuthenticationState, stateInterface, rgwMacAddress, swVersion);
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);
280 String eventsArray = "[" + event + "]";
282 StepVerifier.create(consumerJsonParser.extractModelFromDmaap(Mono.just(eventsArray)))
283 .expectSubscription()
288 void passingJsonWithMissingStateChangeFieldsHeader_validationFails() {
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";
296 String event = String.format(CPE_AUTHENTICATION_EVENT_TEMPLATE_WITH_MISSING_STATE_CHANGE_FIELDS,
297 oldAuthenticationState, newAuthenticationState, stateInterface, rgwMacAddress, swVersion);
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);
305 String eventsArray = "[" + event + "]";
307 StepVerifier.create(consumerJsonParser.extractModelFromDmaap(Mono.just(eventsArray)))
308 .expectSubscription()