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