2 * ============LICENSE_START=======================================================
3 * Copyright (C) 2018 NOKIA Intellectual Property, 2018-2019 Nordix Foundation. All rights reserved.
4 * Copyright (C) 2020 Nokia. All rights reserved.
5 * ================================================================================
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
17 * ============LICENSE_END=========================================================
20 package org.onap.dcaegen2.collectors.datafile.service;
22 import static org.junit.Assert.assertTrue;
23 import static org.mockito.Mockito.spy;
25 import ch.qos.logback.classic.spi.ILoggingEvent;
26 import ch.qos.logback.core.read.ListAppender;
28 import com.google.gson.JsonElement;
29 import com.google.gson.JsonParser;
31 import java.net.URISyntaxException;
32 import java.util.ArrayList;
33 import java.util.List;
34 import java.util.Optional;
36 import org.junit.jupiter.api.Test;
37 import org.mockito.Mockito;
38 import org.onap.dcaegen2.collectors.datafile.ftp.Scheme;
39 import org.onap.dcaegen2.collectors.datafile.model.FileData;
40 import org.onap.dcaegen2.collectors.datafile.model.FileReadyMessage;
41 import org.onap.dcaegen2.collectors.datafile.model.ImmutableFileData;
42 import org.onap.dcaegen2.collectors.datafile.model.ImmutableFileReadyMessage;
43 import org.onap.dcaegen2.collectors.datafile.model.ImmutableMessageMetaData;
44 import org.onap.dcaegen2.collectors.datafile.model.MessageMetaData;
45 import org.onap.dcaegen2.collectors.datafile.utils.JsonMessage;
46 import org.onap.dcaegen2.collectors.datafile.utils.JsonMessage.AdditionalField;
47 import org.onap.dcaegen2.collectors.datafile.utils.LoggingUtils;
49 import reactor.core.publisher.Mono;
50 import reactor.test.StepVerifier;
53 * Tests the JsonMessageParser.
55 * @author <a href="mailto:przemyslaw.wasala@nokia.com">Przemysław Wąsala</a> on 5/8/18
56 * @author <a href="mailto:henrik.b.andersson@est.tech">Henrik Andersson</a>
58 class JsonMessageParserTest {
59 private static final String ERROR_LOG_TAG = "[ERROR] ";
61 private static final String NR_RADIO_ERICSSON_EVENT_NAME = "Noti_NrRadio-Ericsson_FileReady";
62 private static final String PRODUCT_NAME = "NrRadio";
63 private static final String VENDOR_NAME = "Ericsson";
64 private static final String LAST_EPOCH_MICROSEC = "1519837825682";
65 private static final String SOURCE_NAME = "5GRAN_DU";
66 private static final String START_EPOCH_MICROSEC = "1519837825682";
67 private static final String TIME_ZONE_OFFSET = "UTC+05:00";
68 private static final String PM_FILE_NAME = "A20161224.1030-1045.bin.gz";
69 private static final String LOCATION = "ftpes://192.168.0.101:22/ftp/rop/" + PM_FILE_NAME;
70 private static final String GZIP_COMPRESSION = "gzip";
71 private static final String FILE_FORMAT_TYPE = "org.3GPP.32.435#measCollec";
72 private static final String FILE_FORMAT_VERSION = "V10";
73 private static final String CHANGE_IDENTIFIER = "PM_MEAS_FILES";
74 private static final String INCORRECT_CHANGE_IDENTIFIER = "INCORRECT_PM_MEAS_FILES";
75 private static final String CHANGE_TYPE = "FileReady";
76 private static final String INCORRECT_CHANGE_TYPE = "IncorrectFileReady";
77 private static final String NOTIFICATION_FIELDS_VERSION = "1.0";
80 void whenPassingCorrectJson_oneFileReadyMessage() throws URISyntaxException {
81 AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
82 .name(PM_FILE_NAME) //
83 .location(LOCATION) //
84 .compression(GZIP_COMPRESSION) //
85 .fileFormatType(FILE_FORMAT_TYPE) //
86 .fileFormatVersion(FILE_FORMAT_VERSION) //
88 JsonMessage message = new JsonMessage.JsonMessageBuilder() //
89 .eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
90 .changeIdentifier(CHANGE_IDENTIFIER) //
91 .changeType(CHANGE_TYPE) //
92 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
93 .addAdditionalField(additionalField) //
96 MessageMetaData messageMetaData = ImmutableMessageMetaData.builder() //
97 .productName(PRODUCT_NAME) //
98 .vendorName(VENDOR_NAME) //
99 .lastEpochMicrosec(LAST_EPOCH_MICROSEC) //
100 .sourceName(SOURCE_NAME) //
101 .startEpochMicrosec(START_EPOCH_MICROSEC) //
102 .timeZoneOffset(TIME_ZONE_OFFSET) //
103 .changeIdentifier(CHANGE_IDENTIFIER) //
104 .changeType(CHANGE_TYPE) //
106 FileData expectedFileData = ImmutableFileData.builder() //
107 .name(PM_FILE_NAME) //
108 .location(LOCATION) //
109 .scheme(Scheme.FTPES) //
110 .compression(GZIP_COMPRESSION) //
111 .fileFormatType(FILE_FORMAT_TYPE) //
112 .fileFormatVersion(FILE_FORMAT_VERSION) //
113 .messageMetaData(messageMetaData) //
115 List<FileData> files = new ArrayList<>();
116 files.add(expectedFileData);
117 FileReadyMessage expectedMessage = ImmutableFileReadyMessage.builder() //
121 String parsedString = message.getParsed();
122 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
123 JsonElement jsonElement = new JsonParser().parse(parsedString);
124 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
125 .getJsonObjectFromAnArray(jsonElement);
127 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(jsonElement))).expectSubscription()
128 .expectNext(expectedMessage).verifyComplete();
132 void whenPassingCorrectJsonWithTwoEvents_twoMessages() {
133 AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
134 .name(PM_FILE_NAME) //
135 .location(LOCATION) //
136 .compression(GZIP_COMPRESSION) //
137 .fileFormatType(FILE_FORMAT_TYPE) //
138 .fileFormatVersion(FILE_FORMAT_VERSION) //
140 JsonMessage message = new JsonMessage.JsonMessageBuilder() //
141 .eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
142 .changeIdentifier(CHANGE_IDENTIFIER) //
143 .changeType(CHANGE_TYPE) //
144 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
145 .addAdditionalField(additionalField) //
148 MessageMetaData messageMetaData = ImmutableMessageMetaData.builder() //
149 .productName(PRODUCT_NAME) //
150 .vendorName(VENDOR_NAME) //
151 .lastEpochMicrosec(LAST_EPOCH_MICROSEC) //
152 .sourceName(SOURCE_NAME) //
153 .startEpochMicrosec(START_EPOCH_MICROSEC) //
154 .timeZoneOffset(TIME_ZONE_OFFSET) //
155 .changeIdentifier(CHANGE_IDENTIFIER) //
156 .changeType(CHANGE_TYPE) //
158 FileData expectedFileData = ImmutableFileData.builder() //
159 .name(PM_FILE_NAME) //
160 .location(LOCATION) //
161 .scheme(Scheme.FTPES) //
162 .compression(GZIP_COMPRESSION) //
163 .fileFormatType(FILE_FORMAT_TYPE) //
164 .fileFormatVersion(FILE_FORMAT_VERSION) //
165 .messageMetaData(messageMetaData) //
167 List<FileData> files = new ArrayList<>();
168 files.add(expectedFileData);
169 FileReadyMessage expectedMessage = ImmutableFileReadyMessage.builder() //
173 String parsedString = message.getParsed();
174 String messageString = "[" + parsedString + "," + parsedString + "]";
175 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
176 JsonElement jsonElement = new JsonParser().parse(parsedString);
177 JsonElement jsonElement1 = new JsonParser().parse(messageString);
178 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
179 .getJsonObjectFromAnArray(jsonElement);
181 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(jsonElement1)))
182 .expectSubscription().expectNext(expectedMessage).expectNext(expectedMessage).verifyComplete();
186 void whenPassingCorrectJsonWithoutLocation_noMessage() {
187 AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
188 .name(PM_FILE_NAME) //
189 .compression(GZIP_COMPRESSION) //
190 .fileFormatType(FILE_FORMAT_TYPE) //
191 .fileFormatVersion(FILE_FORMAT_VERSION) //
193 JsonMessage message = new JsonMessage.JsonMessageBuilder() //
194 .eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
195 .changeIdentifier(CHANGE_IDENTIFIER) //
196 .changeType(CHANGE_TYPE) //
197 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
198 .addAdditionalField(additionalField) //
201 String parsedString = message.getParsed();
202 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
203 JsonElement jsonElement = new JsonParser().parse(parsedString);
204 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
205 .getJsonObjectFromAnArray(jsonElement);
207 final ListAppender<ILoggingEvent> logAppender = LoggingUtils.getLogListAppender(JsonMessageParser.class);
208 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(jsonElement))).expectSubscription()
209 .expectNextCount(0).verifyComplete();
211 assertTrue(logAppender.list.toString()
212 .contains("[ERROR] VES event parsing. File information wrong. " + "Missing location."));
213 assertTrue(logAppender.list.get(0).toString().contains("sourceName=5GRAN_DU"));
217 void whenPassingCorrectJsonWrongScheme_noMessage() {
218 AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
219 .name(PM_FILE_NAME) //
220 .location("http://location.xml") //
221 .compression(GZIP_COMPRESSION) //
222 .fileFormatType(FILE_FORMAT_TYPE) //
223 .fileFormatVersion(FILE_FORMAT_VERSION) //
225 JsonMessage message = new JsonMessage.JsonMessageBuilder() //
226 .eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
227 .changeIdentifier(CHANGE_IDENTIFIER) //
228 .changeType(CHANGE_TYPE) //
229 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
230 .addAdditionalField(additionalField) //
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 final ListAppender<ILoggingEvent> logAppender = LoggingUtils.getLogListAppender(JsonMessageParser.class);
240 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(jsonElement))).expectSubscription()
241 .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.FTPES) //
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();
296 JsonElement jsonElement = new JsonParser().parse(messageString);
298 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(jsonElement))).expectSubscription()
299 .expectNext(expectedMessage).verifyComplete();
303 void whenPassingCorrectJsonWithFaultyEventName_noFileData() {
304 AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
305 .location(LOCATION) //
306 .compression(GZIP_COMPRESSION) //
307 .fileFormatType(FILE_FORMAT_TYPE) //
308 .fileFormatVersion(FILE_FORMAT_VERSION) //
310 JsonMessage message = new JsonMessage.JsonMessageBuilder() //
311 .eventName("Faulty event name") //
312 .changeIdentifier(CHANGE_IDENTIFIER) //
313 .changeType(CHANGE_TYPE) //
314 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
315 .addAdditionalField(additionalField) //
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 final ListAppender<ILoggingEvent> logAppender = LoggingUtils.getLogListAppender(JsonMessageParser.class);
325 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(jsonElement))).expectSubscription()
326 .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 parsedString = message.getParsed();
350 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
351 JsonElement jsonElement = new JsonParser().parse(parsedString);
352 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
353 .getJsonObjectFromAnArray(jsonElement);
355 final ListAppender<ILoggingEvent> logAppender = LoggingUtils.getLogListAppender(JsonMessageParser.class);
356 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(jsonElement))).expectSubscription()
357 .expectNextCount(0).verifyComplete();
359 assertTrue("Error missing in log",
360 logAppender.list.toString()
361 .contains(ERROR_LOG_TAG + JsonMessageParser.ERROR_MSG_VES_EVENT_PARSING
362 + "File information wrong. Missing data: [name] Data: "
363 + message.getAdditionalFields().get(0).toString()));
367 void whenPassingCorrectJsonWithoutAdditionalFields_noFileData() {
368 JsonMessage message = new JsonMessage.JsonMessageBuilder() //
369 .eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
370 .changeIdentifier(CHANGE_IDENTIFIER) //
371 .changeType(CHANGE_TYPE) //
372 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
375 String parsedString = message.getParsed();
376 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
377 JsonElement jsonElement = new JsonParser().parse(parsedString);
378 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
379 .getJsonObjectFromAnArray(jsonElement);
381 final ListAppender<ILoggingEvent> logAppender = LoggingUtils.getLogListAppender(JsonMessageParser.class);
382 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(jsonElement))).expectSubscription()
383 .expectNextCount(0).verifyComplete();
385 assertTrue("Error missing in log",
386 logAppender.list.toString().contains(ERROR_LOG_TAG + JsonMessageParser.ERROR_MSG_VES_EVENT_PARSING
387 + "Missing arrayOfNamedHashMap in message. " + message.getParsed()));
391 void whenPassingCorrectJsonWithoutCompression_noFileData() {
392 AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
393 .name(PM_FILE_NAME) //
394 .location(LOCATION) //
395 .fileFormatType(FILE_FORMAT_TYPE) //
396 .fileFormatVersion(FILE_FORMAT_VERSION) //
398 JsonMessage message = new JsonMessage.JsonMessageBuilder() //
399 .eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
400 .changeIdentifier(CHANGE_IDENTIFIER) //
401 .changeType(CHANGE_TYPE) //
402 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
403 .addAdditionalField(additionalField) //
406 String parsedString = message.getParsed();
407 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
408 JsonElement jsonElement = new JsonParser().parse(parsedString);
409 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
410 .getJsonObjectFromAnArray(jsonElement);
412 final ListAppender<ILoggingEvent> logAppender = LoggingUtils.getLogListAppender(JsonMessageParser.class);
413 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(jsonElement))).expectSubscription()
414 .expectNextCount(0).verifyComplete();
416 assertTrue("Error missing in log",
417 logAppender.list.toString()
418 .contains(ERROR_LOG_TAG + JsonMessageParser.ERROR_MSG_VES_EVENT_PARSING
419 + "File information wrong. Missing data: [compression] Data: "
420 + message.getAdditionalFields().get(0).toString()));
424 void whenPassingCorrectJsonWithoutFileFormatType_noFileData() {
425 AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
426 .name(PM_FILE_NAME) //
427 .location(LOCATION) //
428 .compression(GZIP_COMPRESSION) //
429 .fileFormatVersion(FILE_FORMAT_VERSION) //
431 JsonMessage message = new JsonMessage.JsonMessageBuilder() //
432 .eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
433 .changeIdentifier(CHANGE_IDENTIFIER) //
434 .changeType(CHANGE_TYPE) //
435 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
436 .addAdditionalField(additionalField) //
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 final ListAppender<ILoggingEvent> logAppender = LoggingUtils.getLogListAppender(JsonMessageParser.class);
446 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(jsonElement))).expectSubscription()
447 .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.FTPES) //
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 parsedString = message.getParsed();
506 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
507 JsonElement jsonElement = new JsonParser().parse(parsedString);
508 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
509 .getJsonObjectFromAnArray(jsonElement);
511 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(jsonElement))).expectSubscription()
512 .expectNext(expectedMessage).verifyComplete();
516 void whenPassingJsonWithoutMandatoryHeaderInformation_noFileData() {
517 JsonMessage message = new JsonMessage.JsonMessageBuilder() //
518 .eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
521 String parsedString = message.getParsed();
522 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
523 JsonElement jsonElement = new JsonParser().parse(parsedString);
524 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
525 .getJsonObjectFromAnArray(jsonElement);
527 final ListAppender<ILoggingEvent> logAppender = LoggingUtils.getLogListAppender(JsonMessageParser.class);
528 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(jsonElement))).expectSubscription()
529 .expectComplete().verify();
531 assertTrue("Error missing in log",
532 logAppender.list.toString()
533 .contains(ERROR_LOG_TAG + JsonMessageParser.ERROR_MSG_VES_EVENT_PARSING
534 + "Missing data: [changeIdentifier, changeType, notificationFieldsVersion]. "
535 + "Change type is wrong: Expected: FileReady Message: " + message.getParsed()));
539 void whenPassingJsonWithNullJsonElement_noFileData() {
540 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
541 JsonElement jsonElement = new JsonParser().parse("{}");
543 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
544 .getJsonObjectFromAnArray(jsonElement);
546 final ListAppender<ILoggingEvent> logAppender = LoggingUtils.getLogListAppender(JsonMessageParser.class);
547 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(jsonElement))).expectSubscription()
548 .expectComplete().verify();
550 assertTrue("Error missing in log",
551 logAppender.list.toString().contains(ERROR_LOG_TAG + "Incorrect JsonObject - missing header. "));
555 void whenPassingCorrectJsonWithIncorrectChangeType_noFileData() {
556 AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
557 .name(PM_FILE_NAME) //
558 .location(LOCATION) //
559 .compression(GZIP_COMPRESSION) //
560 .fileFormatVersion(FILE_FORMAT_VERSION) //
562 JsonMessage message = new JsonMessage.JsonMessageBuilder() //
563 .eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
564 .changeIdentifier(CHANGE_IDENTIFIER) //
565 .changeType(INCORRECT_CHANGE_TYPE) //
566 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
567 .addAdditionalField(additionalField) //
570 String parsedString = message.getParsed();
571 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
572 JsonElement jsonElement = new JsonParser().parse(parsedString);
573 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
574 .getJsonObjectFromAnArray(jsonElement);
576 final ListAppender<ILoggingEvent> logAppender = LoggingUtils.getLogListAppender(JsonMessageParser.class);
577 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(jsonElement))).expectSubscription()
578 .expectNextCount(0).expectComplete().verify();
580 assertTrue("Error missing in log",
581 logAppender.list.toString()
582 .contains(ERROR_LOG_TAG + JsonMessageParser.ERROR_MSG_VES_EVENT_PARSING + " Change type is wrong: "
583 + INCORRECT_CHANGE_TYPE + " Expected: FileReady Message: " + message.getParsed()));
587 void whenPassingCorrectJsonWithIncorrectChangeIdentifier_noFileData() {
588 AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
589 .name(PM_FILE_NAME) //
590 .location(LOCATION) //
591 .compression(GZIP_COMPRESSION) //
592 .fileFormatVersion(FILE_FORMAT_VERSION) //
594 JsonMessage message = new JsonMessage.JsonMessageBuilder() //
595 .eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
596 .changeIdentifier(INCORRECT_CHANGE_IDENTIFIER) //
597 .changeType(CHANGE_TYPE) //
598 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
599 .addAdditionalField(additionalField) //
602 String parsedString = message.getParsed();
603 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
604 JsonElement jsonElement = new JsonParser().parse(parsedString);
605 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
606 .getJsonObjectFromAnArray(jsonElement);
608 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(jsonElement))).expectSubscription()
609 .expectComplete().verify();