9dab7aaadef53190087ae6d28887f2e9f447ed66
[dcaegen2/services/prh.git] /
1 /*
2  * ============LICENSE_START=======================================================
3  * PNF-REGISTRATION-HANDLER
4  * ================================================================================
5  * Copyright (C) 2018 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.dcaegen2.services.prh.service;
22
23 import static org.mockito.Mockito.spy;
24
25 import com.google.gson.JsonElement;
26 import com.google.gson.JsonObject;
27 import com.google.gson.JsonParser;
28 import io.vavr.collection.List;
29 import java.util.Optional;
30 import org.junit.jupiter.api.Assertions;
31 import org.junit.jupiter.api.Test;
32 import org.mockito.Mockito;
33 import org.onap.dcaegen2.services.prh.adapter.aai.api.ConsumerDmaapModel;
34 import org.onap.dcaegen2.services.prh.adapter.aai.api.ImmutableConsumerDmaapModel;
35 import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.model.ImmutableMessageRouterSubscribeResponse;
36 import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.model.MessageRouterSubscribeResponse;
37 import reactor.core.publisher.Mono;
38 import reactor.test.StepVerifier;
39
40 /**
41  * @author <a href="mailto:przemyslaw.wasala@nokia.com">Przemysław Wąsala</a> on 5/8/18
42  */
43 class DmaapConsumerJsonParserTest {
44
45     private JsonParser jsonParser = new JsonParser();
46
47     @Test
48     void whenPassingCorrectJson_validationNotThrowingAnException() {
49         //given
50         String message = "{\"event\": {"
51             + "\"commonEventHeader\": { "
52             + " \"sourceName\":\"NOKQTFCOC540002E\","
53             + " \"nfNamingCode\":\"gNB\" "
54             + "},"
55             + "\"pnfRegistrationFields\": {"
56             + " \"vendorName\": \"nokia\","
57             + " \"serialNumber\": \"QTFCOC540002E\","
58             + " \"pnfRegistrationFieldsVersion\": \"2.0\","
59             + " \"modelNumber\": \"3310\","
60             + " \"unitType\": \"type\",\n"
61             + " \"unitFamily\": \"BBU\","
62             + " \"oamV4IpAddress\": \"10.16.123.234\","
63             + " \"softwareVersion\": \"v4.5.0.1\","
64             + " \"oamV6IpAddress\": \"0:0:0:0:0:FFFF:0A10:7BEA\","
65             + " \"additionalFields\": {\"attachmentPoint\":\"bla-bla-30-3\",\"cvlan\":\"678\",\"svlan\":\"1005\"}"
66             + "}}}";
67
68         String parsed = "{\"event\": {"
69             + "\"commonEventHeader\": { "
70             + " \"sourceName\":\"NOKQTFCOC540002E\","
71             + " \"nfNamingCode\":\"gNB\" "
72             + "},"
73             + "\"pnfRegistrationFields\": {"
74             + " \"vendorName\": \"nokia\","
75             + " \"serialNumber\": \"QTFCOC540002E\","
76             + " \"pnfRegistrationFieldsVersion\": \"2.0\","
77             + " \"modelNumber\": \"3310\","
78             + " \"unitType\": \"type\",\n"
79             + " \"unitFamily\": \"BBU\","
80             + " \"oamV4IpAddress\": \"10.16.123.234\","
81             + " \"softwareVersion\": \"v4.5.0.1\","
82             + " \"oamV6IpAddress\": \"0:0:0:0:0:FFFF:0A10:7BEA\","
83             + " \"additionalFields\": {\"attachmentPoint\":\"bla-bla-30-3\",\"cvlan\":\"678\",\"svlan\":\"1005\"}"
84             + "}}}";
85
86         JsonObject jsonObject = new JsonParser().parse("{\n"
87             + "        \"attachmentPoint\": \"bla-bla-30-3\",\n"
88             + "        \"cvlan\": \"678\",\n"
89             + "        \"svlan\": \"1005\"\n"
90             + "      }").getAsJsonObject();
91
92         ConsumerDmaapModel expectedObject = ImmutableConsumerDmaapModel.builder()
93             .ipv4("10.16.123.234")
94             .ipv6("0:0:0:0:0:FFFF:0A10:7BEA")
95             .correlationId("NOKQTFCOC540002E")
96             .serialNumber("QTFCOC540002E")
97             .equipVendor("nokia")
98             .equipModel("3310")
99             .equipType("type")
100             .nfRole("gNB")
101             .swVersion("v4.5.0.1")
102             .additionalFields(jsonObject)
103             .build();
104
105         List<JsonElement> messageAsJsonElementList = List.of(message).map(jsonParser::parse);
106         MessageRouterSubscribeResponse response = ImmutableMessageRouterSubscribeResponse.builder().items(messageAsJsonElementList).build();
107
108         //when
109         DmaapConsumerJsonParser dmaapConsumerJsonParser = spy(new DmaapConsumerJsonParser());
110         JsonElement jsonElement = jsonParser.parse(parsed);
111         Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject()))
112             .when(dmaapConsumerJsonParser).getJsonObjectFromAnArray(jsonElement);
113
114         ConsumerDmaapModel consumerDmaapModel = dmaapConsumerJsonParser
115             .getJsonObject(Mono.just((response))).blockFirst();
116         //then
117         Assertions.assertNotNull(consumerDmaapModel);
118         Assertions.assertEquals(expectedObject, consumerDmaapModel);
119     }
120
121     @Test
122     void whenPassingJsonWithoutAdditionalFields_validationNotThrowingAnException() {
123         //given
124         String message = "{\"event\": {"
125             + "\"commonEventHeader\": { "
126             + " \"sourceName\":\"NOKQTFCOC540002E\","
127             + " \"nfNamingCode\":\"gNB\" "
128             + "},"
129             + "\"pnfRegistrationFields\": {"
130             + " \"vendorName\": \"nokia\","
131             + " \"serialNumber\": \"QTFCOC540002E\","
132             + " \"pnfRegistrationFieldsVersion\": \"2.0\","
133             + " \"modelNumber\": \"3310\","
134             + " \"unitType\": \"type\",\n"
135             + " \"unitFamily\": \"BBU\","
136             + " \"oamV4IpAddress\": \"10.16.123.234\","
137             + " \"oamV6IpAddress\": \"0:0:0:0:0:FFFF:0A10:7BEA\","
138             + " \"softwareVersion\": \"v4.5.0.1\""
139             + "}}}";
140
141         String parsed = "{\"event\": {"
142             + "\"commonEventHeader\": { "
143             + " \"sourceName\":\"NOKQTFCOC540002E\","
144             + " \"nfNamingCode\":\"gNB\" "
145             + "},"
146             + "\"pnfRegistrationFields\": {"
147             + " \"vendorName\": \"nokia\","
148             + " \"serialNumber\": \"QTFCOC540002E\","
149             + " \"pnfRegistrationFieldsVersion\": \"2.0\","
150             + " \"modelNumber\": \"3310\","
151             + " \"unitType\": \"type\",\n"
152             + " \"unitFamily\": \"BBU\","
153             + " \"oamV4IpAddress\": \"10.16.123.234\","
154             + " \"oamV6IpAddress\": \"0:0:0:0:0:FFFF:0A10:7BEA\","
155             + " \"softwareVersion\": \"v4.5.0.1\""
156             + "}}}";
157
158         ConsumerDmaapModel expectedObject = ImmutableConsumerDmaapModel.builder()
159             .correlationId("NOKQTFCOC540002E")
160             .serialNumber("QTFCOC540002E")
161             .ipv4("10.16.123.234")
162             .ipv6("0:0:0:0:0:FFFF:0A10:7BEA")
163             .equipVendor("nokia")
164             .equipModel("3310")
165             .equipType("type")
166             .nfRole("gNB")
167             .swVersion("v4.5.0.1")
168             .build();
169         List<JsonElement> messageAsJsonElementList = List.of(message).map(jsonParser::parse);
170         MessageRouterSubscribeResponse response = ImmutableMessageRouterSubscribeResponse.builder().items(messageAsJsonElementList).build();
171         //when
172         DmaapConsumerJsonParser dmaapConsumerJsonParser = spy(new DmaapConsumerJsonParser());
173         JsonElement jsonElement = new JsonParser().parse(parsed);
174         Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject()))
175             .when(dmaapConsumerJsonParser).getJsonObjectFromAnArray(jsonElement);
176         ConsumerDmaapModel consumerDmaapModel = dmaapConsumerJsonParser
177             .getJsonObject(Mono.just((response))).blockFirst();
178         //then
179         Assertions.assertNotNull(consumerDmaapModel);
180         Assertions.assertEquals(expectedObject, consumerDmaapModel);
181     }
182
183     @Test
184     void whenPassingJsonWithEmptyAdditionalFields_validationNotThrowingAnException() {
185         //given
186         String message = "{\"event\": {"
187             + "\"commonEventHeader\": { "
188             + " \"sourceName\":\"NOKQTFCOC540002E\","
189             + " \"nfNamingCode\":\"gNB\" "
190             + "},"
191             + "\"pnfRegistrationFields\": {"
192             + " \"vendorName\": \"nokia\","
193             + " \"serialNumber\": \"QTFCOC540002E\","
194             + " \"pnfRegistrationFieldsVersion\": \"2.0\","
195             + " \"modelNumber\": \"3310\","
196             + " \"unitType\": \"type\",\n"
197             + " \"unitFamily\": \"BBU\","
198             + " \"softwareVersion\": \"v4.5.0.1\","
199             + " \"oamV4IpAddress\": \"10.16.123.234\","
200             + " \"oamV6IpAddress\": \"0:0:0:0:0:FFFF:0A10:7BEA\","
201             + " \"additionalFields\": {}"
202             + "}}}";
203
204         String parsed = "{\"event\": {"
205             + "\"commonEventHeader\": { "
206             + " \"sourceName\":\"NOKQTFCOC540002E\","
207             + " \"nfNamingCode\":\"gNB\" "
208             + "},"
209             + "\"pnfRegistrationFields\": {"
210             + " \"vendorName\": \"nokia\","
211             + " \"serialNumber\": \"QTFCOC540002E\","
212             + " \"pnfRegistrationFieldsVersion\": \"2.0\","
213             + " \"modelNumber\": \"3310\","
214             + " \"unitType\": \"type\",\n"
215             + " \"unitFamily\": \"BBU\","
216             + " \"softwareVersion\": \"v4.5.0.1\","
217             + " \"oamV4IpAddress\": \"10.16.123.234\","
218             + " \"oamV6IpAddress\": \"0:0:0:0:0:FFFF:0A10:7BEA\","
219             + " \"additionalFields\": {}"
220             + "}}}";
221
222         ConsumerDmaapModel expectedObject = ImmutableConsumerDmaapModel.builder()
223             .correlationId("NOKQTFCOC540002E")
224             .serialNumber("QTFCOC540002E")
225             .ipv4("10.16.123.234")
226             .ipv6("0:0:0:0:0:FFFF:0A10:7BEA")
227             .equipVendor("nokia")
228             .equipModel("3310")
229             .equipType("type")
230             .nfRole("gNB")
231             .swVersion("v4.5.0.1")
232             .additionalFields(new JsonObject())
233             .build();
234
235         List<JsonElement> messageAsJsonElementList = List.of(message).map(jsonParser::parse);
236         MessageRouterSubscribeResponse response = ImmutableMessageRouterSubscribeResponse.builder().items(messageAsJsonElementList).build();
237
238         //when
239         DmaapConsumerJsonParser dmaapConsumerJsonParser = spy(new DmaapConsumerJsonParser());
240         JsonElement jsonElement = jsonParser.parse(parsed);
241         Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject()))
242             .when(dmaapConsumerJsonParser).getJsonObjectFromAnArray(jsonElement);
243
244         ConsumerDmaapModel consumerDmaapModel = dmaapConsumerJsonParser
245             .getJsonObject(Mono.just((response))).blockFirst();
246         //then
247         Assertions.assertNotNull(consumerDmaapModel);
248         Assertions.assertEquals(expectedObject, consumerDmaapModel);
249     }
250
251     @Test
252     void whenPassingCorrectJsonWithoutIpv4andIpv6_validationNotThrowingAnException() {
253         //given
254         String message = "{\"event\": {"
255             + "\"commonEventHeader\": { "
256             + " \"sourceName\":\"NOKQTFCOC540002E\","
257             + " \"nfNamingCode\":\"gNB\" "
258             + "},"
259             + "\"pnfRegistrationFields\": {"
260             + " \"vendorName\": \"nokia\","
261             + " \"serialNumber\": \"QTFCOC540002E\","
262             + " \"pnfRegistrationFieldsVersion\": \"2.0\","
263             + " \"modelNumber\": \"3310\","
264             + " \"unitType\": \"type\",\n"
265             + " \"unitFamily\": \"BBU\","
266             + " \"softwareVersion\": \"v4.5.0.1\","
267             + " \"additionalFields\": {}"
268             + "}}}";
269
270         String parsed = "{\"event\": {"
271             + "\"commonEventHeader\": { "
272             + " \"sourceName\":\"NOKQTFCOC540002E\","
273             + " \"nfNamingCode\":\"gNB\" "
274             + "},"
275             + "\"pnfRegistrationFields\": {"
276             + " \"vendorName\": \"nokia\","
277             + " \"serialNumber\": \"QTFCOC540002E\","
278             + " \"pnfRegistrationFieldsVersion\": \"2.0\","
279             + " \"modelNumber\": \"3310\","
280             + " \"unitType\": \"type\",\n"
281             + " \"unitFamily\": \"BBU\","
282             + " \"softwareVersion\": \"v4.5.0.1\","
283             + " \"additionalFields\": {}"
284             + "}}}";
285
286         ConsumerDmaapModel expectedObject = ImmutableConsumerDmaapModel.builder()
287             .correlationId("NOKQTFCOC540002E")
288             .serialNumber("QTFCOC540002E")
289             .ipv4("")
290             .ipv6("")
291             .equipVendor("nokia")
292             .equipModel("3310")
293             .equipType("type")
294             .nfRole("gNB")
295             .swVersion("v4.5.0.1")
296             .additionalFields(new JsonObject())
297             .build();
298
299         List<JsonElement> messageAsJsonElementList = List.of(message).map(jsonParser::parse);
300         MessageRouterSubscribeResponse response = ImmutableMessageRouterSubscribeResponse.builder().items(messageAsJsonElementList).build();
301
302         //when
303         DmaapConsumerJsonParser dmaapConsumerJsonParser = spy(new DmaapConsumerJsonParser());
304         JsonElement jsonElement = jsonParser.parse(parsed);
305         Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject()))
306             .when(dmaapConsumerJsonParser).getJsonObjectFromAnArray(jsonElement);
307
308         ConsumerDmaapModel consumerDmaapModel = dmaapConsumerJsonParser
309             .getJsonObject(Mono.just((response))).blockFirst();
310         //then
311         Assertions.assertNotNull(consumerDmaapModel);
312         Assertions.assertEquals(expectedObject, consumerDmaapModel);
313     }
314
315
316     @Test
317     void whenPassingJsonWithoutMandatoryHeaderInformation_validationAddingAnException() {
318         String parsed = "{\"event\": {"
319             + "\"commonEventHeader\": {},"
320             + "\"pnfRegistrationFields\": {"
321             + " \"unitType\": \"AirScale\","
322             + " \"serialNumber\": \"QTFCOC540002E\","
323             + " \"pnfRegistrationFieldsVersion\": \"2.0\","
324             + " \"manufactureDate\": \"1535014037024\","
325             + " \"modelNumber\": \"7BEA\",\n"
326             + " \"lastServiceDate\": \"1535014037024\","
327             + " \"unitFamily\": \"BBU\","
328             + " \"vendorName\": \"Nokia\","
329             + " \"softwareVersion\": \"v4.5.0.1\","
330             + " \"oamV4IpAddress\": \"10.16.123.234\","
331             + " \"oamV6IpAddress\": \"0:0:0:0:0:FFFF:0A10:7BEA\","
332             + " \"additionalFields\": {}"
333             + "}}}";
334
335         DmaapConsumerJsonParser dmaapConsumerJsonParser = spy(new DmaapConsumerJsonParser());
336         JsonElement jsonElement = jsonParser.parse(parsed);
337         Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject()))
338             .when(dmaapConsumerJsonParser).getJsonObjectFromAnArray(jsonElement);
339         String incorrectMessage = "{\"event\": {"
340             + "\"commonEventHeader\": {},"
341             + "\"pnfRegistrationFields\": {"
342             + " \"unitType\": \"AirScale\","
343             + " \"serialNumber\": \"QTFCOC540002E\","
344             + " \"pnfRegistrationFieldsVersion\": \"2.0\","
345             + " \"manufactureDate\": \"1535014037024\","
346             + " \"modelNumber\": \"7BEA\",\n"
347             + " \"lastServiceDate\": \"1535014037024\","
348             + " \"unitFamily\": \"BBU\","
349             + " \"vendorName\": \"Nokia\","
350             + " \"softwareVersion\": \"v4.5.0.1\","
351             + " \"oamV4IpAddress\": \"10.16.123.234\","
352             + " \"oamV6IpAddress\": \"0:0:0:0:0:FFFF:0A10:7BEA\","
353             + " \"additionalFields\": {}"
354             + "}}}";
355
356         List<JsonElement> incorrectMessageAsJsonElementList = List.of(incorrectMessage).map(jsonParser::parse);
357         MessageRouterSubscribeResponse response = ImmutableMessageRouterSubscribeResponse.builder().items(incorrectMessageAsJsonElementList).build();
358
359         StepVerifier.create(dmaapConsumerJsonParser.getJsonObject(Mono.just(response)))
360             .expectSubscription().thenRequest(1).verifyComplete();
361     }
362
363     @Test
364     void whenPassingJsonWithoutSourceName_validationAddingAnException() {
365         String parsed = "{\"event\": {"
366             + "\"commonEventHeader\": {},"
367             + "\"pnfRegistrationFields\": {"
368             + " \"unitType\": \"AirScale\","
369             + " \"serialNumber\": \"QTFCOC540002E\","
370             + " \"pnfRegistrationFieldsVersion\": \"2.0\","
371             + " \"manufactureDate\": \"1535014037024\","
372             + " \"modelNumber\": \"7BEA\",\n"
373             + " \"lastServiceDate\": \"1535014037024\","
374             + " \"unitFamily\": \"BBU\","
375             + " \"vendorName\": \"Nokia\","
376             + " \"softwareVersion\": \"v4.5.0.1\","
377             + " \"oamV6IpAddress\": \"0:0:0:0:0:FFFF:0A10:7BEA\","
378             + " \"additionalFields\": {}"
379             + "}}}";
380
381         DmaapConsumerJsonParser dmaapConsumerJsonParser = spy(new DmaapConsumerJsonParser());
382         JsonElement jsonElement = jsonParser.parse(parsed);
383         Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject()))
384             .when(dmaapConsumerJsonParser).getJsonObjectFromAnArray(jsonElement);
385         String jsonWithoutSourceName =
386             "{\"event\": {"
387                 + "\"commonEventHeader\": {},"
388                 + "\"pnfRegistrationFields\": {"
389                 + " \"unitType\": \"AirScale\","
390                 + " \"serialNumber\": \"QTFCOC540002E\","
391                 + " \"pnfRegistrationFieldsVersion\": \"2.0\","
392                 + " \"manufactureDate\": \"1535014037024\","
393                 + " \"modelNumber\": \"7BEA\",\n"
394                 + " \"lastServiceDate\": \"1535014037024\","
395                 + " \"unitFamily\": \"BBU\","
396                 + " \"vendorName\": \"Nokia\","
397                 + " \"softwareVersion\": \"v4.5.0.1\","
398                 + " \"oamV6IpAddress\": \"0:0:0:0:0:FFFF:0A10:7BEA\","
399                 + " \"additionalFields\": {}"
400                 + "}}}";
401
402         List<JsonElement> jsonWithoutSourceNameAsJsonElementList = List.of(jsonWithoutSourceName).map(jsonParser::parse);
403         MessageRouterSubscribeResponse response = ImmutableMessageRouterSubscribeResponse.builder().items(jsonWithoutSourceNameAsJsonElementList).build();
404         StepVerifier
405             .create(dmaapConsumerJsonParser.getJsonObject(Mono.just(response)))
406             .expectSubscription().thenRequest(1)
407             .verifyComplete();
408
409     }
410
411     @Test
412     void whenPassingJsonWithoutSourceNameValue_validationAddingAnException() {
413         String parsed =
414             "{\"event\": {"
415                 + "\"commonEventHeader\": {\"sourceName\": \"\"},"
416                 + "\"pnfRegistrationFields\": {"
417                 + " \"unitType\": \"AirScale\","
418                 + " \"serialNumber\": \"QTFCOC540002E\","
419                 + " \"pnfRegistrationFieldsVersion\": \"2.0\","
420                 + " \"manufactureDate\": \"1535014037024\","
421                 + " \"modelNumber\": \"7BEA\",\n"
422                 + " \"lastServiceDate\": \"1535014037024\","
423                 + " \"unitFamily\": \"BBU\","
424                 + " \"vendorName\": \"Nokia\","
425                 + " \"softwareVersion\": \"v4.5.0.1\","
426                 + " \"oamV4IpAddress\": \"10.16.123.234\","
427                 + " \"oamV6IpAddress\": \"0:0:0:0:0:FFFF:0A10:7BEA\","
428                 + " \"additionalFields\": {}"
429                 + "}}}";
430
431         DmaapConsumerJsonParser dmaapConsumerJsonParser = spy(new DmaapConsumerJsonParser());
432         JsonElement jsonElement = jsonParser.parse(parsed);
433         Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject()))
434             .when(dmaapConsumerJsonParser).getJsonObjectFromAnArray(jsonElement);
435         String jsonWithoutIpInformation =
436             "{\"event\": {"
437                 + "\"commonEventHeader\": {\"sourceName\": \"\"},"
438                 + "\"pnfRegistrationFields\": {"
439                 + " \"unitType\": \"AirScale\","
440                 + " \"serialNumber\": \"QTFCOC540002E\","
441                 + " \"pnfRegistrationFieldsVersion\": \"2.0\","
442                 + " \"manufactureDate\": \"1535014037024\","
443                 + " \"modelNumber\": \"7BEA\",\n"
444                 + " \"lastServiceDate\": \"1535014037024\","
445                 + " \"unitFamily\": \"BBU\","
446                 + " \"vendorName\": \"Nokia\","
447                 + " \"softwareVersion\": \"v4.5.0.1\","
448                 + " \"oamV4IpAddress\": \"10.16.123.234\","
449                 + " \"oamV6IpAddress\": \"0:0:0:0:0:FFFF:0A10:7BEA\","
450                 + " \"additionalFields\": {}"
451                 + "}}}";
452
453         List<JsonElement> jsonWithoutIpInformationAsJsonElementList = List.of(jsonWithoutIpInformation).map(jsonParser::parse);
454         MessageRouterSubscribeResponse response = ImmutableMessageRouterSubscribeResponse.builder().items(jsonWithoutIpInformationAsJsonElementList).build();
455
456         StepVerifier.create(dmaapConsumerJsonParser.getJsonObject(Mono.just(response)))
457             .expectSubscription().thenRequest(1).verifyComplete();
458     }
459
460     @Test
461     void whenPassingCorrectJsonWithoutIpv4_validationNotThrowingAnException() {
462         //given
463         String message = "{\"event\": {"
464             + "\"commonEventHeader\": { "
465             + " \"sourceName\":\"NOKQTFCOC540002E\","
466             + " \"nfNamingCode\":\"gNB\" "
467             + "},"
468             + "\"pnfRegistrationFields\": {"
469             + " \"vendorName\": \"nokia\","
470             + " \"serialNumber\": \"QTFCOC540002E\","
471             + " \"pnfRegistrationFieldsVersion\": \"2.0\","
472             + " \"modelNumber\": \"3310\","
473             + " \"unitType\": \"type\",\n"
474             + " \"unitFamily\": \"BBU\","
475             + " \"softwareVersion\": \"v4.5.0.1\","
476             + " \"oamV6IpAddress\": \"0:0:0:0:0:FFFF:0A10:7BEA\""
477             + "}}}";
478
479         String parsed = "{\"event\": {"
480             + "\"commonEventHeader\": { "
481             + " \"sourceName\":\"NOKQTFCOC540002E\","
482             + " \"nfNamingCode\":\"gNB\" "
483             + "},"
484             + "\"pnfRegistrationFields\": {"
485             + " \"vendorName\": \"nokia\","
486             + " \"serialNumber\": \"QTFCOC540002E\","
487             + " \"pnfRegistrationFieldsVersion\": \"2.0\","
488             + " \"modelNumber\": \"3310\","
489             + " \"unitType\": \"type\",\n"
490             + " \"unitFamily\": \"BBU\","
491             + " \"softwareVersion\": \"v4.5.0.1\","
492             + " \"oamV6IpAddress\": \"0:0:0:0:0:FFFF:0A10:7BEA\""
493             + "}}}";
494
495         List<JsonElement> messageAsJsonElementList = List.of(message).map(jsonParser::parse);
496         MessageRouterSubscribeResponse response = ImmutableMessageRouterSubscribeResponse.builder().items(messageAsJsonElementList).build();
497         //when
498         DmaapConsumerJsonParser dmaapConsumerJsonParser = spy(new DmaapConsumerJsonParser());
499         JsonElement jsonElement = jsonParser.parse(parsed);
500         Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject()))
501             .when(dmaapConsumerJsonParser).getJsonObjectFromAnArray(jsonElement);
502
503         dmaapConsumerJsonParser.getJsonObject(Mono.just((response)));
504         ConsumerDmaapModel consumerDmaapModel = dmaapConsumerJsonParser.getJsonObject(Mono.just(response))
505             .blockFirst();
506         //then
507         ConsumerDmaapModel expectedObject = ImmutableConsumerDmaapModel.builder()
508             .ipv4("")
509             .ipv6("0:0:0:0:0:FFFF:0A10:7BEA")
510             .correlationId("NOKQTFCOC540002E")
511             .serialNumber("QTFCOC540002E")
512             .equipVendor("nokia")
513             .equipModel("3310")
514             .equipType("type")
515             .nfRole("gNB")
516             .swVersion("v4.5.0.1")
517             .build();
518         Assertions.assertNotNull(consumerDmaapModel);
519         Assertions.assertEquals(expectedObject, consumerDmaapModel);
520
521     }
522
523     @Test
524     void whenPassingCorrectJsonWithoutIpv6_validationNotThrowingAnException() {
525         //given
526         String message = "{\"event\": {"
527             + "\"commonEventHeader\": { "
528             + " \"sourceName\":\"NOKQTFCOC540002E\","
529             + " \"nfNamingCode\":\"gNB\" "
530             + "},"
531             + "\"pnfRegistrationFields\": {"
532             + " \"vendorName\": \"nokia\","
533             + " \"serialNumber\": \"QTFCOC540002E\","
534             + " \"pnfRegistrationFieldsVersion\": \"2.0\","
535             + " \"modelNumber\": \"3310\","
536             + " \"unitType\": \"type\",\n"
537             + " \"unitFamily\": \"BBU\","
538             + " \"oamV4IpAddress\": \"10.16.123.234\","
539             + " \"softwareVersion\": \"v4.5.0.1\""
540             + "}}}";
541
542         String parsed = "{\"event\": {"
543             + "\"commonEventHeader\": { "
544             + " \"sourceName\":\"NOKQTFCOC540002E\","
545             + " \"nfNamingCode\":\"gNB\" "
546             + "},"
547             + "\"pnfRegistrationFields\": {"
548             + " \"vendorName\": \"nokia\","
549             + " \"serialNumber\": \"QTFCOC540002E\","
550             + " \"pnfRegistrationFieldsVersion\": \"2.0\","
551             + " \"modelNumber\": \"3310\","
552             + " \"unitType\": \"type\",\n"
553             + " \"unitFamily\": \"BBU\","
554             + " \"oamV4IpAddress\": \"10.16.123.234\","
555             + " \"softwareVersion\": \"v4.5.0.1\""
556             + "}}}";
557
558         ConsumerDmaapModel expectedObject = ImmutableConsumerDmaapModel.builder()
559             .ipv4("10.16.123.234")
560             .ipv6("")
561             .correlationId("NOKQTFCOC540002E")
562             .serialNumber("QTFCOC540002E")
563             .equipVendor("nokia")
564             .equipModel("3310")
565             .equipType("type")
566             .nfRole("gNB")
567             .swVersion("v4.5.0.1")
568             .build();
569
570         List<JsonElement> messageAsJsonElementList = List.of(message).map(jsonParser::parse);
571         MessageRouterSubscribeResponse response = ImmutableMessageRouterSubscribeResponse.builder().items(messageAsJsonElementList).build();
572
573         //when
574         DmaapConsumerJsonParser dmaapConsumerJsonParser = spy(new DmaapConsumerJsonParser());
575         JsonElement jsonElement = jsonParser.parse(parsed);
576         Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject()))
577             .when(dmaapConsumerJsonParser).getJsonObjectFromAnArray(jsonElement);
578         ConsumerDmaapModel consumerDmaapModel = dmaapConsumerJsonParser.getJsonObject(Mono.just(response))
579             .blockFirst();
580
581         //then
582         Assertions.assertNotNull(consumerDmaapModel);
583         Assertions.assertEquals(expectedObject, consumerDmaapModel);
584
585     }
586
587     @Test
588     void whenPassingCorrectJsonArrayWithoutIpv4_validationNotThrowingAnException() {
589         //given
590         String message = "[{\"event\": {"
591             + "\"commonEventHeader\": { "
592             + "  \"sourceName\":\"NOKQTFCOC540002E\","
593             + "  \"nfNamingCode\":\"gNB\" "
594             + "  },"
595             + "\"pnfRegistrationFields\": {"
596             + " \"vendorName\": \"nokia\","
597             + " \"serialNumber\": \"QTFCOC540002E\","
598             + " \"pnfRegistrationFieldsVersion\": \"2.0\","
599             + " \"modelNumber\": \"3310\","
600             + " \"unitType\": \"type\",\n"
601             + " \"unitFamily\": \"BBU\","
602             + " \"softwareVersion\": \"v4.5.0.1\","
603             + " \"oamV6IpAddress\": \"0:0:0:0:0:FFFF:0A10:7BEA\","
604             + " \"additionalFields\": {}"
605             + "}}},"
606             + " {\"event\": {"
607             + "\"commonEventHeader\": { "
608             + " \"sourceName\":\"NOKQTFCOC540002E\","
609             + " \"nfNamingCode\":\"gNB\" "
610             + "},"
611             + "\"pnfRegistrationFields\": {"
612             + " \"vendorName\": \"nokia\","
613             + " \"serialNumber\": \"QTFCOC540002E\","
614             + " \"pnfRegistrationFieldsVersion\": \"2.0\","
615             + " \"modelNumber\": \"3310\","
616             + " \"unitType\": \"type\",\n"
617             + " \"unitFamily\": \"BBU\","
618             + " \"softwareVersion\": \"v4.5.0.1\","
619             + " \"oamV6IpAddress\": \"0:0:0:0:0:FFFF:0A10:7BEA\","
620             + " \"additionalFields\": {}"
621             + "}}}]";
622
623         ConsumerDmaapModel expectedObject = ImmutableConsumerDmaapModel.builder()
624             .ipv4("")
625             .ipv6("0:0:0:0:0:FFFF:0A10:7BEA")
626             .correlationId("NOKQTFCOC540002E")
627             .serialNumber("QTFCOC540002E")
628             .equipVendor("nokia")
629             .equipModel("3310")
630             .equipType("type")
631             .nfRole("gNB")
632             .swVersion("v4.5.0.1")
633             .additionalFields(new JsonObject())
634             .build();
635
636         List<JsonElement> messageAsJsonElementList = List.empty();
637         for(JsonElement el : jsonParser.parse(message).getAsJsonArray()) {
638             messageAsJsonElementList = messageAsJsonElementList.append(el);
639         }
640
641         MessageRouterSubscribeResponse response = ImmutableMessageRouterSubscribeResponse.builder().items(messageAsJsonElementList).build();
642
643         //when
644         DmaapConsumerJsonParser dmaapConsumerJsonParser = new DmaapConsumerJsonParser();
645
646         //then
647         StepVerifier.create(dmaapConsumerJsonParser.getJsonObject(Mono.just(response))).expectSubscription().expectNext(expectedObject).expectNext(expectedObject).verifyComplete();
648     }
649 }