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 CHANGE_TYPE = "FileReady";
74 private static final String INCORRECT_CHANGE_TYPE = "IncorrectFileReady";
75 private static final String NOTIFICATION_FIELDS_VERSION = "1.0";
78 void whenPassingCorrectJson_oneFileReadyMessage() throws URISyntaxException {
79 AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
80 .name(PM_FILE_NAME) //
81 .location(LOCATION) //
82 .compression(GZIP_COMPRESSION) //
83 .fileFormatType(FILE_FORMAT_TYPE) //
84 .fileFormatVersion(FILE_FORMAT_VERSION) //
86 JsonMessage message = new JsonMessage.JsonMessageBuilder() //
87 .eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
88 .changeIdentifier(CHANGE_IDENTIFIER) //
89 .changeType(CHANGE_TYPE) //
90 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
91 .addAdditionalField(additionalField) //
94 MessageMetaData messageMetaData = ImmutableMessageMetaData.builder() //
95 .productName(PRODUCT_NAME) //
96 .vendorName(VENDOR_NAME) //
97 .lastEpochMicrosec(LAST_EPOCH_MICROSEC) //
98 .sourceName(SOURCE_NAME) //
99 .startEpochMicrosec(START_EPOCH_MICROSEC) //
100 .timeZoneOffset(TIME_ZONE_OFFSET) //
101 .changeIdentifier(CHANGE_IDENTIFIER) //
102 .changeType(CHANGE_TYPE) //
104 FileData expectedFileData = ImmutableFileData.builder() //
105 .name(PM_FILE_NAME) //
106 .location(LOCATION) //
107 .scheme(Scheme.FTPS) //
108 .compression(GZIP_COMPRESSION) //
109 .fileFormatType(FILE_FORMAT_TYPE) //
110 .fileFormatVersion(FILE_FORMAT_VERSION) //
111 .messageMetaData(messageMetaData) //
113 List<FileData> files = new ArrayList<>();
114 files.add(expectedFileData);
115 FileReadyMessage expectedMessage = ImmutableFileReadyMessage.builder() //
119 String messageString = message.toString();
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(messageString)))
127 .expectSubscription().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 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
177 .getJsonObjectFromAnArray(jsonElement);
179 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(messageString)))
180 .expectSubscription().expectNext(expectedMessage).expectNext(expectedMessage).verifyComplete();
184 void whenPassingCorrectJsonWithoutLocation_noMessage() {
185 AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
186 .name(PM_FILE_NAME) //
187 .compression(GZIP_COMPRESSION) //
188 .fileFormatType(FILE_FORMAT_TYPE) //
189 .fileFormatVersion(FILE_FORMAT_VERSION) //
191 JsonMessage message = new JsonMessage.JsonMessageBuilder() //
192 .eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
193 .changeIdentifier(CHANGE_IDENTIFIER) //
194 .changeType(CHANGE_TYPE) //
195 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
196 .addAdditionalField(additionalField) //
199 String messageString = message.toString();
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 ListAppender<ILoggingEvent> logAppender = LoggingUtils.getLogListAppender(JsonMessageParser.class);
207 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(messageString)))
208 .expectSubscription().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 messageString = message.toString();
233 String parsedString = message.getParsed();
234 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
235 JsonElement jsonElement = new JsonParser().parse(parsedString);
236 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
237 .getJsonObjectFromAnArray(jsonElement);
239 ListAppender<ILoggingEvent> logAppender = LoggingUtils.getLogListAppender(JsonMessageParser.class);
240 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(messageString)))
241 .expectSubscription().expectNextCount(0).verifyComplete();
243 assertTrue("Error missing in log",
244 logAppender.list.toString()
245 .contains(ERROR_LOG_TAG + JsonMessageParser.ERROR_MSG_VES_EVENT_PARSING
246 + Scheme.DFC_DOES_NOT_SUPPORT_PROTOCOL_ERROR_MSG + "http" + Scheme.SUPPORTED_PROTOCOLS_ERROR_MESSAGE
247 + ". Location: http://location.xml"));
248 assertTrue("Missing sourceName in log", logAppender.list.toString().contains("sourceName=5GRAN_DU"));
252 void whenPassingCorrectJsonWithTwoEventsFirstNoHeader_oneFileDatan() {
253 AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
254 .name(PM_FILE_NAME) //
255 .location(LOCATION) //
256 .compression(GZIP_COMPRESSION) //
257 .fileFormatType(FILE_FORMAT_TYPE) //
258 .fileFormatVersion(FILE_FORMAT_VERSION) //
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 .addAdditionalField(additionalField) //
268 MessageMetaData messageMetaData = ImmutableMessageMetaData.builder() //
269 .productName(PRODUCT_NAME) //
270 .vendorName(VENDOR_NAME) //
271 .lastEpochMicrosec(LAST_EPOCH_MICROSEC) //
272 .sourceName(SOURCE_NAME) //
273 .startEpochMicrosec(START_EPOCH_MICROSEC) //
274 .timeZoneOffset(TIME_ZONE_OFFSET) //
275 .changeIdentifier(CHANGE_IDENTIFIER) //
276 .changeType(CHANGE_TYPE) //
278 FileData expectedFileData = ImmutableFileData.builder() //
279 .name(PM_FILE_NAME) //
280 .location(LOCATION) //
281 .scheme(Scheme.FTPS) //
282 .compression(GZIP_COMPRESSION) //
283 .fileFormatType(FILE_FORMAT_TYPE) //
284 .fileFormatVersion(FILE_FORMAT_VERSION) //
285 .messageMetaData(messageMetaData) //
287 List<FileData> files = new ArrayList<>();
288 files.add(expectedFileData);
289 FileReadyMessage expectedMessage = ImmutableFileReadyMessage.builder() //
293 String parsedString = message.getParsed();
294 String messageString = "[{\"event\":{}}," + parsedString + "]";
295 JsonMessageParser jsonMessageParserUnderTest = new JsonMessageParser();
297 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(messageString)))
298 .expectSubscription().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 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);
324 ListAppender<ILoggingEvent> logAppender = LoggingUtils.getLogListAppender(JsonMessageParser.class);
325 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(messageString)))
326 .expectSubscription().expectComplete().verify();
328 assertTrue("Error missing in log",
329 logAppender.list.toString().contains(ERROR_LOG_TAG + JsonMessageParser.ERROR_MSG_VES_EVENT_PARSING
330 + "Can not get PRODUCT_NAME from eventName, eventName is not in correct format: Faulty event name"));
334 void whenPassingCorrectJsonWithoutName_noFileData() {
335 AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
336 .location(LOCATION) //
337 .compression(GZIP_COMPRESSION) //
338 .fileFormatType(FILE_FORMAT_TYPE) //
339 .fileFormatVersion(FILE_FORMAT_VERSION) //
341 JsonMessage message = new JsonMessage.JsonMessageBuilder() //
342 .eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
343 .changeIdentifier(CHANGE_IDENTIFIER) //
344 .changeType(CHANGE_TYPE) //
345 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
346 .addAdditionalField(additionalField) //
349 String messageString = message.toString();
350 String parsedString = message.getParsed();
351 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
352 JsonElement jsonElement = new JsonParser().parse(parsedString);
353 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
354 .getJsonObjectFromAnArray(jsonElement);
356 ListAppender<ILoggingEvent> logAppender = LoggingUtils.getLogListAppender(JsonMessageParser.class);
357 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(messageString)))
358 .expectSubscription().expectNextCount(0).verifyComplete();
360 assertTrue("Error missing in log",
361 logAppender.list.toString()
362 .contains(ERROR_LOG_TAG + JsonMessageParser.ERROR_MSG_VES_EVENT_PARSING
363 + "File information wrong. Missing data: [name] Data: "
364 + message.getAdditionalFields().get(0).toString()));
368 void whenPassingCorrectJsonWithoutAdditionalFields_noFileData() {
369 JsonMessage message = new JsonMessage.JsonMessageBuilder() //
370 .eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
371 .changeIdentifier(CHANGE_IDENTIFIER) //
372 .changeType(CHANGE_TYPE) //
373 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
376 String messageString = message.toString();
377 String parsedString = message.getParsed();
378 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
379 JsonElement jsonElement = new JsonParser().parse(parsedString);
380 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
381 .getJsonObjectFromAnArray(jsonElement);
383 ListAppender<ILoggingEvent> logAppender = LoggingUtils.getLogListAppender(JsonMessageParser.class);
384 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(messageString)))
385 .expectSubscription().expectNextCount(0).verifyComplete();
387 assertTrue("Error missing in log",
388 logAppender.list.toString().contains(ERROR_LOG_TAG + JsonMessageParser.ERROR_MSG_VES_EVENT_PARSING
389 + "Missing arrayOfNamedHashMap in message. " + message.getParsed()));
393 void whenPassingCorrectJsonWithoutCompression_noFileData() {
394 AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
395 .name(PM_FILE_NAME) //
396 .location(LOCATION) //
397 .fileFormatType(FILE_FORMAT_TYPE) //
398 .fileFormatVersion(FILE_FORMAT_VERSION) //
400 JsonMessage message = new JsonMessage.JsonMessageBuilder() //
401 .eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
402 .changeIdentifier(CHANGE_IDENTIFIER) //
403 .changeType(CHANGE_TYPE) //
404 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
405 .addAdditionalField(additionalField) //
408 String messageString = message.toString();
409 String parsedString = message.getParsed();
410 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
411 JsonElement jsonElement = new JsonParser().parse(parsedString);
412 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
413 .getJsonObjectFromAnArray(jsonElement);
415 ListAppender<ILoggingEvent> logAppender = LoggingUtils.getLogListAppender(JsonMessageParser.class);
416 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(messageString)))
417 .expectSubscription().expectNextCount(0).verifyComplete();
419 assertTrue("Error missing in log",
420 logAppender.list.toString()
421 .contains(ERROR_LOG_TAG + JsonMessageParser.ERROR_MSG_VES_EVENT_PARSING
422 + "File information wrong. Missing data: [compression] Data: "
423 + message.getAdditionalFields().get(0).toString()));
427 void whenPassingCorrectJsonWithoutFileFormatType_noFileData() {
428 AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
429 .name(PM_FILE_NAME) //
430 .location(LOCATION) //
431 .compression(GZIP_COMPRESSION) //
432 .fileFormatVersion(FILE_FORMAT_VERSION) //
434 JsonMessage message = new JsonMessage.JsonMessageBuilder() //
435 .eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
436 .changeIdentifier(CHANGE_IDENTIFIER) //
437 .changeType(CHANGE_TYPE) //
438 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
439 .addAdditionalField(additionalField) //
442 String messageString = message.toString();
443 String parsedString = message.getParsed();
444 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
445 JsonElement jsonElement = new JsonParser().parse(parsedString);
446 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
447 .getJsonObjectFromAnArray(jsonElement);
449 ListAppender<ILoggingEvent> logAppender = LoggingUtils.getLogListAppender(JsonMessageParser.class);
450 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(messageString)))
451 .expectSubscription().expectNextCount(0).verifyComplete();
453 assertTrue("Error missing in log",
454 logAppender.list.toString()
455 .contains(ERROR_LOG_TAG + JsonMessageParser.ERROR_MSG_VES_EVENT_PARSING
456 + "File information wrong. Missing data: [fileFormatType] Data: "
457 + message.getAdditionalFields().get(0).toString()));
461 void whenPassingOneCorrectJsonWithoutFileFormatVersionAndOneCorrect_oneFileData() {
462 AdditionalField additionalFaultyField = new JsonMessage.AdditionalFieldBuilder() //
463 .name(PM_FILE_NAME) //
464 .location(LOCATION) //
465 .compression(GZIP_COMPRESSION) //
466 .fileFormatType(FILE_FORMAT_TYPE) //
468 AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
469 .name(PM_FILE_NAME) //
470 .location(LOCATION) //
471 .compression(GZIP_COMPRESSION) //
472 .fileFormatType(FILE_FORMAT_TYPE) //
473 .fileFormatVersion(FILE_FORMAT_VERSION) //
475 JsonMessage message = new JsonMessage.JsonMessageBuilder() //
476 .eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
477 .changeIdentifier(CHANGE_IDENTIFIER) //
478 .changeType(CHANGE_TYPE) //
479 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
480 .addAdditionalField(additionalFaultyField) //
481 .addAdditionalField(additionalField) //
484 MessageMetaData messageMetaData = ImmutableMessageMetaData.builder() //
485 .productName(PRODUCT_NAME) //
486 .vendorName(VENDOR_NAME) //
487 .lastEpochMicrosec(LAST_EPOCH_MICROSEC) //
488 .sourceName(SOURCE_NAME) //
489 .startEpochMicrosec(START_EPOCH_MICROSEC) //
490 .timeZoneOffset(TIME_ZONE_OFFSET) //
491 .changeIdentifier(CHANGE_IDENTIFIER) //
492 .changeType(CHANGE_TYPE) //
494 FileData expectedFileData = ImmutableFileData.builder() //
495 .name(PM_FILE_NAME) //
496 .location(LOCATION) //
497 .scheme(Scheme.FTPS) //
498 .compression(GZIP_COMPRESSION) //
499 .fileFormatType(FILE_FORMAT_TYPE) //
500 .fileFormatVersion(FILE_FORMAT_VERSION) //
501 .messageMetaData(messageMetaData) //
503 List<FileData> files = new ArrayList<>();
504 files.add(expectedFileData);
505 FileReadyMessage expectedMessage = ImmutableFileReadyMessage.builder() //
509 String messageString = message.toString();
510 String parsedString = message.getParsed();
511 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
512 JsonElement jsonElement = new JsonParser().parse(parsedString);
513 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
514 .getJsonObjectFromAnArray(jsonElement);
516 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(messageString)))
517 .expectSubscription().expectNext(expectedMessage).verifyComplete();
521 void whenPassingJsonWithoutMandatoryHeaderInformation_noFileData() {
522 JsonMessage message = new JsonMessage.JsonMessageBuilder() //
523 .eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
526 String incorrectMessageString = message.toString();
527 String parsedString = message.getParsed();
528 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
529 JsonElement jsonElement = new JsonParser().parse(parsedString);
530 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
531 .getJsonObjectFromAnArray(jsonElement);
533 ListAppender<ILoggingEvent> logAppender = LoggingUtils.getLogListAppender(JsonMessageParser.class);
534 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(incorrectMessageString)))
535 .expectSubscription().expectComplete().verify();
537 assertTrue("Error missing in log",
538 logAppender.list.toString()
539 .contains(ERROR_LOG_TAG + JsonMessageParser.ERROR_MSG_VES_EVENT_PARSING
540 + "Missing data: [changeIdentifier, changeType, notificationFieldsVersion]. "
541 + "Change type is wrong: Expected: FileReady Message: " + message.getParsed()));
545 void whenPassingJsonWithNullJsonElement_noFileData() {
546 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
547 JsonElement jsonElement = new JsonParser().parse("{}");
549 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
550 .getJsonObjectFromAnArray(jsonElement);
552 ListAppender<ILoggingEvent> logAppender = LoggingUtils.getLogListAppender(JsonMessageParser.class);
553 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just("[{}]"))).expectSubscription()
554 .expectComplete().verify();
556 assertTrue("Error missing in log",
557 logAppender.list.toString().contains(ERROR_LOG_TAG + "Incorrect JsonObject - missing header. "));
561 void whenPassingCorrectJsonWithIncorrectChangeType_noFileData() {
562 AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
563 .name(PM_FILE_NAME) //
564 .location(LOCATION) //
565 .compression(GZIP_COMPRESSION) //
566 .fileFormatVersion(FILE_FORMAT_VERSION) //
568 JsonMessage message = new JsonMessage.JsonMessageBuilder() //
569 .eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
570 .changeIdentifier(CHANGE_IDENTIFIER) //
571 .changeType(INCORRECT_CHANGE_TYPE) //
572 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
573 .addAdditionalField(additionalField) //
576 String messageString = message.toString();
577 String parsedString = message.getParsed();
578 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
579 JsonElement jsonElement = new JsonParser().parse(parsedString);
580 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
581 .getJsonObjectFromAnArray(jsonElement);
583 ListAppender<ILoggingEvent> logAppender = LoggingUtils.getLogListAppender(JsonMessageParser.class);
584 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(messageString)))
585 .expectSubscription().expectNextCount(0).expectComplete().verify();
587 assertTrue("Error missing in log",
588 logAppender.list.toString()
589 .contains(ERROR_LOG_TAG + JsonMessageParser.ERROR_MSG_VES_EVENT_PARSING + " Change type is wrong: "
590 + INCORRECT_CHANGE_TYPE + " Expected: FileReady Message: " + message.getParsed()));