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