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