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.jupiter.api.Assertions.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.Flux;
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 = JsonParser.parseString(parsedString);
124 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
125 .getJsonObjectFromAnArray(jsonElement);
127 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Flux.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 = JsonParser.parseString(parsedString);
177 JsonElement jsonElement1 = JsonParser.parseString(messageString);
178 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
179 .getJsonObjectFromAnArray(jsonElement);
181 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Flux.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 = JsonParser.parseString(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(Flux.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 = JsonParser.parseString(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(Flux.just(jsonElement))).expectSubscription()
241 .expectNextCount(0).verifyComplete();
243 assertTrue(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"),"Error missing in log");
247 assertTrue(logAppender.list.toString().contains("sourceName=5GRAN_DU"),"Missing sourceName in log");
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.FTPES) //
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 = JsonParser.parseString(messageString);
297 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Flux.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 = JsonParser.parseString(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(Flux.just(jsonElement))).expectSubscription()
325 .expectComplete().verify();
327 assertTrue(logAppender.list.toString().contains(ERROR_LOG_TAG + JsonMessageParser.ERROR_MSG_VES_EVENT_PARSING
328 + "Can not get PRODUCT_NAME from eventName, eventName is not in correct format: Faulty event name"),"Error missing in log");
332 void whenPassingCorrectJsonWithoutName_noFileData() {
333 AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
334 .location(LOCATION) //
335 .compression(GZIP_COMPRESSION) //
336 .fileFormatType(FILE_FORMAT_TYPE) //
337 .fileFormatVersion(FILE_FORMAT_VERSION) //
339 JsonMessage message = new JsonMessage.JsonMessageBuilder() //
340 .eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
341 .changeIdentifier(CHANGE_IDENTIFIER) //
342 .changeType(CHANGE_TYPE) //
343 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
344 .addAdditionalField(additionalField) //
347 String parsedString = message.getParsed();
348 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
349 JsonElement jsonElement = JsonParser.parseString(parsedString);
350 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
351 .getJsonObjectFromAnArray(jsonElement);
353 final ListAppender<ILoggingEvent> logAppender = LoggingUtils.getLogListAppender(JsonMessageParser.class);
354 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Flux.just(jsonElement))).expectSubscription()
355 .expectNextCount(0).verifyComplete();
357 assertTrue(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()),"Error missing in log");
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 parsedString = message.getParsed();
373 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
374 JsonElement jsonElement = JsonParser.parseString(parsedString);
375 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
376 .getJsonObjectFromAnArray(jsonElement);
378 final ListAppender<ILoggingEvent> logAppender = LoggingUtils.getLogListAppender(JsonMessageParser.class);
379 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Flux.just(jsonElement))).expectSubscription()
380 .expectNextCount(0).verifyComplete();
382 assertTrue(logAppender.list.toString().contains(ERROR_LOG_TAG + JsonMessageParser.ERROR_MSG_VES_EVENT_PARSING
383 + "Missing arrayOfNamedHashMap in message. " + message.getParsed()),"Error missing in log");
387 void whenPassingCorrectJsonWithoutCompression_noFileData() {
388 AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
389 .name(PM_FILE_NAME) //
390 .location(LOCATION) //
391 .fileFormatType(FILE_FORMAT_TYPE) //
392 .fileFormatVersion(FILE_FORMAT_VERSION) //
394 JsonMessage message = new JsonMessage.JsonMessageBuilder() //
395 .eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
396 .changeIdentifier(CHANGE_IDENTIFIER) //
397 .changeType(CHANGE_TYPE) //
398 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
399 .addAdditionalField(additionalField) //
402 String parsedString = message.getParsed();
403 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
404 JsonElement jsonElement = JsonParser.parseString(parsedString);
405 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
406 .getJsonObjectFromAnArray(jsonElement);
408 final ListAppender<ILoggingEvent> logAppender = LoggingUtils.getLogListAppender(JsonMessageParser.class);
409 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Flux.just(jsonElement))).expectSubscription()
410 .expectNextCount(0).verifyComplete();
412 assertTrue(logAppender.list.toString()
413 .contains(ERROR_LOG_TAG + JsonMessageParser.ERROR_MSG_VES_EVENT_PARSING
414 + "File information wrong. Missing data: [compression] Data: "
415 + message.getAdditionalFields().get(0).toString()),"Error missing in log");
419 void whenPassingCorrectJsonWithoutFileFormatType_noFileData() {
420 AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
421 .name(PM_FILE_NAME) //
422 .location(LOCATION) //
423 .compression(GZIP_COMPRESSION) //
424 .fileFormatVersion(FILE_FORMAT_VERSION) //
426 JsonMessage message = new JsonMessage.JsonMessageBuilder() //
427 .eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
428 .changeIdentifier(CHANGE_IDENTIFIER) //
429 .changeType(CHANGE_TYPE) //
430 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
431 .addAdditionalField(additionalField) //
434 String parsedString = message.getParsed();
435 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
436 JsonElement jsonElement = JsonParser.parseString(parsedString);
437 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
438 .getJsonObjectFromAnArray(jsonElement);
440 final ListAppender<ILoggingEvent> logAppender = LoggingUtils.getLogListAppender(JsonMessageParser.class);
441 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Flux.just(jsonElement))).expectSubscription()
442 .expectNextCount(0).verifyComplete();
444 assertTrue(logAppender.list.toString()
445 .contains(ERROR_LOG_TAG + JsonMessageParser.ERROR_MSG_VES_EVENT_PARSING
446 + "File information wrong. Missing data: [fileFormatType] Data: "
447 + message.getAdditionalFields().get(0).toString()),"Error missing in log");
451 void whenPassingOneCorrectJsonWithoutFileFormatVersionAndOneCorrect_oneFileData() {
452 AdditionalField additionalFaultyField = new JsonMessage.AdditionalFieldBuilder() //
453 .name(PM_FILE_NAME) //
454 .location(LOCATION) //
455 .compression(GZIP_COMPRESSION) //
456 .fileFormatType(FILE_FORMAT_TYPE) //
458 AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
459 .name(PM_FILE_NAME) //
460 .location(LOCATION) //
461 .compression(GZIP_COMPRESSION) //
462 .fileFormatType(FILE_FORMAT_TYPE) //
463 .fileFormatVersion(FILE_FORMAT_VERSION) //
465 JsonMessage message = new JsonMessage.JsonMessageBuilder() //
466 .eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
467 .changeIdentifier(CHANGE_IDENTIFIER) //
468 .changeType(CHANGE_TYPE) //
469 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
470 .addAdditionalField(additionalFaultyField) //
471 .addAdditionalField(additionalField) //
474 MessageMetaData messageMetaData = ImmutableMessageMetaData.builder() //
475 .productName(PRODUCT_NAME) //
476 .vendorName(VENDOR_NAME) //
477 .lastEpochMicrosec(LAST_EPOCH_MICROSEC) //
478 .sourceName(SOURCE_NAME) //
479 .startEpochMicrosec(START_EPOCH_MICROSEC) //
480 .timeZoneOffset(TIME_ZONE_OFFSET) //
481 .changeIdentifier(CHANGE_IDENTIFIER) //
482 .changeType(CHANGE_TYPE) //
484 FileData expectedFileData = ImmutableFileData.builder() //
485 .name(PM_FILE_NAME) //
486 .location(LOCATION) //
487 .scheme(Scheme.FTPES) //
488 .compression(GZIP_COMPRESSION) //
489 .fileFormatType(FILE_FORMAT_TYPE) //
490 .fileFormatVersion(FILE_FORMAT_VERSION) //
491 .messageMetaData(messageMetaData) //
493 List<FileData> files = new ArrayList<>();
494 files.add(expectedFileData);
495 FileReadyMessage expectedMessage = ImmutableFileReadyMessage.builder() //
499 String parsedString = message.getParsed();
500 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
501 JsonElement jsonElement = JsonParser.parseString(parsedString);
502 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
503 .getJsonObjectFromAnArray(jsonElement);
505 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Flux.just(jsonElement))).expectSubscription()
506 .expectNext(expectedMessage).verifyComplete();
510 void whenPassingJsonWithoutMandatoryHeaderInformation_noFileData() {
511 JsonMessage message = new JsonMessage.JsonMessageBuilder() //
512 .eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
515 String parsedString = message.getParsed();
516 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
517 JsonElement jsonElement = JsonParser.parseString(parsedString);
518 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
519 .getJsonObjectFromAnArray(jsonElement);
521 final ListAppender<ILoggingEvent> logAppender = LoggingUtils.getLogListAppender(JsonMessageParser.class);
522 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Flux.just(jsonElement))).expectSubscription()
523 .expectComplete().verify();
525 assertTrue(logAppender.list.toString()
526 .contains(ERROR_LOG_TAG + JsonMessageParser.ERROR_MSG_VES_EVENT_PARSING
527 + "Missing data: [changeIdentifier, changeType, notificationFieldsVersion]. "
528 + "Change type is wrong: Expected: FileReady Message: " + message.getParsed()),"Error missing in log");
532 void whenPassingJsonWithNullJsonElement_noFileData() {
533 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
534 JsonElement jsonElement = JsonParser.parseString("{}");
536 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
537 .getJsonObjectFromAnArray(jsonElement);
539 final ListAppender<ILoggingEvent> logAppender = LoggingUtils.getLogListAppender(JsonMessageParser.class);
540 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Flux.just(jsonElement))).expectSubscription()
541 .expectComplete().verify();
543 assertTrue(logAppender.list.toString().contains(ERROR_LOG_TAG + "Incorrect JsonObject - missing header. ")
544 ,"Error missing in log");
548 void whenPassingCorrectJsonWithIncorrectChangeType_noFileData() {
549 AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
550 .name(PM_FILE_NAME) //
551 .location(LOCATION) //
552 .compression(GZIP_COMPRESSION) //
553 .fileFormatVersion(FILE_FORMAT_VERSION) //
555 JsonMessage message = new JsonMessage.JsonMessageBuilder() //
556 .eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
557 .changeIdentifier(CHANGE_IDENTIFIER) //
558 .changeType(INCORRECT_CHANGE_TYPE) //
559 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
560 .addAdditionalField(additionalField) //
563 String parsedString = message.getParsed();
564 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
565 JsonElement jsonElement = JsonParser.parseString(parsedString);
566 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
567 .getJsonObjectFromAnArray(jsonElement);
569 final ListAppender<ILoggingEvent> logAppender = LoggingUtils.getLogListAppender(JsonMessageParser.class);
570 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Flux.just(jsonElement))).expectSubscription()
571 .expectNextCount(0).expectComplete().verify();
573 assertTrue(logAppender.list.toString()
574 .contains(ERROR_LOG_TAG + JsonMessageParser.ERROR_MSG_VES_EVENT_PARSING + " Change type is wrong: "
575 + INCORRECT_CHANGE_TYPE + " Expected: FileReady Message: " + message.getParsed()),"Error missing in log");
579 void whenPassingCorrectJsonWithIncorrectChangeIdentifier_noFileData() {
580 AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
581 .name(PM_FILE_NAME) //
582 .location(LOCATION) //
583 .compression(GZIP_COMPRESSION) //
584 .fileFormatVersion(FILE_FORMAT_VERSION) //
586 JsonMessage message = new JsonMessage.JsonMessageBuilder() //
587 .eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
588 .changeIdentifier(INCORRECT_CHANGE_IDENTIFIER) //
589 .changeType(CHANGE_TYPE) //
590 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
591 .addAdditionalField(additionalField) //
594 String parsedString = message.getParsed();
595 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
596 JsonElement jsonElement = JsonParser.parseString(parsedString);
597 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
598 .getJsonObjectFromAnArray(jsonElement);
600 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Flux.just(jsonElement))).expectSubscription()
601 .expectComplete().verify();