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;
26 import com.google.gson.JsonElement;
27 import com.google.gson.JsonParser;
28 import java.net.URISyntaxException;
29 import java.util.ArrayList;
30 import java.util.List;
31 import java.util.Optional;
32 import org.junit.jupiter.api.Test;
33 import org.mockito.Mockito;
34 import org.onap.dcaegen2.collectors.datafile.ftp.Scheme;
35 import org.onap.dcaegen2.collectors.datafile.model.FileData;
36 import org.onap.dcaegen2.collectors.datafile.model.FileReadyMessage;
37 import org.onap.dcaegen2.collectors.datafile.model.ImmutableFileData;
38 import org.onap.dcaegen2.collectors.datafile.model.ImmutableFileReadyMessage;
39 import org.onap.dcaegen2.collectors.datafile.model.ImmutableMessageMetaData;
40 import org.onap.dcaegen2.collectors.datafile.model.MessageMetaData;
41 import org.onap.dcaegen2.collectors.datafile.utils.JsonMessage;
42 import org.onap.dcaegen2.collectors.datafile.utils.JsonMessage.AdditionalField;
43 import org.onap.dcaegen2.collectors.datafile.utils.LoggingUtils;
44 import reactor.core.publisher.Mono;
45 import reactor.test.StepVerifier;
48 * Tests the JsonMessageParser.
50 * @author <a href="mailto:przemyslaw.wasala@nokia.com">Przemysław Wąsala</a> on 5/8/18
51 * @author <a href="mailto:henrik.b.andersson@est.tech">Henrik Andersson</a>
53 class JsonMessageParserTest {
54 private static final String ERROR_LOG_TAG = "[ERROR] ";
56 private static final String NR_RADIO_ERICSSON_EVENT_NAME = "Noti_NrRadio-Ericsson_FileReady";
57 private static final String PRODUCT_NAME = "NrRadio";
58 private static final String VENDOR_NAME = "Ericsson";
59 private static final String LAST_EPOCH_MICROSEC = "1519837825682";
60 private static final String SOURCE_NAME = "5GRAN_DU";
61 private static final String START_EPOCH_MICROSEC = "1519837825682";
62 private static final String TIME_ZONE_OFFSET = "UTC+05:00";
63 private static final String PM_FILE_NAME = "A20161224.1030-1045.bin.gz";
64 private static final String LOCATION = "ftpes://192.168.0.101:22/ftp/rop/" + PM_FILE_NAME;
65 private static final String GZIP_COMPRESSION = "gzip";
66 private static final String FILE_FORMAT_TYPE = "org.3GPP.32.435#measCollec";
67 private static final String FILE_FORMAT_VERSION = "V10";
68 private static final String CHANGE_IDENTIFIER = "PM_MEAS_FILES";
69 private static final String CHANGE_TYPE = "FileReady";
70 private static final String INCORRECT_CHANGE_TYPE = "IncorrectFileReady";
71 private static final String NOTIFICATION_FIELDS_VERSION = "1.0";
74 void whenPassingCorrectJson_oneFileReadyMessage() throws URISyntaxException {
75 AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
76 .name(PM_FILE_NAME) //
77 .location(LOCATION) //
78 .compression(GZIP_COMPRESSION) //
79 .fileFormatType(FILE_FORMAT_TYPE) //
80 .fileFormatVersion(FILE_FORMAT_VERSION) //
82 JsonMessage message = new JsonMessage.JsonMessageBuilder() //
83 .eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
84 .changeIdentifier(CHANGE_IDENTIFIER) //
85 .changeType(CHANGE_TYPE) //
86 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
87 .addAdditionalField(additionalField) //
90 MessageMetaData messageMetaData = ImmutableMessageMetaData.builder() //
91 .productName(PRODUCT_NAME) //
92 .vendorName(VENDOR_NAME) //
93 .lastEpochMicrosec(LAST_EPOCH_MICROSEC) //
94 .sourceName(SOURCE_NAME) //
95 .startEpochMicrosec(START_EPOCH_MICROSEC) //
96 .timeZoneOffset(TIME_ZONE_OFFSET) //
97 .changeIdentifier(CHANGE_IDENTIFIER) //
98 .changeType(CHANGE_TYPE) //
100 FileData expectedFileData = ImmutableFileData.builder() //
101 .name(PM_FILE_NAME) //
102 .location(LOCATION) //
103 .scheme(Scheme.FTPS) //
104 .compression(GZIP_COMPRESSION) //
105 .fileFormatType(FILE_FORMAT_TYPE) //
106 .fileFormatVersion(FILE_FORMAT_VERSION) //
107 .messageMetaData(messageMetaData) //
109 List<FileData> files = new ArrayList<>();
110 files.add(expectedFileData);
111 FileReadyMessage expectedMessage = ImmutableFileReadyMessage.builder() //
115 String messageString = message.toString();
116 String parsedString = message.getParsed();
117 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
118 JsonElement jsonElement = new JsonParser().parse(parsedString);
119 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
120 .getJsonObjectFromAnArray(jsonElement);
122 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(messageString)))
123 .expectSubscription().expectNext(expectedMessage).verifyComplete();
127 void whenPassingCorrectJsonWithTwoEvents_twoMessages() {
128 AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
129 .name(PM_FILE_NAME) //
130 .location(LOCATION) //
131 .compression(GZIP_COMPRESSION) //
132 .fileFormatType(FILE_FORMAT_TYPE) //
133 .fileFormatVersion(FILE_FORMAT_VERSION) //
135 JsonMessage message = new JsonMessage.JsonMessageBuilder() //
136 .eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
137 .changeIdentifier(CHANGE_IDENTIFIER) //
138 .changeType(CHANGE_TYPE) //
139 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
140 .addAdditionalField(additionalField) //
143 MessageMetaData messageMetaData = ImmutableMessageMetaData.builder() //
144 .productName(PRODUCT_NAME) //
145 .vendorName(VENDOR_NAME) //
146 .lastEpochMicrosec(LAST_EPOCH_MICROSEC) //
147 .sourceName(SOURCE_NAME) //
148 .startEpochMicrosec(START_EPOCH_MICROSEC) //
149 .timeZoneOffset(TIME_ZONE_OFFSET) //
150 .changeIdentifier(CHANGE_IDENTIFIER) //
151 .changeType(CHANGE_TYPE) //
153 FileData expectedFileData = ImmutableFileData.builder() //
154 .name(PM_FILE_NAME) //
155 .location(LOCATION) //
156 .scheme(Scheme.FTPS) //
157 .compression(GZIP_COMPRESSION) //
158 .fileFormatType(FILE_FORMAT_TYPE) //
159 .fileFormatVersion(FILE_FORMAT_VERSION) //
160 .messageMetaData(messageMetaData) //
162 List<FileData> files = new ArrayList<>();
163 files.add(expectedFileData);
164 FileReadyMessage expectedMessage = ImmutableFileReadyMessage.builder() //
168 String parsedString = message.getParsed();
169 String messageString = "[" + parsedString + "," + parsedString + "]";
170 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
171 JsonElement jsonElement = new JsonParser().parse(parsedString);
172 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
173 .getJsonObjectFromAnArray(jsonElement);
175 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(messageString)))
176 .expectSubscription().expectNext(expectedMessage).expectNext(expectedMessage).verifyComplete();
180 void whenPassingCorrectJsonWithoutLocation_noMessage() {
181 AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
182 .name(PM_FILE_NAME) //
183 .compression(GZIP_COMPRESSION) //
184 .fileFormatType(FILE_FORMAT_TYPE) //
185 .fileFormatVersion(FILE_FORMAT_VERSION) //
187 JsonMessage message = new JsonMessage.JsonMessageBuilder() //
188 .eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
189 .changeIdentifier(CHANGE_IDENTIFIER) //
190 .changeType(CHANGE_TYPE) //
191 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
192 .addAdditionalField(additionalField) //
195 String messageString = message.toString();
196 String parsedString = message.getParsed();
197 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
198 JsonElement jsonElement = new JsonParser().parse(parsedString);
199 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
200 .getJsonObjectFromAnArray(jsonElement);
202 ListAppender<ILoggingEvent> logAppender = LoggingUtils.getLogListAppender(JsonMessageParser.class);
203 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(messageString)))
204 .expectSubscription().expectNextCount(0).verifyComplete();
206 assertTrue(logAppender.list.toString()
207 .contains("[ERROR] VES event parsing. File information wrong. " + "Missing location."));
208 assertTrue(logAppender.list.get(0).toString().contains("sourceName=5GRAN_DU"));
212 void whenPassingCorrectJsonWrongScheme_noMessage() {
213 AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
214 .name(PM_FILE_NAME) //
215 .location("http://location.xml") //
216 .compression(GZIP_COMPRESSION) //
217 .fileFormatType(FILE_FORMAT_TYPE) //
218 .fileFormatVersion(FILE_FORMAT_VERSION) //
220 JsonMessage message = new JsonMessage.JsonMessageBuilder() //
221 .eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
222 .changeIdentifier(CHANGE_IDENTIFIER) //
223 .changeType(CHANGE_TYPE) //
224 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
225 .addAdditionalField(additionalField) //
228 String messageString = message.toString();
229 String parsedString = message.getParsed();
230 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
231 JsonElement jsonElement = new JsonParser().parse(parsedString);
232 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
233 .getJsonObjectFromAnArray(jsonElement);
235 ListAppender<ILoggingEvent> logAppender = LoggingUtils.getLogListAppender(JsonMessageParser.class);
236 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(messageString)))
237 .expectSubscription().expectNextCount(0).verifyComplete();
239 assertTrue("Error missing in log",
240 logAppender.list.toString()
241 .contains(ERROR_LOG_TAG + JsonMessageParser.ERROR_MSG_VES_EVENT_PARSING
242 + Scheme.DFC_DOES_NOT_SUPPORT_PROTOCOL_ERROR_MSG + "http"
243 + Scheme.SUPPORTED_PROTOCOLS_ERROR_MESSAGE + ". Location: http://location.xml"));
244 assertTrue("Missing sourceName in log", logAppender.list.toString().contains("sourceName=5GRAN_DU"));
248 void whenPassingCorrectJsonWithTwoEventsFirstNoHeader_oneFileDatan() {
249 AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
250 .name(PM_FILE_NAME) //
251 .location(LOCATION) //
252 .compression(GZIP_COMPRESSION) //
253 .fileFormatType(FILE_FORMAT_TYPE) //
254 .fileFormatVersion(FILE_FORMAT_VERSION) //
256 JsonMessage message = new JsonMessage.JsonMessageBuilder() //
257 .eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
258 .changeIdentifier(CHANGE_IDENTIFIER) //
259 .changeType(CHANGE_TYPE) //
260 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
261 .addAdditionalField(additionalField) //
264 MessageMetaData messageMetaData = ImmutableMessageMetaData.builder() //
265 .productName(PRODUCT_NAME) //
266 .vendorName(VENDOR_NAME) //
267 .lastEpochMicrosec(LAST_EPOCH_MICROSEC) //
268 .sourceName(SOURCE_NAME) //
269 .startEpochMicrosec(START_EPOCH_MICROSEC) //
270 .timeZoneOffset(TIME_ZONE_OFFSET) //
271 .changeIdentifier(CHANGE_IDENTIFIER) //
272 .changeType(CHANGE_TYPE) //
274 FileData expectedFileData = ImmutableFileData.builder() //
275 .name(PM_FILE_NAME) //
276 .location(LOCATION) //
277 .scheme(Scheme.FTPS) //
278 .compression(GZIP_COMPRESSION) //
279 .fileFormatType(FILE_FORMAT_TYPE) //
280 .fileFormatVersion(FILE_FORMAT_VERSION) //
281 .messageMetaData(messageMetaData) //
283 List<FileData> files = new ArrayList<>();
284 files.add(expectedFileData);
285 FileReadyMessage expectedMessage = ImmutableFileReadyMessage.builder() //
289 String parsedString = message.getParsed();
290 String messageString = "[{\"event\":{}}," + parsedString + "]";
291 JsonMessageParser jsonMessageParserUnderTest = new JsonMessageParser();
293 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(messageString)))
294 .expectSubscription().expectNext(expectedMessage).verifyComplete();
298 void whenPassingCorrectJsonWithFaultyEventName_noFileData() {
299 AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
300 .location(LOCATION) //
301 .compression(GZIP_COMPRESSION) //
302 .fileFormatType(FILE_FORMAT_TYPE) //
303 .fileFormatVersion(FILE_FORMAT_VERSION) //
305 JsonMessage message = new JsonMessage.JsonMessageBuilder() //
306 .eventName("Faulty event name") //
307 .changeIdentifier(CHANGE_IDENTIFIER) //
308 .changeType(CHANGE_TYPE) //
309 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
310 .addAdditionalField(additionalField) //
313 String messageString = message.toString();
314 String parsedString = message.getParsed();
315 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
316 JsonElement jsonElement = new JsonParser().parse(parsedString);
317 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
318 .getJsonObjectFromAnArray(jsonElement);
320 ListAppender<ILoggingEvent> logAppender = LoggingUtils.getLogListAppender(JsonMessageParser.class);
321 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(messageString)))
322 .expectSubscription().expectComplete().verify();
324 assertTrue("Error missing in log", logAppender.list.toString().contains(ERROR_LOG_TAG
325 + JsonMessageParser.ERROR_MSG_VES_EVENT_PARSING
326 + "Can not get PRODUCT_NAME from eventName, eventName is not in correct format: Faulty event name"));
330 void whenPassingCorrectJsonWithoutName_noFileData() {
331 AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
332 .location(LOCATION) //
333 .compression(GZIP_COMPRESSION) //
334 .fileFormatType(FILE_FORMAT_TYPE) //
335 .fileFormatVersion(FILE_FORMAT_VERSION) //
337 JsonMessage message = new JsonMessage.JsonMessageBuilder() //
338 .eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
339 .changeIdentifier(CHANGE_IDENTIFIER) //
340 .changeType(CHANGE_TYPE) //
341 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
342 .addAdditionalField(additionalField) //
345 String messageString = message.toString();
346 String parsedString = message.getParsed();
347 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
348 JsonElement jsonElement = new JsonParser().parse(parsedString);
349 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
350 .getJsonObjectFromAnArray(jsonElement);
352 ListAppender<ILoggingEvent> logAppender = LoggingUtils.getLogListAppender(JsonMessageParser.class);
353 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(messageString)))
354 .expectSubscription().expectNextCount(0).verifyComplete();
356 assertTrue("Error missing in log",
357 logAppender.list.toString()
358 .contains(ERROR_LOG_TAG + JsonMessageParser.ERROR_MSG_VES_EVENT_PARSING
359 + "File information wrong. Missing data: [name] Data: "
360 + message.getAdditionalFields().get(0).toString()));
364 void whenPassingCorrectJsonWithoutAdditionalFields_noFileData() {
365 JsonMessage message = new JsonMessage.JsonMessageBuilder() //
366 .eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
367 .changeIdentifier(CHANGE_IDENTIFIER) //
368 .changeType(CHANGE_TYPE) //
369 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
372 String messageString = message.toString();
373 String parsedString = message.getParsed();
374 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
375 JsonElement jsonElement = new JsonParser().parse(parsedString);
376 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
377 .getJsonObjectFromAnArray(jsonElement);
379 ListAppender<ILoggingEvent> logAppender = LoggingUtils.getLogListAppender(JsonMessageParser.class);
380 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(messageString)))
381 .expectSubscription().expectNextCount(0).verifyComplete();
383 assertTrue("Error missing in log",
384 logAppender.list.toString().contains(ERROR_LOG_TAG + JsonMessageParser.ERROR_MSG_VES_EVENT_PARSING
385 + "Missing arrayOfNamedHashMap in message. " + message.getParsed()));
389 void whenPassingCorrectJsonWithoutCompression_noFileData() {
390 AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
391 .name(PM_FILE_NAME) //
392 .location(LOCATION) //
393 .fileFormatType(FILE_FORMAT_TYPE) //
394 .fileFormatVersion(FILE_FORMAT_VERSION) //
396 JsonMessage message = new JsonMessage.JsonMessageBuilder() //
397 .eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
398 .changeIdentifier(CHANGE_IDENTIFIER) //
399 .changeType(CHANGE_TYPE) //
400 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
401 .addAdditionalField(additionalField) //
404 String messageString = message.toString();
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 ListAppender<ILoggingEvent> logAppender = LoggingUtils.getLogListAppender(JsonMessageParser.class);
412 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(messageString)))
413 .expectSubscription().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 messageString = message.toString();
439 String parsedString = message.getParsed();
440 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
441 JsonElement jsonElement = new JsonParser().parse(parsedString);
442 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
443 .getJsonObjectFromAnArray(jsonElement);
445 ListAppender<ILoggingEvent> logAppender = LoggingUtils.getLogListAppender(JsonMessageParser.class);
446 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(messageString)))
447 .expectSubscription().expectNextCount(0).verifyComplete();
449 assertTrue("Error missing in log",
450 logAppender.list.toString()
451 .contains(ERROR_LOG_TAG + JsonMessageParser.ERROR_MSG_VES_EVENT_PARSING
452 + "File information wrong. Missing data: [fileFormatType] Data: "
453 + message.getAdditionalFields().get(0).toString()));
457 void whenPassingOneCorrectJsonWithoutFileFormatVersionAndOneCorrect_oneFileData() {
458 AdditionalField additionalFaultyField = new JsonMessage.AdditionalFieldBuilder() //
459 .name(PM_FILE_NAME) //
460 .location(LOCATION) //
461 .compression(GZIP_COMPRESSION) //
462 .fileFormatType(FILE_FORMAT_TYPE) //
464 AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
465 .name(PM_FILE_NAME) //
466 .location(LOCATION) //
467 .compression(GZIP_COMPRESSION) //
468 .fileFormatType(FILE_FORMAT_TYPE) //
469 .fileFormatVersion(FILE_FORMAT_VERSION) //
471 JsonMessage message = new JsonMessage.JsonMessageBuilder() //
472 .eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
473 .changeIdentifier(CHANGE_IDENTIFIER) //
474 .changeType(CHANGE_TYPE) //
475 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
476 .addAdditionalField(additionalFaultyField) //
477 .addAdditionalField(additionalField) //
480 MessageMetaData messageMetaData = ImmutableMessageMetaData.builder() //
481 .productName(PRODUCT_NAME) //
482 .vendorName(VENDOR_NAME) //
483 .lastEpochMicrosec(LAST_EPOCH_MICROSEC) //
484 .sourceName(SOURCE_NAME) //
485 .startEpochMicrosec(START_EPOCH_MICROSEC) //
486 .timeZoneOffset(TIME_ZONE_OFFSET) //
487 .changeIdentifier(CHANGE_IDENTIFIER) //
488 .changeType(CHANGE_TYPE) //
490 FileData expectedFileData = ImmutableFileData.builder() //
491 .name(PM_FILE_NAME) //
492 .location(LOCATION) //
493 .scheme(Scheme.FTPS) //
494 .compression(GZIP_COMPRESSION) //
495 .fileFormatType(FILE_FORMAT_TYPE) //
496 .fileFormatVersion(FILE_FORMAT_VERSION) //
497 .messageMetaData(messageMetaData) //
499 List<FileData> files = new ArrayList<>();
500 files.add(expectedFileData);
501 FileReadyMessage expectedMessage = ImmutableFileReadyMessage.builder() //
505 String messageString = message.toString();
506 String parsedString = message.getParsed();
507 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
508 JsonElement jsonElement = new JsonParser().parse(parsedString);
509 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
510 .getJsonObjectFromAnArray(jsonElement);
512 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(messageString)))
513 .expectSubscription().expectNext(expectedMessage).verifyComplete();
517 void whenPassingJsonWithoutMandatoryHeaderInformation_noFileData() {
518 JsonMessage message = new JsonMessage.JsonMessageBuilder() //
519 .eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
522 String incorrectMessageString = message.toString();
523 String parsedString = message.getParsed();
524 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
525 JsonElement jsonElement = new JsonParser().parse(parsedString);
526 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
527 .getJsonObjectFromAnArray(jsonElement);
529 ListAppender<ILoggingEvent> logAppender = LoggingUtils.getLogListAppender(JsonMessageParser.class);
530 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(incorrectMessageString)))
531 .expectSubscription().expectComplete().verify();
533 assertTrue("Error missing in log",
534 logAppender.list.toString()
535 .contains(ERROR_LOG_TAG + JsonMessageParser.ERROR_MSG_VES_EVENT_PARSING
536 + "Missing data: [changeIdentifier, changeType, notificationFieldsVersion]. "
537 + "Change type is wrong: Expected: FileReady Message: " + message.getParsed()));
541 void whenPassingJsonWithNullJsonElement_noFileData() {
542 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
543 JsonElement jsonElement = new JsonParser().parse("{}");
545 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
546 .getJsonObjectFromAnArray(jsonElement);
548 ListAppender<ILoggingEvent> logAppender = LoggingUtils.getLogListAppender(JsonMessageParser.class);
549 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just("[{}]"))).expectSubscription()
550 .expectComplete().verify();
552 assertTrue("Error missing in log",
553 logAppender.list.toString().contains(ERROR_LOG_TAG + "Incorrect JsonObject - missing header. "));
557 void whenPassingCorrectJsonWithIncorrectChangeType_noFileData() {
558 AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
559 .name(PM_FILE_NAME) //
560 .location(LOCATION) //
561 .compression(GZIP_COMPRESSION) //
562 .fileFormatVersion(FILE_FORMAT_VERSION) //
564 JsonMessage message = new JsonMessage.JsonMessageBuilder() //
565 .eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
566 .changeIdentifier(CHANGE_IDENTIFIER) //
567 .changeType(INCORRECT_CHANGE_TYPE) //
568 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
569 .addAdditionalField(additionalField) //
572 String messageString = message.toString();
573 String parsedString = message.getParsed();
574 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
575 JsonElement jsonElement = new JsonParser().parse(parsedString);
576 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
577 .getJsonObjectFromAnArray(jsonElement);
579 ListAppender<ILoggingEvent> logAppender = LoggingUtils.getLogListAppender(JsonMessageParser.class);
580 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(messageString)))
581 .expectSubscription().expectNextCount(0).expectComplete().verify();
583 assertTrue("Error missing in log",
584 logAppender.list.toString()
585 .contains(ERROR_LOG_TAG + JsonMessageParser.ERROR_MSG_VES_EVENT_PARSING
586 + " Change type is wrong: " + INCORRECT_CHANGE_TYPE + " Expected: FileReady Message: "
587 + message.getParsed()));