b33180fa8ce2b6c2496725414e65a13d858a37bf
[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         AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
72                 .name(PM_FILE_NAME) //
73                 .location(LOCATION) //
74                 .compression(GZIP_COMPRESSION) //
75                 .fileFormatType(FILE_FORMAT_TYPE) //
76                 .fileFormatVersion(FILE_FORMAT_VERSION) //
77                 .build();
78         JsonMessage message = new JsonMessage.JsonMessageBuilder() //
79                 .eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
80                 .changeIdentifier(CHANGE_IDENTIFIER) //
81                 .changeType(CHANGE_TYPE) //
82                 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
83                 .addAdditionalField(additionalField) //
84                 .build();
85
86         MessageMetaData messageMetaData = ImmutableMessageMetaData.builder() //
87                 .productName(PRODUCT_NAME) //
88                 .vendorName(VENDOR_NAME) //
89                 .lastEpochMicrosec(LAST_EPOCH_MICROSEC) //
90                 .sourceName(SOURCE_NAME) //
91                 .startEpochMicrosec(START_EPOCH_MICROSEC) //
92                 .timeZoneOffset(TIME_ZONE_OFFSET) //
93                 .changeIdentifier(CHANGE_IDENTIFIER) //
94                 .changeType(CHANGE_TYPE) //
95                 .build();
96         FileData expectedFileData = ImmutableFileData.builder() //
97                 .name(PM_FILE_NAME) //
98                 .location(LOCATION) //
99                 .scheme(Scheme.FTPS) //
100                 .compression(GZIP_COMPRESSION) //
101                 .fileFormatType(FILE_FORMAT_TYPE) //
102                 .fileFormatVersion(FILE_FORMAT_VERSION) //
103                 .build();
104         List<FileData> files = new ArrayList<>();
105         files.add(expectedFileData);
106         FileReadyMessage expectedMessage = ImmutableFileReadyMessage.builder()
107                 .pnfName(SOURCE_NAME) //
108                 .messageMetaData(messageMetaData) //
109                 .files(files) //
110                 .build();
111
112         String messageString = message.toString();
113         String parsedString = message.getParsed();
114         JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
115         JsonElement jsonElement = new JsonParser().parse(parsedString);
116         Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
117                 .getJsonObjectFromAnArray(jsonElement);
118
119         StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(messageString)))
120                 .expectSubscription().expectNext(expectedMessage).verifyComplete();
121     }
122
123     @Test
124     void whenPassingCorrectJsonWithTwoEvents_twoMessages() throws DmaapNotFoundException {
125         AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
126                 .name(PM_FILE_NAME) //
127                 .location(LOCATION) //
128                 .compression(GZIP_COMPRESSION) //
129                 .fileFormatType(FILE_FORMAT_TYPE) //
130                 .fileFormatVersion(FILE_FORMAT_VERSION) //
131                 .build();
132         JsonMessage message = new JsonMessage.JsonMessageBuilder() //
133                 .eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
134                 .changeIdentifier(CHANGE_IDENTIFIER) //
135                 .changeType(CHANGE_TYPE) //
136                 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
137                 .addAdditionalField(additionalField) //
138                 .build();
139
140         MessageMetaData messageMetaData = ImmutableMessageMetaData.builder() //
141                 .productName(PRODUCT_NAME) //
142                 .vendorName(VENDOR_NAME) //
143                 .lastEpochMicrosec(LAST_EPOCH_MICROSEC) //
144                 .sourceName(SOURCE_NAME) //
145                 .startEpochMicrosec(START_EPOCH_MICROSEC) //
146                 .timeZoneOffset(TIME_ZONE_OFFSET) //
147                 .changeIdentifier(CHANGE_IDENTIFIER) //
148                 .changeType(CHANGE_TYPE) //
149                 .build();
150         FileData expectedFileData = ImmutableFileData.builder() //
151                 .name(PM_FILE_NAME) //
152                 .location(LOCATION) //
153                 .scheme(Scheme.FTPS) //
154                 .compression(GZIP_COMPRESSION) //
155                 .fileFormatType(FILE_FORMAT_TYPE) //
156                 .fileFormatVersion(FILE_FORMAT_VERSION) //
157                 .build();
158         List<FileData> files = new ArrayList<>();
159         files.add(expectedFileData);
160         FileReadyMessage expectedMessage = ImmutableFileReadyMessage.builder() //
161                 .pnfName(SOURCE_NAME) //
162                 .messageMetaData(messageMetaData) //
163                 .files(files) //
164                 .build();
165
166         String parsedString = message.getParsed();
167         String messageString = "[" + parsedString + "," + parsedString + "]";
168         JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
169         JsonElement jsonElement = new JsonParser().parse(parsedString);
170         Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
171                 .getJsonObjectFromAnArray(jsonElement);
172
173         StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(messageString)))
174                 .expectSubscription().expectNext(expectedMessage).expectNext(expectedMessage).verifyComplete();
175     }
176
177     @Test
178     void whenPassingCorrectJsonWithoutLocation_noMessage() {
179         AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
180                 .name(PM_FILE_NAME) //
181                 .compression(GZIP_COMPRESSION) //
182                 .fileFormatType(FILE_FORMAT_TYPE) //
183                 .fileFormatVersion(FILE_FORMAT_VERSION) //
184                 .build();
185         JsonMessage message = new JsonMessage.JsonMessageBuilder() //
186                 .eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
187                 .changeIdentifier(CHANGE_IDENTIFIER) //
188                 .changeType(CHANGE_TYPE) //
189                 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
190                 .addAdditionalField(additionalField) //
191                 .build();
192
193         String messageString = message.toString();
194         String parsedString = message.getParsed();
195         JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
196         JsonElement jsonElement = new JsonParser().parse(parsedString);
197         Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
198                 .getJsonObjectFromAnArray(jsonElement);
199
200         StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(messageString)))
201                 .expectSubscription().expectNextCount(0).verifyComplete();
202     }
203
204     @Test
205     void whenPassingCorrectJsonWithTwoEventsFirstNoHeader_oneFileDatan() throws DmaapNotFoundException {
206         AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
207                 .name(PM_FILE_NAME) //
208                 .location(LOCATION) //
209                 .compression(GZIP_COMPRESSION) //
210                 .fileFormatType(FILE_FORMAT_TYPE) //
211                 .fileFormatVersion(FILE_FORMAT_VERSION) //
212                 .build();
213         JsonMessage message = new JsonMessage.JsonMessageBuilder() //
214                 .eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
215                 .changeIdentifier(CHANGE_IDENTIFIER) //
216                 .changeType(CHANGE_TYPE) //
217                 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
218                 .addAdditionalField(additionalField) //
219                 .build();
220
221         MessageMetaData messageMetaData = ImmutableMessageMetaData.builder() //
222                 .productName(PRODUCT_NAME) //
223                 .vendorName(VENDOR_NAME) //
224                 .lastEpochMicrosec(LAST_EPOCH_MICROSEC) //
225                 .sourceName(SOURCE_NAME) //
226                 .startEpochMicrosec(START_EPOCH_MICROSEC) //
227                 .timeZoneOffset(TIME_ZONE_OFFSET) //
228                 .changeIdentifier(CHANGE_IDENTIFIER) //
229                 .changeType(CHANGE_TYPE) //
230                 .build();
231         FileData expectedFileData = ImmutableFileData.builder() //
232                 .name(PM_FILE_NAME) //
233                 .location(LOCATION) //
234                 .scheme(Scheme.FTPS) //
235                 .compression(GZIP_COMPRESSION) //
236                 .fileFormatType(FILE_FORMAT_TYPE) //
237                 .fileFormatVersion(FILE_FORMAT_VERSION) //
238                 .build();
239         List<FileData> files = new ArrayList<>();
240         files.add(expectedFileData);
241         FileReadyMessage expectedMessage = ImmutableFileReadyMessage.builder() //
242                 .pnfName(SOURCE_NAME) //
243                 .messageMetaData(messageMetaData) //
244                 .files(files) //
245                 .build();
246
247         String parsedString = message.getParsed();
248         String messageString = "[{\"event\":{}}," + parsedString + "]";
249         JsonMessageParser jsonMessageParserUnderTest = new JsonMessageParser();
250
251         StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(messageString)))
252                 .expectSubscription().expectNext(expectedMessage).verifyComplete();
253     }
254
255     @Test
256     void whenPassingCorrectJsonWithFaultyEventName_noFileData() {
257         AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
258                 .location(LOCATION) //
259                 .compression(GZIP_COMPRESSION) //
260                 .fileFormatType(FILE_FORMAT_TYPE) //
261                 .fileFormatVersion(FILE_FORMAT_VERSION) //
262                 .build();
263         JsonMessage message = new JsonMessage.JsonMessageBuilder() //
264                 .eventName("Faulty event name") //
265                 .changeIdentifier(CHANGE_IDENTIFIER) //
266                 .changeType(CHANGE_TYPE) //
267                 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
268                 .addAdditionalField(additionalField) //
269                 .build();
270
271         String messageString = message.toString();
272         String parsedString = message.getParsed();
273         JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
274         JsonElement jsonElement = new JsonParser().parse(parsedString);
275         Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
276                 .getJsonObjectFromAnArray(jsonElement);
277
278         StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(messageString)))
279                 .expectSubscription().expectComplete().verify();
280     }
281
282     @Test
283     void whenPassingCorrectJsonWithoutName_noFileData() {
284         AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
285                 .location(LOCATION) //
286                 .compression(GZIP_COMPRESSION) //
287                 .fileFormatType(FILE_FORMAT_TYPE) //
288                 .fileFormatVersion(FILE_FORMAT_VERSION) //
289                 .build();
290         JsonMessage message = new JsonMessage.JsonMessageBuilder() //
291                 .eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
292                 .changeIdentifier(CHANGE_IDENTIFIER) //
293                 .changeType(CHANGE_TYPE) //
294                 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
295                 .addAdditionalField(additionalField) //
296                 .build();
297
298         String messageString = message.toString();
299         String parsedString = message.getParsed();
300         JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
301         JsonElement jsonElement = new JsonParser().parse(parsedString);
302         Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
303                 .getJsonObjectFromAnArray(jsonElement);
304
305         StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(messageString)))
306                 .expectSubscription().expectNextCount(0).verifyComplete();
307     }
308
309     @Test
310     void whenPassingCorrectJsonWithoutAdditionalFields_noFileData() {
311         JsonMessage message = new JsonMessage.JsonMessageBuilder() //
312                 .eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
313                 .changeIdentifier(CHANGE_IDENTIFIER) //
314                 .changeType(CHANGE_TYPE) //
315                 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
316                 .build();
317
318         String messageString = message.toString();
319         String parsedString = message.getParsed();
320         JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
321         JsonElement jsonElement = new JsonParser().parse(parsedString);
322         Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
323                 .getJsonObjectFromAnArray(jsonElement);
324
325         StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(messageString)))
326                 .expectSubscription().expectNextCount(0).verifyComplete();
327     }
328
329     @Test
330     void whenPassingCorrectJsonWithoutCompression_noFileData() {
331         AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
332                 .name(PM_FILE_NAME) //
333                 .location(LOCATION) //
334                 .fileFormatType(FILE_FORMAT_TYPE) //
335                 .fileFormatVersion(FILE_FORMAT_VERSION) //
336                 .build();
337         JsonMessage message = new JsonMessage.JsonMessageBuilder() //
338                 .eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
339                 .changeIdentifier(CHANGE_IDENTIFIER) //
340                 .changeType(CHANGE_TYPE) //
341                 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
342                 .addAdditionalField(additionalField) //
343                 .build();
344
345         String messageString = message.toString();
346         String parsedString = message.getParsed();
347         JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
348         JsonElement jsonElement = new JsonParser().parse(parsedString);
349         Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
350                 .getJsonObjectFromAnArray(jsonElement);
351
352         StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(messageString)))
353                 .expectSubscription().expectNextCount(0).verifyComplete();
354     }
355
356     @Test
357     void whenPassingCorrectJsonWithoutFileFormatType_noFileData() {
358         AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
359                 .name(PM_FILE_NAME) //
360                 .location(LOCATION) //
361                 .compression(GZIP_COMPRESSION) //
362                 .fileFormatVersion(FILE_FORMAT_VERSION) //
363                 .build();
364         JsonMessage message = new JsonMessage.JsonMessageBuilder() //
365                 .eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
366                 .changeIdentifier(CHANGE_IDENTIFIER) //
367                 .changeType(CHANGE_TYPE) //
368                 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
369                 .addAdditionalField(additionalField) //
370                 .build();
371
372         String messageString = message.toString();
373         String parsedString = message.getParsed();
374         JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
375         JsonElement jsonElement = new JsonParser().parse(parsedString);
376         Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
377                 .getJsonObjectFromAnArray(jsonElement);
378
379         StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(messageString)))
380                 .expectSubscription().expectNextCount(0).verifyComplete();
381     }
382
383     @Test
384     void whenPassingOneCorrectJsonWithoutFileFormatVersionAndOneCorrect_oneFileData() {
385         AdditionalField additionalFaultyField = new JsonMessage.AdditionalFieldBuilder() //
386                 .name(PM_FILE_NAME) //
387                 .location(LOCATION) //
388                 .compression(GZIP_COMPRESSION) //
389                 .fileFormatType(FILE_FORMAT_TYPE) //
390                 .build();
391         AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
392                 .name(PM_FILE_NAME) //
393                 .location(LOCATION) //
394                 .compression(GZIP_COMPRESSION) //
395                 .fileFormatType(FILE_FORMAT_TYPE) //
396                 .fileFormatVersion(FILE_FORMAT_VERSION) //
397                 .build();
398         JsonMessage message = new JsonMessage.JsonMessageBuilder() //
399                 .eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
400                 .changeIdentifier(CHANGE_IDENTIFIER) //
401                 .changeType(CHANGE_TYPE) //
402                 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
403                 .addAdditionalField(additionalFaultyField) //
404                 .addAdditionalField(additionalField) //
405                 .build();
406
407         MessageMetaData messageMetaData = ImmutableMessageMetaData.builder() //
408                 .productName(PRODUCT_NAME) //
409                 .vendorName(VENDOR_NAME) //
410                 .lastEpochMicrosec(LAST_EPOCH_MICROSEC) //
411                 .sourceName(SOURCE_NAME) //
412                 .startEpochMicrosec(START_EPOCH_MICROSEC) //
413                 .timeZoneOffset(TIME_ZONE_OFFSET) //
414                 .changeIdentifier(CHANGE_IDENTIFIER) //
415                 .changeType(CHANGE_TYPE) //
416                 .build();
417         FileData expectedFileData = ImmutableFileData.builder() //
418                 .name(PM_FILE_NAME) //
419                 .location(LOCATION) //
420                 .scheme(Scheme.FTPS) //
421                 .compression(GZIP_COMPRESSION) //
422                 .fileFormatType(FILE_FORMAT_TYPE) //
423                 .fileFormatVersion(FILE_FORMAT_VERSION) //
424                 .build();
425         List<FileData> files = new ArrayList<>();
426         files.add(expectedFileData);
427         FileReadyMessage expectedMessage = ImmutableFileReadyMessage.builder() //
428                 .pnfName(SOURCE_NAME) //
429                 .messageMetaData(messageMetaData) //
430                 .files(files) //
431                 .build();
432
433         String messageString = message.toString();
434         String parsedString = message.getParsed();
435         JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
436         JsonElement jsonElement = new JsonParser().parse(parsedString);
437         Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
438                 .getJsonObjectFromAnArray(jsonElement);
439
440         StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(messageString)))
441                 .expectSubscription().expectNext(expectedMessage).verifyComplete();
442     }
443
444     @Test
445     void whenPassingJsonWithoutMandatoryHeaderInformation_noFileData() {
446         JsonMessage message = new JsonMessage.JsonMessageBuilder() //
447                 .eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
448                 .changeIdentifier("PM_MEAS_FILES_INVALID") //
449                 .changeType("FileReady_INVALID") //
450                 .notificationFieldsVersion("1.0_INVALID") //
451                 .build();
452
453         String incorrectMessageString = message.toString();
454         String parsedString = message.getParsed();
455         JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
456         JsonElement jsonElement = new JsonParser().parse(parsedString);
457         Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
458                 .getJsonObjectFromAnArray(jsonElement);
459
460         StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(incorrectMessageString)))
461                 .expectSubscription().expectComplete().verify();
462     }
463
464     @Test
465     void whenPassingJsonWithNullJsonElement_noFileData() {
466         JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
467         JsonElement jsonElement = new JsonParser().parse("{}");
468
469         Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
470                 .getJsonObjectFromAnArray(jsonElement);
471
472         StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just("[{}]"))).expectSubscription()
473                 .expectComplete().verify();
474     }
475
476     @Test
477     void whenPassingCorrectJsonWithIncorrectChangeType_noFileData() {
478         AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
479                 .name(PM_FILE_NAME) //
480                 .location(LOCATION) //
481                 .compression(GZIP_COMPRESSION)
482                 .fileFormatVersion(FILE_FORMAT_VERSION) //
483                 .build();
484         JsonMessage message = new JsonMessage.JsonMessageBuilder() //
485                 .eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
486                 .changeIdentifier(CHANGE_IDENTIFIER) //
487                 .changeType(INCORRECT_CHANGE_TYPE) //
488                 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
489                 .addAdditionalField(additionalField) //
490                 .build();
491
492         String messageString = message.toString();
493         String parsedString = message.getParsed();
494         JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
495         JsonElement jsonElement = new JsonParser().parse(parsedString);
496         Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
497                 .getJsonObjectFromAnArray(jsonElement);
498
499         StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(messageString)))
500                 .expectSubscription().expectNextCount(0).expectComplete().verify();
501     }
502
503     @Test
504     void whenPassingCorrectJsonWithIncorrectChangeIdentifier_noFileData() {
505         AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
506                 .name(PM_FILE_NAME) //
507                 .location(LOCATION) //
508                 .compression(GZIP_COMPRESSION) //
509                 .fileFormatVersion(FILE_FORMAT_VERSION) //
510                 .build();
511         JsonMessage message = new JsonMessage.JsonMessageBuilder() //
512                 .eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
513                 .changeIdentifier(INCORRECT_CHANGE_IDENTIFIER) //
514                 .changeType(CHANGE_TYPE) //
515                 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
516                 .addAdditionalField(additionalField) //
517                 .build();
518
519         String messageString = message.toString();
520         String parsedString = message.getParsed();
521         JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
522         JsonElement jsonElement = new JsonParser().parse(parsedString);
523         Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
524                 .getJsonObjectFromAnArray(jsonElement);
525
526         StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(messageString)))
527                 .expectSubscription().expectComplete().verify();
528     }
529 }