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