f7b83297278fe5ac09430b8d7081f3db50649bbd
[dcaegen2/collectors/datafile.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  * Copyright (C) 2018 NOKIA Intellectual Property, 2018-2019 Nordix Foundation. All rights reserved.
4  * ================================================================================
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  * ============LICENSE_END=========================================================
17  */
18
19 package org.onap.dcaegen2.collectors.datafile.service;
20
21 import static org.mockito.Mockito.spy;
22
23 import com.google.gson.JsonElement;
24 import com.google.gson.JsonParser;
25
26 import java.util.ArrayList;
27 import java.util.List;
28 import java.util.Optional;
29
30 import org.junit.jupiter.api.Test;
31 import org.mockito.Mockito;
32 import org.onap.dcaegen2.collectors.datafile.exceptions.DmaapNotFoundException;
33 import org.onap.dcaegen2.collectors.datafile.ftp.Scheme;
34 import org.onap.dcaegen2.collectors.datafile.model.FileData;
35 import org.onap.dcaegen2.collectors.datafile.model.FileReadyMessage;
36 import org.onap.dcaegen2.collectors.datafile.model.ImmutableFileData;
37 import org.onap.dcaegen2.collectors.datafile.model.ImmutableFileReadyMessage;
38 import org.onap.dcaegen2.collectors.datafile.model.ImmutableMessageMetaData;
39 import org.onap.dcaegen2.collectors.datafile.model.MessageMetaData;
40 import org.onap.dcaegen2.collectors.datafile.utils.JsonMessage;
41 import org.onap.dcaegen2.collectors.datafile.utils.JsonMessage.AdditionalField;
42
43 import reactor.core.publisher.Mono;
44 import reactor.test.StepVerifier;
45
46 /**
47  * @author <a href="mailto:przemyslaw.wasala@nokia.com">Przemysław Wąsala</a> on 5/8/18
48  * @author <a href="mailto:henrik.b.andersson@est.tech">Henrik Andersson</a>
49  */
50 class JsonMessageParserTest {
51     private static final String NR_RADIO_ERICSSON_EVENT_NAME = "Noti_NrRadio-Ericsson_FileReady";
52     private static final String PRODUCT_NAME = "NrRadio";
53     private static final String VENDOR_NAME = "Ericsson";
54     private static final String LAST_EPOCH_MICROSEC = "1519837825682";
55     private static final String SOURCE_NAME = "5GRAN_DU";
56     private static final String START_EPOCH_MICROSEC = "1519837825682";
57     private static final String TIME_ZONE_OFFSET = "UTC+05:00";
58     private static final String PM_FILE_NAME = "A20161224.1030-1045.bin.gz";
59     private static final String LOCATION = "ftpes://192.168.0.101:22/ftp/rop/" + PM_FILE_NAME;
60     private static final String GZIP_COMPRESSION = "gzip";
61     private static final String FILE_FORMAT_TYPE = "org.3GPP.32.435#measCollec";
62     private static final String FILE_FORMAT_VERSION = "V10";
63     private static final String CHANGE_IDENTIFIER = "PM_MEAS_FILES";
64     private static final String INCORRECT_CHANGE_IDENTIFIER = "INCORRECT_PM_MEAS_FILES";
65     private static final String CHANGE_TYPE = "FileReady";
66     private static final String INCORRECT_CHANGE_TYPE = "IncorrectFileReady";
67     private static final String NOTIFICATION_FIELDS_VERSION = "1.0";
68
69     @Test
70     void whenPassingCorrectJson_oneFileReadyMessage() throws DmaapNotFoundException {
71         // @formatter:off
72         AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder()
73                 .name(PM_FILE_NAME)
74                 .location(LOCATION)
75                 .compression(GZIP_COMPRESSION)
76                 .fileFormatType(FILE_FORMAT_TYPE)
77                 .fileFormatVersion(FILE_FORMAT_VERSION)
78                 .build();
79         JsonMessage message = new JsonMessage.JsonMessageBuilder()
80                 .eventName(NR_RADIO_ERICSSON_EVENT_NAME)
81                 .changeIdentifier(CHANGE_IDENTIFIER)
82                 .changeType(CHANGE_TYPE)
83                 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION)
84                 .addAdditionalField(additionalField)
85                 .build();
86
87         MessageMetaData messageMetaData = ImmutableMessageMetaData.builder()
88                 .productName(PRODUCT_NAME)
89                 .vendorName(VENDOR_NAME)
90                 .lastEpochMicrosec(LAST_EPOCH_MICROSEC)
91                 .sourceName(SOURCE_NAME)
92                 .startEpochMicrosec(START_EPOCH_MICROSEC)
93                 .timeZoneOffset(TIME_ZONE_OFFSET)
94                 .changeIdentifier(CHANGE_IDENTIFIER)
95                 .changeType(CHANGE_TYPE)
96                 .build();
97         FileData expectedFileData = ImmutableFileData.builder()
98                 .name(PM_FILE_NAME)
99                 .location(LOCATION)
100                 .scheme(Scheme.FTPS)
101                 .compression(GZIP_COMPRESSION)
102                 .fileFormatType(FILE_FORMAT_TYPE)
103                 .fileFormatVersion(FILE_FORMAT_VERSION)
104                 .build();
105         List<FileData> files = new ArrayList<>();
106         files.add(expectedFileData);
107         FileReadyMessage expectedMessage = ImmutableFileReadyMessage.builder()
108                 .pnfName(SOURCE_NAME)
109                 .messageMetaData(messageMetaData)
110                 .files(files)
111                 .build();
112         // @formatter:on
113         String messageString = message.toString();
114         String parsedString = message.getParsed();
115         JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
116         JsonElement jsonElement = new JsonParser().parse(parsedString);
117         Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
118                 .getJsonObjectFromAnArray(jsonElement);
119
120         StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(messageString)))
121                 .expectSubscription().expectNext(expectedMessage).verifyComplete();
122     }
123
124     @Test
125     void whenPassingCorrectJsonWithTwoEvents_twoMessages() throws DmaapNotFoundException {
126         // @formatter:off
127         AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder()
128                 .name(PM_FILE_NAME)
129                 .location(LOCATION)
130                 .compression(GZIP_COMPRESSION)
131                 .fileFormatType(FILE_FORMAT_TYPE)
132                 .fileFormatVersion(FILE_FORMAT_VERSION)
133                 .build();
134         JsonMessage message = new JsonMessage.JsonMessageBuilder()
135                 .eventName(NR_RADIO_ERICSSON_EVENT_NAME)
136                 .changeIdentifier(CHANGE_IDENTIFIER)
137                 .changeType(CHANGE_TYPE)
138                 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION)
139                 .addAdditionalField(additionalField)
140                 .build();
141
142         MessageMetaData messageMetaData = ImmutableMessageMetaData.builder()
143                 .productName(PRODUCT_NAME)
144                 .vendorName(VENDOR_NAME)
145                 .lastEpochMicrosec(LAST_EPOCH_MICROSEC)
146                 .sourceName(SOURCE_NAME)
147                 .startEpochMicrosec(START_EPOCH_MICROSEC)
148                 .timeZoneOffset(TIME_ZONE_OFFSET)
149                 .changeIdentifier(CHANGE_IDENTIFIER)
150                 .changeType(CHANGE_TYPE)
151                 .build();
152         FileData expectedFileData = ImmutableFileData.builder()
153                 .name(PM_FILE_NAME)
154                 .location(LOCATION)
155                 .scheme(Scheme.FTPS)
156                 .compression(GZIP_COMPRESSION)
157                 .fileFormatType(FILE_FORMAT_TYPE)
158                 .fileFormatVersion(FILE_FORMAT_VERSION)
159                 .build();
160         List<FileData> files = new ArrayList<>();
161         files.add(expectedFileData);
162         FileReadyMessage expectedMessage = ImmutableFileReadyMessage.builder()
163                 .pnfName(SOURCE_NAME)
164                 .messageMetaData(messageMetaData)
165                 .files(files)
166                 .build();
167         // @formatter:on
168         String parsedString = message.getParsed();
169         String messageString = "[" + parsedString + "," + parsedString + "]";
170         JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
171         JsonElement jsonElement = new JsonParser().parse(parsedString);
172         Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
173                 .getJsonObjectFromAnArray(jsonElement);
174
175         StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(messageString)))
176                 .expectSubscription().expectNext(expectedMessage).expectNext(expectedMessage).verifyComplete();
177     }
178
179     @Test
180     void whenPassingCorrectJsonWithoutLocation_noMessage() {
181         // @formatter:off
182         AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder()
183                 .name(PM_FILE_NAME)
184                 .compression(GZIP_COMPRESSION)
185                 .fileFormatType(FILE_FORMAT_TYPE)
186                 .fileFormatVersion(FILE_FORMAT_VERSION)
187                 .build();
188         JsonMessage message = new JsonMessage.JsonMessageBuilder()
189                 .eventName(NR_RADIO_ERICSSON_EVENT_NAME)
190                 .changeIdentifier(CHANGE_IDENTIFIER)
191                 .changeType(CHANGE_TYPE)
192                 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION)
193                 .addAdditionalField(additionalField)
194                 .build();
195         // @formatter:on
196         String messageString = message.toString();
197         String parsedString = message.getParsed();
198         JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
199         JsonElement jsonElement = new JsonParser().parse(parsedString);
200         Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
201                 .getJsonObjectFromAnArray(jsonElement);
202
203         StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(messageString)))
204                 .expectSubscription().expectNextCount(0).verifyComplete();
205     }
206
207     @Test
208     void whenPassingCorrectJsonWithTwoEventsFirstNoHeader_oneFileDatan() throws DmaapNotFoundException {
209         // @formatter:off
210         AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder()
211                 .name(PM_FILE_NAME)
212                 .location(LOCATION)
213                 .compression(GZIP_COMPRESSION)
214                 .fileFormatType(FILE_FORMAT_TYPE)
215                 .fileFormatVersion(FILE_FORMAT_VERSION)
216                 .build();
217         JsonMessage message = new JsonMessage.JsonMessageBuilder()
218                 .eventName(NR_RADIO_ERICSSON_EVENT_NAME)
219                 .changeIdentifier(CHANGE_IDENTIFIER)
220                 .changeType(CHANGE_TYPE)
221                 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION)
222                 .addAdditionalField(additionalField)
223                 .build();
224
225         MessageMetaData messageMetaData = ImmutableMessageMetaData.builder()
226                 .productName(PRODUCT_NAME)
227                 .vendorName(VENDOR_NAME)
228                 .lastEpochMicrosec(LAST_EPOCH_MICROSEC)
229                 .sourceName(SOURCE_NAME)
230                 .startEpochMicrosec(START_EPOCH_MICROSEC)
231                 .timeZoneOffset(TIME_ZONE_OFFSET)
232                 .changeIdentifier(CHANGE_IDENTIFIER)
233                 .changeType(CHANGE_TYPE)
234                 .build();
235         FileData expectedFileData = ImmutableFileData.builder()
236                 .name(PM_FILE_NAME)
237                 .location(LOCATION)
238                 .scheme(Scheme.FTPS)
239                 .compression(GZIP_COMPRESSION)
240                 .fileFormatType(FILE_FORMAT_TYPE)
241                 .fileFormatVersion(FILE_FORMAT_VERSION)
242                 .build();
243         List<FileData> files = new ArrayList<>();
244         files.add(expectedFileData);
245         FileReadyMessage expectedMessage = ImmutableFileReadyMessage.builder()
246                 .pnfName(SOURCE_NAME)
247                 .messageMetaData(messageMetaData)
248                 .files(files)
249                 .build();
250         // @formatter:on
251         String parsedString = message.getParsed();
252         String messageString = "[{\"event\":{}}," + parsedString + "]";
253         JsonMessageParser jsonMessageParserUnderTest = new JsonMessageParser();
254
255         StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(messageString)))
256                 .expectSubscription().expectNext(expectedMessage).verifyComplete();
257     }
258
259     @Test
260     void whenPassingCorrectJsonWithFaultyEventName_noFileData() {
261         // @formatter:off
262         AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder()
263                 .location(LOCATION)
264                 .compression(GZIP_COMPRESSION)
265                 .fileFormatType(FILE_FORMAT_TYPE)
266                 .fileFormatVersion(FILE_FORMAT_VERSION)
267                 .build();
268         JsonMessage message = new JsonMessage.JsonMessageBuilder()
269                 .eventName("Faulty event name")
270                 .changeIdentifier(CHANGE_IDENTIFIER)
271                 .changeType(CHANGE_TYPE)
272                 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION)
273                 .addAdditionalField(additionalField)
274                 .build();
275         // @formatter:on
276         String messageString = message.toString();
277         String parsedString = message.getParsed();
278         JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
279         JsonElement jsonElement = new JsonParser().parse(parsedString);
280         Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
281                 .getJsonObjectFromAnArray(jsonElement);
282
283         StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(messageString)))
284                 .expectSubscription().expectComplete().verify();
285     }
286
287     @Test
288     void whenPassingCorrectJsonWithoutName_noFileData() {
289         // @formatter:off
290         AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder()
291                 .location(LOCATION)
292                 .compression(GZIP_COMPRESSION)
293                 .fileFormatType(FILE_FORMAT_TYPE)
294                 .fileFormatVersion(FILE_FORMAT_VERSION)
295                 .build();
296         JsonMessage message = new JsonMessage.JsonMessageBuilder()
297                 .eventName(NR_RADIO_ERICSSON_EVENT_NAME)
298                 .changeIdentifier(CHANGE_IDENTIFIER)
299                 .changeType(CHANGE_TYPE)
300                 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION)
301                 .addAdditionalField(additionalField)
302                 .build();
303         // @formatter:on
304         String messageString = message.toString();
305         String parsedString = message.getParsed();
306         JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
307         JsonElement jsonElement = new JsonParser().parse(parsedString);
308         Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
309                 .getJsonObjectFromAnArray(jsonElement);
310
311         StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(messageString)))
312                 .expectSubscription().expectNextCount(0).verifyComplete();
313     }
314
315     @Test
316     void whenPassingCorrectJsonWithoutAdditionalFields_noFileData() {
317         // @formatter:off
318         JsonMessage message = new JsonMessage.JsonMessageBuilder()
319                 .eventName(NR_RADIO_ERICSSON_EVENT_NAME)
320                 .changeIdentifier(CHANGE_IDENTIFIER)
321                 .changeType(CHANGE_TYPE)
322                 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION)
323                 .build();
324         // @formatter:on
325         String messageString = message.toString();
326         String parsedString = message.getParsed();
327         JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
328         JsonElement jsonElement = new JsonParser().parse(parsedString);
329         Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
330                 .getJsonObjectFromAnArray(jsonElement);
331
332         StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(messageString)))
333                 .expectSubscription().expectNextCount(0).verifyComplete();
334     }
335
336     @Test
337     void whenPassingCorrectJsonWithoutCompression_noFileData() {
338         // @formatter:off
339         AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder()
340                 .name(PM_FILE_NAME)
341                 .location(LOCATION)
342                 .fileFormatType(FILE_FORMAT_TYPE)
343                 .fileFormatVersion(FILE_FORMAT_VERSION)
344                 .build();
345         JsonMessage message = new JsonMessage.JsonMessageBuilder()
346                 .eventName(NR_RADIO_ERICSSON_EVENT_NAME)
347                 .changeIdentifier(CHANGE_IDENTIFIER)
348                 .changeType(CHANGE_TYPE)
349                 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION)
350                 .addAdditionalField(additionalField)
351                 .build();
352         // @formatter:on
353         String messageString = message.toString();
354         String parsedString = message.getParsed();
355         JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
356         JsonElement jsonElement = new JsonParser().parse(parsedString);
357         Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
358                 .getJsonObjectFromAnArray(jsonElement);
359
360         StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(messageString)))
361                 .expectSubscription().expectNextCount(0).verifyComplete();
362     }
363
364     @Test
365     void whenPassingCorrectJsonWithoutFileFormatType_noFileData() {
366         // @formatter:off
367         AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder()
368                 .name(PM_FILE_NAME)
369                 .location(LOCATION)
370                 .compression(GZIP_COMPRESSION)
371                 .fileFormatVersion(FILE_FORMAT_VERSION)
372                 .build();
373         JsonMessage message = new JsonMessage.JsonMessageBuilder()
374                 .eventName(NR_RADIO_ERICSSON_EVENT_NAME)
375                 .changeIdentifier(CHANGE_IDENTIFIER)
376                 .changeType(CHANGE_TYPE)
377                 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION)
378                 .addAdditionalField(additionalField)
379                 .build();
380         // @formatter:on
381         String messageString = message.toString();
382         String parsedString = message.getParsed();
383         JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
384         JsonElement jsonElement = new JsonParser().parse(parsedString);
385         Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
386                 .getJsonObjectFromAnArray(jsonElement);
387
388         StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(messageString)))
389                 .expectSubscription().expectNextCount(0).verifyComplete();
390     }
391
392     @Test
393     void whenPassingOneCorrectJsonWithoutFileFormatVersionAndOneCorrect_oneFileData() {
394         // @formatter:off
395         AdditionalField additionalFaultyField = new JsonMessage.AdditionalFieldBuilder()
396                 .name(PM_FILE_NAME)
397                 .location(LOCATION)
398                 .compression(GZIP_COMPRESSION)
399                 .fileFormatType(FILE_FORMAT_TYPE)
400                 .build();
401         AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder()
402                 .name(PM_FILE_NAME)
403                 .location(LOCATION)
404                 .compression(GZIP_COMPRESSION)
405                 .fileFormatType(FILE_FORMAT_TYPE)
406                 .fileFormatVersion(FILE_FORMAT_VERSION)
407                 .build();
408         JsonMessage message = new JsonMessage.JsonMessageBuilder()
409                 .eventName(NR_RADIO_ERICSSON_EVENT_NAME)
410                 .changeIdentifier(CHANGE_IDENTIFIER)
411                 .changeType(CHANGE_TYPE)
412                 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION)
413                 .addAdditionalField(additionalFaultyField)
414                 .addAdditionalField(additionalField)
415                 .build();
416
417         MessageMetaData messageMetaData = ImmutableMessageMetaData.builder()
418                 .productName(PRODUCT_NAME)
419                 .vendorName(VENDOR_NAME)
420                 .lastEpochMicrosec(LAST_EPOCH_MICROSEC)
421                 .sourceName(SOURCE_NAME)
422                 .startEpochMicrosec(START_EPOCH_MICROSEC)
423                 .timeZoneOffset(TIME_ZONE_OFFSET)
424                 .changeIdentifier(CHANGE_IDENTIFIER)
425                 .changeType(CHANGE_TYPE)
426                 .build();
427         FileData expectedFileData = ImmutableFileData.builder()
428                 .name(PM_FILE_NAME)
429                 .location(LOCATION)
430                 .scheme(Scheme.FTPS)
431                 .compression(GZIP_COMPRESSION)
432                 .fileFormatType(FILE_FORMAT_TYPE)
433                 .fileFormatVersion(FILE_FORMAT_VERSION)
434                 .build();
435         List<FileData> files = new ArrayList<>();
436         files.add(expectedFileData);
437         FileReadyMessage expectedMessage = ImmutableFileReadyMessage.builder()
438                 .pnfName(SOURCE_NAME)
439                 .messageMetaData(messageMetaData)
440                 .files(files)
441                 .build();
442         // @formatter:on
443         String messageString = message.toString();
444         String parsedString = message.getParsed();
445         JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
446         JsonElement jsonElement = new JsonParser().parse(parsedString);
447         Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
448                 .getJsonObjectFromAnArray(jsonElement);
449
450         StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(messageString)))
451                 .expectSubscription().expectNext(expectedMessage).verifyComplete();
452     }
453
454     @Test
455     void whenPassingJsonWithoutMandatoryHeaderInformation_noFileData() {
456         // @formatter:off
457         JsonMessage message = new JsonMessage.JsonMessageBuilder()
458                 .eventName(NR_RADIO_ERICSSON_EVENT_NAME)
459                 .changeIdentifier("PM_MEAS_FILES_INVALID")
460                 .changeType("FileReady_INVALID")
461                 .notificationFieldsVersion("1.0_INVALID")
462                 .build();
463         // @formatter:on
464         String incorrectMessageString = message.toString();
465         String parsedString = message.getParsed();
466         JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
467         JsonElement jsonElement = new JsonParser().parse(parsedString);
468         Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
469                 .getJsonObjectFromAnArray(jsonElement);
470
471         StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(incorrectMessageString)))
472                 .expectSubscription().expectComplete().verify();
473     }
474
475     @Test
476     void whenPassingJsonWithNullJsonElement_noFileData() {
477         JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
478         JsonElement jsonElement = new JsonParser().parse("{}");
479
480         Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
481                 .getJsonObjectFromAnArray(jsonElement);
482
483         StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just("[{}]"))).expectSubscription()
484                 .expectComplete().verify();
485     }
486
487     @Test
488     void whenPassingCorrectJsonWithIncorrectChangeType_noFileData() {
489         // @formatter:off
490         AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder()
491                 .name(PM_FILE_NAME)
492                 .location(LOCATION)
493                 .compression(GZIP_COMPRESSION)
494                 .fileFormatVersion(FILE_FORMAT_VERSION)
495                 .build();
496         JsonMessage message = new JsonMessage.JsonMessageBuilder()
497                 .eventName(NR_RADIO_ERICSSON_EVENT_NAME)
498                 .changeIdentifier(CHANGE_IDENTIFIER)
499                 .changeType(INCORRECT_CHANGE_TYPE)
500                 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION)
501                 .addAdditionalField(additionalField)
502                 .build();
503         // @formatter:on
504         String messageString = message.toString();
505         String parsedString = message.getParsed();
506         JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
507         JsonElement jsonElement = new JsonParser().parse(parsedString);
508         Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
509                 .getJsonObjectFromAnArray(jsonElement);
510
511         StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(messageString)))
512                 .expectSubscription().expectNextCount(0).expectComplete().verify();
513     }
514
515     @Test
516     void whenPassingCorrectJsonWithIncorrectChangeIdentifier_noFileData() {
517         // @formatter:off
518         AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder()
519                 .name(PM_FILE_NAME)
520                 .location(LOCATION)
521                 .compression(GZIP_COMPRESSION)
522                 .fileFormatVersion(FILE_FORMAT_VERSION)
523                 .build();
524         JsonMessage message = new JsonMessage.JsonMessageBuilder()
525                 .eventName(NR_RADIO_ERICSSON_EVENT_NAME)
526                 .changeIdentifier(INCORRECT_CHANGE_IDENTIFIER)
527                 .changeType(CHANGE_TYPE)
528                 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION)
529                 .addAdditionalField(additionalField)
530                 .build();
531         // @formatter:on
532         String messageString = message.toString();
533         String parsedString = message.getParsed();
534         JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
535         JsonElement jsonElement = new JsonParser().parse(parsedString);
536         Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
537                 .getJsonObjectFromAnArray(jsonElement);
538
539         StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(messageString)))
540                 .expectSubscription().expectComplete().verify();
541     }
542 }