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