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
9 * http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
19 package org.onap.dcaegen2.collectors.datafile.service;
21 import static org.junit.Assert.assertTrue;
22 import static org.mockito.Mockito.spy;
24 import ch.qos.logback.classic.spi.ILoggingEvent;
25 import ch.qos.logback.core.read.ListAppender;
27 import com.google.gson.JsonElement;
28 import com.google.gson.JsonParser;
30 import java.net.URISyntaxException;
31 import java.util.ArrayList;
32 import java.util.List;
33 import java.util.Optional;
35 import org.junit.jupiter.api.Test;
36 import org.mockito.Mockito;
37 import org.onap.dcaegen2.collectors.datafile.ftp.Scheme;
38 import org.onap.dcaegen2.collectors.datafile.model.FileData;
39 import org.onap.dcaegen2.collectors.datafile.model.FileReadyMessage;
40 import org.onap.dcaegen2.collectors.datafile.model.ImmutableFileData;
41 import org.onap.dcaegen2.collectors.datafile.model.ImmutableFileReadyMessage;
42 import org.onap.dcaegen2.collectors.datafile.model.ImmutableMessageMetaData;
43 import org.onap.dcaegen2.collectors.datafile.model.MessageMetaData;
44 import org.onap.dcaegen2.collectors.datafile.utils.JsonMessage;
45 import org.onap.dcaegen2.collectors.datafile.utils.JsonMessage.AdditionalField;
46 import org.onap.dcaegen2.collectors.datafile.utils.LoggingUtils;
48 import reactor.core.publisher.Mono;
49 import reactor.test.StepVerifier;
52 * Tests the JsonMessageParser.
54 * @author <a href="mailto:przemyslaw.wasala@nokia.com">Przemysław Wąsala</a> on 5/8/18
55 * @author <a href="mailto:henrik.b.andersson@est.tech">Henrik Andersson</a>
57 class JsonMessageParserTest {
58 private static final String ERROR_LOG_TAG = "[ERROR] ";
60 private static final String NR_RADIO_ERICSSON_EVENT_NAME = "Noti_NrRadio-Ericsson_FileReady";
61 private static final String PRODUCT_NAME = "NrRadio";
62 private static final String VENDOR_NAME = "Ericsson";
63 private static final String LAST_EPOCH_MICROSEC = "1519837825682";
64 private static final String SOURCE_NAME = "5GRAN_DU";
65 private static final String START_EPOCH_MICROSEC = "1519837825682";
66 private static final String TIME_ZONE_OFFSET = "UTC+05:00";
67 private static final String PM_FILE_NAME = "A20161224.1030-1045.bin.gz";
68 private static final String LOCATION = "ftpes://192.168.0.101:22/ftp/rop/" + PM_FILE_NAME;
69 private static final String GZIP_COMPRESSION = "gzip";
70 private static final String FILE_FORMAT_TYPE = "org.3GPP.32.435#measCollec";
71 private static final String FILE_FORMAT_VERSION = "V10";
72 private static final String CHANGE_IDENTIFIER = "PM_MEAS_FILES";
73 private static final String INCORRECT_CHANGE_IDENTIFIER = "INCORRECT_PM_MEAS_FILES";
74 private static final String CHANGE_TYPE = "FileReady";
75 private static final String INCORRECT_CHANGE_TYPE = "IncorrectFileReady";
76 private static final String NOTIFICATION_FIELDS_VERSION = "1.0";
79 void whenPassingCorrectJson_oneFileReadyMessage() throws URISyntaxException {
80 AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
81 .name(PM_FILE_NAME) //
82 .location(LOCATION) //
83 .compression(GZIP_COMPRESSION) //
84 .fileFormatType(FILE_FORMAT_TYPE) //
85 .fileFormatVersion(FILE_FORMAT_VERSION) //
87 JsonMessage message = new JsonMessage.JsonMessageBuilder() //
88 .eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
89 .changeIdentifier(CHANGE_IDENTIFIER) //
90 .changeType(CHANGE_TYPE) //
91 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
92 .addAdditionalField(additionalField) //
95 MessageMetaData messageMetaData = ImmutableMessageMetaData.builder() //
96 .productName(PRODUCT_NAME) //
97 .vendorName(VENDOR_NAME) //
98 .lastEpochMicrosec(LAST_EPOCH_MICROSEC) //
99 .sourceName(SOURCE_NAME) //
100 .startEpochMicrosec(START_EPOCH_MICROSEC) //
101 .timeZoneOffset(TIME_ZONE_OFFSET) //
102 .changeIdentifier(CHANGE_IDENTIFIER) //
103 .changeType(CHANGE_TYPE) //
105 FileData expectedFileData = ImmutableFileData.builder() //
106 .name(PM_FILE_NAME) //
107 .location(LOCATION) //
108 .scheme(Scheme.FTPS) //
109 .compression(GZIP_COMPRESSION) //
110 .fileFormatType(FILE_FORMAT_TYPE) //
111 .fileFormatVersion(FILE_FORMAT_VERSION) //
112 .messageMetaData(messageMetaData) //
114 List<FileData> files = new ArrayList<>();
115 files.add(expectedFileData);
116 FileReadyMessage expectedMessage = ImmutableFileReadyMessage.builder() //
120 String parsedString = message.getParsed();
121 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
122 JsonElement jsonElement = new JsonParser().parse(parsedString);
123 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
124 .getJsonObjectFromAnArray(jsonElement);
126 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(jsonElement))).expectSubscription()
127 .expectNext(expectedMessage).verifyComplete();
131 void whenPassingCorrectJsonWithTwoEvents_twoMessages() {
132 AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
133 .name(PM_FILE_NAME) //
134 .location(LOCATION) //
135 .compression(GZIP_COMPRESSION) //
136 .fileFormatType(FILE_FORMAT_TYPE) //
137 .fileFormatVersion(FILE_FORMAT_VERSION) //
139 JsonMessage message = new JsonMessage.JsonMessageBuilder() //
140 .eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
141 .changeIdentifier(CHANGE_IDENTIFIER) //
142 .changeType(CHANGE_TYPE) //
143 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
144 .addAdditionalField(additionalField) //
147 MessageMetaData messageMetaData = ImmutableMessageMetaData.builder() //
148 .productName(PRODUCT_NAME) //
149 .vendorName(VENDOR_NAME) //
150 .lastEpochMicrosec(LAST_EPOCH_MICROSEC) //
151 .sourceName(SOURCE_NAME) //
152 .startEpochMicrosec(START_EPOCH_MICROSEC) //
153 .timeZoneOffset(TIME_ZONE_OFFSET) //
154 .changeIdentifier(CHANGE_IDENTIFIER) //
155 .changeType(CHANGE_TYPE) //
157 FileData expectedFileData = ImmutableFileData.builder() //
158 .name(PM_FILE_NAME) //
159 .location(LOCATION) //
160 .scheme(Scheme.FTPS) //
161 .compression(GZIP_COMPRESSION) //
162 .fileFormatType(FILE_FORMAT_TYPE) //
163 .fileFormatVersion(FILE_FORMAT_VERSION) //
164 .messageMetaData(messageMetaData) //
166 List<FileData> files = new ArrayList<>();
167 files.add(expectedFileData);
168 FileReadyMessage expectedMessage = ImmutableFileReadyMessage.builder() //
172 String parsedString = message.getParsed();
173 String messageString = "[" + parsedString + "," + parsedString + "]";
174 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
175 JsonElement jsonElement = new JsonParser().parse(parsedString);
176 JsonElement jsonElement1 = new JsonParser().parse(messageString);
177 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
178 .getJsonObjectFromAnArray(jsonElement);
180 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(jsonElement1)))
181 .expectSubscription().expectNext(expectedMessage).expectNext(expectedMessage).verifyComplete();
185 void whenPassingCorrectJsonWithoutLocation_noMessage() {
186 AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
187 .name(PM_FILE_NAME) //
188 .compression(GZIP_COMPRESSION) //
189 .fileFormatType(FILE_FORMAT_TYPE) //
190 .fileFormatVersion(FILE_FORMAT_VERSION) //
192 JsonMessage message = new JsonMessage.JsonMessageBuilder() //
193 .eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
194 .changeIdentifier(CHANGE_IDENTIFIER) //
195 .changeType(CHANGE_TYPE) //
196 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
197 .addAdditionalField(additionalField) //
200 String parsedString = message.getParsed();
201 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
202 JsonElement jsonElement = new JsonParser().parse(parsedString);
203 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
204 .getJsonObjectFromAnArray(jsonElement);
206 final ListAppender<ILoggingEvent> logAppender = LoggingUtils.getLogListAppender(JsonMessageParser.class);
207 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(jsonElement))).expectSubscription()
208 .expectNextCount(0).verifyComplete();
210 assertTrue(logAppender.list.toString()
211 .contains("[ERROR] VES event parsing. File information wrong. " + "Missing location."));
212 assertTrue(logAppender.list.get(0).toString().contains("sourceName=5GRAN_DU"));
216 void whenPassingCorrectJsonWrongScheme_noMessage() {
217 AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
218 .name(PM_FILE_NAME) //
219 .location("http://location.xml") //
220 .compression(GZIP_COMPRESSION) //
221 .fileFormatType(FILE_FORMAT_TYPE) //
222 .fileFormatVersion(FILE_FORMAT_VERSION) //
224 JsonMessage message = new JsonMessage.JsonMessageBuilder() //
225 .eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
226 .changeIdentifier(CHANGE_IDENTIFIER) //
227 .changeType(CHANGE_TYPE) //
228 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
229 .addAdditionalField(additionalField) //
232 String parsedString = message.getParsed();
233 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
234 JsonElement jsonElement = new JsonParser().parse(parsedString);
235 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
236 .getJsonObjectFromAnArray(jsonElement);
238 final ListAppender<ILoggingEvent> logAppender = LoggingUtils.getLogListAppender(JsonMessageParser.class);
239 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(jsonElement))).expectSubscription()
240 .expectNextCount(0).verifyComplete();
242 assertTrue("Error missing in log",
243 logAppender.list.toString()
244 .contains(ERROR_LOG_TAG + JsonMessageParser.ERROR_MSG_VES_EVENT_PARSING
245 + Scheme.DFC_DOES_NOT_SUPPORT_PROTOCOL_ERROR_MSG + "http" + Scheme.SUPPORTED_PROTOCOLS_ERROR_MESSAGE
246 + ". Location: http://location.xml"));
247 assertTrue("Missing sourceName in log", logAppender.list.toString().contains("sourceName=5GRAN_DU"));
251 void whenPassingCorrectJsonWithTwoEventsFirstNoHeader_oneFileDatan() {
252 AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
253 .name(PM_FILE_NAME) //
254 .location(LOCATION) //
255 .compression(GZIP_COMPRESSION) //
256 .fileFormatType(FILE_FORMAT_TYPE) //
257 .fileFormatVersion(FILE_FORMAT_VERSION) //
259 JsonMessage message = new JsonMessage.JsonMessageBuilder() //
260 .eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
261 .changeIdentifier(CHANGE_IDENTIFIER) //
262 .changeType(CHANGE_TYPE) //
263 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
264 .addAdditionalField(additionalField) //
267 MessageMetaData messageMetaData = ImmutableMessageMetaData.builder() //
268 .productName(PRODUCT_NAME) //
269 .vendorName(VENDOR_NAME) //
270 .lastEpochMicrosec(LAST_EPOCH_MICROSEC) //
271 .sourceName(SOURCE_NAME) //
272 .startEpochMicrosec(START_EPOCH_MICROSEC) //
273 .timeZoneOffset(TIME_ZONE_OFFSET) //
274 .changeIdentifier(CHANGE_IDENTIFIER) //
275 .changeType(CHANGE_TYPE) //
277 FileData expectedFileData = ImmutableFileData.builder() //
278 .name(PM_FILE_NAME) //
279 .location(LOCATION) //
280 .scheme(Scheme.FTPS) //
281 .compression(GZIP_COMPRESSION) //
282 .fileFormatType(FILE_FORMAT_TYPE) //
283 .fileFormatVersion(FILE_FORMAT_VERSION) //
284 .messageMetaData(messageMetaData) //
286 List<FileData> files = new ArrayList<>();
287 files.add(expectedFileData);
288 FileReadyMessage expectedMessage = ImmutableFileReadyMessage.builder() //
292 String parsedString = message.getParsed();
293 String messageString = "[{\"event\":{}}," + parsedString + "]";
294 JsonMessageParser jsonMessageParserUnderTest = new JsonMessageParser();
295 JsonElement jsonElement = new JsonParser().parse(messageString);
297 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(jsonElement))).expectSubscription()
298 .expectNext(expectedMessage).verifyComplete();
302 void whenPassingCorrectJsonWithFaultyEventName_noFileData() {
303 AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
304 .location(LOCATION) //
305 .compression(GZIP_COMPRESSION) //
306 .fileFormatType(FILE_FORMAT_TYPE) //
307 .fileFormatVersion(FILE_FORMAT_VERSION) //
309 JsonMessage message = new JsonMessage.JsonMessageBuilder() //
310 .eventName("Faulty event name") //
311 .changeIdentifier(CHANGE_IDENTIFIER) //
312 .changeType(CHANGE_TYPE) //
313 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
314 .addAdditionalField(additionalField) //
317 String parsedString = message.getParsed();
318 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
319 JsonElement jsonElement = new JsonParser().parse(parsedString);
320 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
321 .getJsonObjectFromAnArray(jsonElement);
323 final ListAppender<ILoggingEvent> logAppender = LoggingUtils.getLogListAppender(JsonMessageParser.class);
324 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(jsonElement))).expectSubscription()
325 .expectComplete().verify();
327 assertTrue("Error missing in log",
328 logAppender.list.toString().contains(ERROR_LOG_TAG + JsonMessageParser.ERROR_MSG_VES_EVENT_PARSING
329 + "Can not get PRODUCT_NAME from eventName, eventName is not in correct format: Faulty event name"));
333 void whenPassingCorrectJsonWithoutName_noFileData() {
334 AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
335 .location(LOCATION) //
336 .compression(GZIP_COMPRESSION) //
337 .fileFormatType(FILE_FORMAT_TYPE) //
338 .fileFormatVersion(FILE_FORMAT_VERSION) //
340 JsonMessage message = new JsonMessage.JsonMessageBuilder() //
341 .eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
342 .changeIdentifier(CHANGE_IDENTIFIER) //
343 .changeType(CHANGE_TYPE) //
344 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
345 .addAdditionalField(additionalField) //
348 String parsedString = message.getParsed();
349 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
350 JsonElement jsonElement = new JsonParser().parse(parsedString);
351 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
352 .getJsonObjectFromAnArray(jsonElement);
354 final ListAppender<ILoggingEvent> logAppender = LoggingUtils.getLogListAppender(JsonMessageParser.class);
355 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(jsonElement))).expectSubscription()
356 .expectNextCount(0).verifyComplete();
358 assertTrue("Error missing in log",
359 logAppender.list.toString()
360 .contains(ERROR_LOG_TAG + JsonMessageParser.ERROR_MSG_VES_EVENT_PARSING
361 + "File information wrong. Missing data: [name] Data: "
362 + message.getAdditionalFields().get(0).toString()));
366 void whenPassingCorrectJsonWithoutAdditionalFields_noFileData() {
367 JsonMessage message = new JsonMessage.JsonMessageBuilder() //
368 .eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
369 .changeIdentifier(CHANGE_IDENTIFIER) //
370 .changeType(CHANGE_TYPE) //
371 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
374 String parsedString = message.getParsed();
375 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
376 JsonElement jsonElement = new JsonParser().parse(parsedString);
377 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
378 .getJsonObjectFromAnArray(jsonElement);
380 final ListAppender<ILoggingEvent> logAppender = LoggingUtils.getLogListAppender(JsonMessageParser.class);
381 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(jsonElement))).expectSubscription()
382 .expectNextCount(0).verifyComplete();
384 assertTrue("Error missing in log",
385 logAppender.list.toString().contains(ERROR_LOG_TAG + JsonMessageParser.ERROR_MSG_VES_EVENT_PARSING
386 + "Missing arrayOfNamedHashMap in message. " + message.getParsed()));
390 void whenPassingCorrectJsonWithoutCompression_noFileData() {
391 AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
392 .name(PM_FILE_NAME) //
393 .location(LOCATION) //
394 .fileFormatType(FILE_FORMAT_TYPE) //
395 .fileFormatVersion(FILE_FORMAT_VERSION) //
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(additionalField) //
405 String parsedString = message.getParsed();
406 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
407 JsonElement jsonElement = new JsonParser().parse(parsedString);
408 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
409 .getJsonObjectFromAnArray(jsonElement);
411 final ListAppender<ILoggingEvent> logAppender = LoggingUtils.getLogListAppender(JsonMessageParser.class);
412 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(jsonElement))).expectSubscription()
413 .expectNextCount(0).verifyComplete();
415 assertTrue("Error missing in log",
416 logAppender.list.toString()
417 .contains(ERROR_LOG_TAG + JsonMessageParser.ERROR_MSG_VES_EVENT_PARSING
418 + "File information wrong. Missing data: [compression] Data: "
419 + message.getAdditionalFields().get(0).toString()));
423 void whenPassingCorrectJsonWithoutFileFormatType_noFileData() {
424 AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
425 .name(PM_FILE_NAME) //
426 .location(LOCATION) //
427 .compression(GZIP_COMPRESSION) //
428 .fileFormatVersion(FILE_FORMAT_VERSION) //
430 JsonMessage message = new JsonMessage.JsonMessageBuilder() //
431 .eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
432 .changeIdentifier(CHANGE_IDENTIFIER) //
433 .changeType(CHANGE_TYPE) //
434 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
435 .addAdditionalField(additionalField) //
438 String parsedString = message.getParsed();
439 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
440 JsonElement jsonElement = new JsonParser().parse(parsedString);
441 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
442 .getJsonObjectFromAnArray(jsonElement);
444 final ListAppender<ILoggingEvent> logAppender = LoggingUtils.getLogListAppender(JsonMessageParser.class);
445 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(jsonElement))).expectSubscription()
446 .expectNextCount(0).verifyComplete();
448 assertTrue("Error missing in log",
449 logAppender.list.toString()
450 .contains(ERROR_LOG_TAG + JsonMessageParser.ERROR_MSG_VES_EVENT_PARSING
451 + "File information wrong. Missing data: [fileFormatType] Data: "
452 + message.getAdditionalFields().get(0).toString()));
456 void whenPassingOneCorrectJsonWithoutFileFormatVersionAndOneCorrect_oneFileData() {
457 AdditionalField additionalFaultyField = new JsonMessage.AdditionalFieldBuilder() //
458 .name(PM_FILE_NAME) //
459 .location(LOCATION) //
460 .compression(GZIP_COMPRESSION) //
461 .fileFormatType(FILE_FORMAT_TYPE) //
463 AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
464 .name(PM_FILE_NAME) //
465 .location(LOCATION) //
466 .compression(GZIP_COMPRESSION) //
467 .fileFormatType(FILE_FORMAT_TYPE) //
468 .fileFormatVersion(FILE_FORMAT_VERSION) //
470 JsonMessage message = new JsonMessage.JsonMessageBuilder() //
471 .eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
472 .changeIdentifier(CHANGE_IDENTIFIER) //
473 .changeType(CHANGE_TYPE) //
474 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
475 .addAdditionalField(additionalFaultyField) //
476 .addAdditionalField(additionalField) //
479 MessageMetaData messageMetaData = ImmutableMessageMetaData.builder() //
480 .productName(PRODUCT_NAME) //
481 .vendorName(VENDOR_NAME) //
482 .lastEpochMicrosec(LAST_EPOCH_MICROSEC) //
483 .sourceName(SOURCE_NAME) //
484 .startEpochMicrosec(START_EPOCH_MICROSEC) //
485 .timeZoneOffset(TIME_ZONE_OFFSET) //
486 .changeIdentifier(CHANGE_IDENTIFIER) //
487 .changeType(CHANGE_TYPE) //
489 FileData expectedFileData = ImmutableFileData.builder() //
490 .name(PM_FILE_NAME) //
491 .location(LOCATION) //
492 .scheme(Scheme.FTPS) //
493 .compression(GZIP_COMPRESSION) //
494 .fileFormatType(FILE_FORMAT_TYPE) //
495 .fileFormatVersion(FILE_FORMAT_VERSION) //
496 .messageMetaData(messageMetaData) //
498 List<FileData> files = new ArrayList<>();
499 files.add(expectedFileData);
500 FileReadyMessage expectedMessage = ImmutableFileReadyMessage.builder() //
504 String parsedString = message.getParsed();
505 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
506 JsonElement jsonElement = new JsonParser().parse(parsedString);
507 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
508 .getJsonObjectFromAnArray(jsonElement);
510 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(jsonElement))).expectSubscription()
511 .expectNext(expectedMessage).verifyComplete();
515 void whenPassingJsonWithoutMandatoryHeaderInformation_noFileData() {
516 JsonMessage message = new JsonMessage.JsonMessageBuilder() //
517 .eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
520 String parsedString = message.getParsed();
521 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
522 JsonElement jsonElement = new JsonParser().parse(parsedString);
523 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
524 .getJsonObjectFromAnArray(jsonElement);
526 final ListAppender<ILoggingEvent> logAppender = LoggingUtils.getLogListAppender(JsonMessageParser.class);
527 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(jsonElement))).expectSubscription()
528 .expectComplete().verify();
530 assertTrue("Error missing in log",
531 logAppender.list.toString()
532 .contains(ERROR_LOG_TAG + JsonMessageParser.ERROR_MSG_VES_EVENT_PARSING
533 + "Missing data: [changeIdentifier, changeType, notificationFieldsVersion]. "
534 + "Change type is wrong: Expected: FileReady Message: " + message.getParsed()));
538 void whenPassingJsonWithNullJsonElement_noFileData() {
539 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
540 JsonElement jsonElement = new JsonParser().parse("{}");
542 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
543 .getJsonObjectFromAnArray(jsonElement);
545 final ListAppender<ILoggingEvent> logAppender = LoggingUtils.getLogListAppender(JsonMessageParser.class);
546 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(jsonElement))).expectSubscription()
547 .expectComplete().verify();
549 assertTrue("Error missing in log",
550 logAppender.list.toString().contains(ERROR_LOG_TAG + "Incorrect JsonObject - missing header. "));
554 void whenPassingCorrectJsonWithIncorrectChangeType_noFileData() {
555 AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
556 .name(PM_FILE_NAME) //
557 .location(LOCATION) //
558 .compression(GZIP_COMPRESSION) //
559 .fileFormatVersion(FILE_FORMAT_VERSION) //
561 JsonMessage message = new JsonMessage.JsonMessageBuilder() //
562 .eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
563 .changeIdentifier(CHANGE_IDENTIFIER) //
564 .changeType(INCORRECT_CHANGE_TYPE) //
565 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
566 .addAdditionalField(additionalField) //
569 String parsedString = message.getParsed();
570 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
571 JsonElement jsonElement = new JsonParser().parse(parsedString);
572 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
573 .getJsonObjectFromAnArray(jsonElement);
575 final ListAppender<ILoggingEvent> logAppender = LoggingUtils.getLogListAppender(JsonMessageParser.class);
576 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(jsonElement))).expectSubscription()
577 .expectNextCount(0).expectComplete().verify();
579 assertTrue("Error missing in log",
580 logAppender.list.toString()
581 .contains(ERROR_LOG_TAG + JsonMessageParser.ERROR_MSG_VES_EVENT_PARSING + " Change type is wrong: "
582 + INCORRECT_CHANGE_TYPE + " Expected: FileReady Message: " + message.getParsed()));
586 void whenPassingCorrectJsonWithIncorrectChangeIdentifier_noFileData() {
587 AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
588 .name(PM_FILE_NAME) //
589 .location(LOCATION) //
590 .compression(GZIP_COMPRESSION) //
591 .fileFormatVersion(FILE_FORMAT_VERSION) //
593 JsonMessage message = new JsonMessage.JsonMessageBuilder() //
594 .eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
595 .changeIdentifier(INCORRECT_CHANGE_IDENTIFIER) //
596 .changeType(CHANGE_TYPE) //
597 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
598 .addAdditionalField(additionalField) //
601 String parsedString = message.getParsed();
602 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
603 JsonElement jsonElement = new JsonParser().parse(parsedString);
604 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
605 .getJsonObjectFromAnArray(jsonElement);
607 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(jsonElement))).expectSubscription()
608 .expectComplete().verify();