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