/*-
* ============LICENSE_START=======================================================
* Copyright (C) 2018 NOKIA Intellectual Property, 2018-2019 Nordix Foundation. All rights reserved.
* Copyright (C) 2020 Nokia. All rights reserved.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ============LICENSE_END=========================================================
*/
package org.onap.dcaegen2.collectors.datafile.service;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.spy;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.read.ListAppender;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import org.onap.dcaegen2.collectors.datafile.ftp.Scheme;
import org.onap.dcaegen2.collectors.datafile.model.FileData;
import org.onap.dcaegen2.collectors.datafile.model.FileReadyMessage;
import org.onap.dcaegen2.collectors.datafile.model.ImmutableFileData;
import org.onap.dcaegen2.collectors.datafile.model.ImmutableFileReadyMessage;
import org.onap.dcaegen2.collectors.datafile.model.ImmutableMessageMetaData;
import org.onap.dcaegen2.collectors.datafile.model.MessageMetaData;
import org.onap.dcaegen2.collectors.datafile.utils.JsonMessage;
import org.onap.dcaegen2.collectors.datafile.utils.JsonMessage.AdditionalField;
import org.onap.dcaegen2.collectors.datafile.utils.LoggingUtils;
import reactor.core.publisher.Mono;
import reactor.test.StepVerifier;
/**
* Tests the JsonMessageParser.
*
* @author Przemysław Wąsala on 5/8/18
* @author Henrik Andersson
*/
class JsonMessageParserTest {
private static final String ERROR_LOG_TAG = "[ERROR] ";
private static final String NR_RADIO_ERICSSON_EVENT_NAME = "Noti_NrRadio-Ericsson_FileReady";
private static final String PRODUCT_NAME = "NrRadio";
private static final String VENDOR_NAME = "Ericsson";
private static final String LAST_EPOCH_MICROSEC = "1519837825682";
private static final String SOURCE_NAME = "5GRAN_DU";
private static final String START_EPOCH_MICROSEC = "1519837825682";
private static final String TIME_ZONE_OFFSET = "UTC+05:00";
private static final String PM_FILE_NAME = "A20161224.1030-1045.bin.gz";
private static final String LOCATION = "ftpes://192.168.0.101:22/ftp/rop/" + PM_FILE_NAME;
private static final String GZIP_COMPRESSION = "gzip";
private static final String FILE_FORMAT_TYPE = "org.3GPP.32.435#measCollec";
private static final String FILE_FORMAT_VERSION = "V10";
private static final String CHANGE_IDENTIFIER = "PM_MEAS_FILES";
private static final String INCORRECT_CHANGE_IDENTIFIER = "INCORRECT_PM_MEAS_FILES";
private static final String CHANGE_TYPE = "FileReady";
private static final String INCORRECT_CHANGE_TYPE = "IncorrectFileReady";
private static final String NOTIFICATION_FIELDS_VERSION = "1.0";
@Test
void whenPassingCorrectJson_oneFileReadyMessage() throws URISyntaxException {
AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
.name(PM_FILE_NAME) //
.location(LOCATION) //
.compression(GZIP_COMPRESSION) //
.fileFormatType(FILE_FORMAT_TYPE) //
.fileFormatVersion(FILE_FORMAT_VERSION) //
.build();
JsonMessage message = new JsonMessage.JsonMessageBuilder() //
.eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
.changeIdentifier(CHANGE_IDENTIFIER) //
.changeType(CHANGE_TYPE) //
.notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
.addAdditionalField(additionalField) //
.build();
MessageMetaData messageMetaData = ImmutableMessageMetaData.builder() //
.productName(PRODUCT_NAME) //
.vendorName(VENDOR_NAME) //
.lastEpochMicrosec(LAST_EPOCH_MICROSEC) //
.sourceName(SOURCE_NAME) //
.startEpochMicrosec(START_EPOCH_MICROSEC) //
.timeZoneOffset(TIME_ZONE_OFFSET) //
.changeIdentifier(CHANGE_IDENTIFIER) //
.changeType(CHANGE_TYPE) //
.build();
FileData expectedFileData = ImmutableFileData.builder() //
.name(PM_FILE_NAME) //
.location(LOCATION) //
.scheme(Scheme.FTPES) //
.compression(GZIP_COMPRESSION) //
.fileFormatType(FILE_FORMAT_TYPE) //
.fileFormatVersion(FILE_FORMAT_VERSION) //
.messageMetaData(messageMetaData) //
.build();
List files = new ArrayList<>();
files.add(expectedFileData);
FileReadyMessage expectedMessage = ImmutableFileReadyMessage.builder() //
.files(files) //
.build();
String parsedString = message.getParsed();
JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
JsonElement jsonElement = new JsonParser().parse(parsedString);
Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
.getJsonObjectFromAnArray(jsonElement);
StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(jsonElement))).expectSubscription()
.expectNext(expectedMessage).verifyComplete();
}
@Test
void whenPassingCorrectJsonWithTwoEvents_twoMessages() {
AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
.name(PM_FILE_NAME) //
.location(LOCATION) //
.compression(GZIP_COMPRESSION) //
.fileFormatType(FILE_FORMAT_TYPE) //
.fileFormatVersion(FILE_FORMAT_VERSION) //
.build();
JsonMessage message = new JsonMessage.JsonMessageBuilder() //
.eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
.changeIdentifier(CHANGE_IDENTIFIER) //
.changeType(CHANGE_TYPE) //
.notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
.addAdditionalField(additionalField) //
.build();
MessageMetaData messageMetaData = ImmutableMessageMetaData.builder() //
.productName(PRODUCT_NAME) //
.vendorName(VENDOR_NAME) //
.lastEpochMicrosec(LAST_EPOCH_MICROSEC) //
.sourceName(SOURCE_NAME) //
.startEpochMicrosec(START_EPOCH_MICROSEC) //
.timeZoneOffset(TIME_ZONE_OFFSET) //
.changeIdentifier(CHANGE_IDENTIFIER) //
.changeType(CHANGE_TYPE) //
.build();
FileData expectedFileData = ImmutableFileData.builder() //
.name(PM_FILE_NAME) //
.location(LOCATION) //
.scheme(Scheme.FTPES) //
.compression(GZIP_COMPRESSION) //
.fileFormatType(FILE_FORMAT_TYPE) //
.fileFormatVersion(FILE_FORMAT_VERSION) //
.messageMetaData(messageMetaData) //
.build();
List files = new ArrayList<>();
files.add(expectedFileData);
FileReadyMessage expectedMessage = ImmutableFileReadyMessage.builder() //
.files(files) //
.build();
String parsedString = message.getParsed();
String messageString = "[" + parsedString + "," + parsedString + "]";
JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
JsonElement jsonElement = new JsonParser().parse(parsedString);
JsonElement jsonElement1 = new JsonParser().parse(messageString);
Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
.getJsonObjectFromAnArray(jsonElement);
StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(jsonElement1)))
.expectSubscription().expectNext(expectedMessage).expectNext(expectedMessage).verifyComplete();
}
@Test
void whenPassingCorrectJsonWithoutLocation_noMessage() {
AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
.name(PM_FILE_NAME) //
.compression(GZIP_COMPRESSION) //
.fileFormatType(FILE_FORMAT_TYPE) //
.fileFormatVersion(FILE_FORMAT_VERSION) //
.build();
JsonMessage message = new JsonMessage.JsonMessageBuilder() //
.eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
.changeIdentifier(CHANGE_IDENTIFIER) //
.changeType(CHANGE_TYPE) //
.notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
.addAdditionalField(additionalField) //
.build();
String parsedString = message.getParsed();
JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
JsonElement jsonElement = new JsonParser().parse(parsedString);
Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
.getJsonObjectFromAnArray(jsonElement);
final ListAppender logAppender = LoggingUtils.getLogListAppender(JsonMessageParser.class);
StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(jsonElement))).expectSubscription()
.expectNextCount(0).verifyComplete();
assertTrue(logAppender.list.toString()
.contains("[ERROR] VES event parsing. File information wrong. " + "Missing location."));
assertTrue(logAppender.list.get(0).toString().contains("sourceName=5GRAN_DU"));
}
@Test
void whenPassingCorrectJsonWrongScheme_noMessage() {
AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
.name(PM_FILE_NAME) //
.location("http://location.xml") //
.compression(GZIP_COMPRESSION) //
.fileFormatType(FILE_FORMAT_TYPE) //
.fileFormatVersion(FILE_FORMAT_VERSION) //
.build();
JsonMessage message = new JsonMessage.JsonMessageBuilder() //
.eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
.changeIdentifier(CHANGE_IDENTIFIER) //
.changeType(CHANGE_TYPE) //
.notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
.addAdditionalField(additionalField) //
.build();
String parsedString = message.getParsed();
JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
JsonElement jsonElement = new JsonParser().parse(parsedString);
Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
.getJsonObjectFromAnArray(jsonElement);
final ListAppender logAppender = LoggingUtils.getLogListAppender(JsonMessageParser.class);
StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(jsonElement))).expectSubscription()
.expectNextCount(0).verifyComplete();
assertTrue("Error missing in log",
logAppender.list.toString()
.contains(ERROR_LOG_TAG + JsonMessageParser.ERROR_MSG_VES_EVENT_PARSING
+ Scheme.DFC_DOES_NOT_SUPPORT_PROTOCOL_ERROR_MSG + "http" + Scheme.SUPPORTED_PROTOCOLS_ERROR_MESSAGE
+ ". Location: http://location.xml"));
assertTrue("Missing sourceName in log", logAppender.list.toString().contains("sourceName=5GRAN_DU"));
}
@Test
void whenPassingCorrectJsonWithTwoEventsFirstNoHeader_oneFileDatan() {
AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
.name(PM_FILE_NAME) //
.location(LOCATION) //
.compression(GZIP_COMPRESSION) //
.fileFormatType(FILE_FORMAT_TYPE) //
.fileFormatVersion(FILE_FORMAT_VERSION) //
.build();
JsonMessage message = new JsonMessage.JsonMessageBuilder() //
.eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
.changeIdentifier(CHANGE_IDENTIFIER) //
.changeType(CHANGE_TYPE) //
.notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
.addAdditionalField(additionalField) //
.build();
MessageMetaData messageMetaData = ImmutableMessageMetaData.builder() //
.productName(PRODUCT_NAME) //
.vendorName(VENDOR_NAME) //
.lastEpochMicrosec(LAST_EPOCH_MICROSEC) //
.sourceName(SOURCE_NAME) //
.startEpochMicrosec(START_EPOCH_MICROSEC) //
.timeZoneOffset(TIME_ZONE_OFFSET) //
.changeIdentifier(CHANGE_IDENTIFIER) //
.changeType(CHANGE_TYPE) //
.build();
FileData expectedFileData = ImmutableFileData.builder() //
.name(PM_FILE_NAME) //
.location(LOCATION) //
.scheme(Scheme.FTPES) //
.compression(GZIP_COMPRESSION) //
.fileFormatType(FILE_FORMAT_TYPE) //
.fileFormatVersion(FILE_FORMAT_VERSION) //
.messageMetaData(messageMetaData) //
.build();
List files = new ArrayList<>();
files.add(expectedFileData);
FileReadyMessage expectedMessage = ImmutableFileReadyMessage.builder() //
.files(files) //
.build();
String parsedString = message.getParsed();
String messageString = "[{\"event\":{}}," + parsedString + "]";
JsonMessageParser jsonMessageParserUnderTest = new JsonMessageParser();
JsonElement jsonElement = new JsonParser().parse(messageString);
StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(jsonElement))).expectSubscription()
.expectNext(expectedMessage).verifyComplete();
}
@Test
void whenPassingCorrectJsonWithFaultyEventName_noFileData() {
AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
.location(LOCATION) //
.compression(GZIP_COMPRESSION) //
.fileFormatType(FILE_FORMAT_TYPE) //
.fileFormatVersion(FILE_FORMAT_VERSION) //
.build();
JsonMessage message = new JsonMessage.JsonMessageBuilder() //
.eventName("Faulty event name") //
.changeIdentifier(CHANGE_IDENTIFIER) //
.changeType(CHANGE_TYPE) //
.notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
.addAdditionalField(additionalField) //
.build();
String parsedString = message.getParsed();
JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
JsonElement jsonElement = new JsonParser().parse(parsedString);
Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
.getJsonObjectFromAnArray(jsonElement);
final ListAppender logAppender = LoggingUtils.getLogListAppender(JsonMessageParser.class);
StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(jsonElement))).expectSubscription()
.expectComplete().verify();
assertTrue("Error missing in log",
logAppender.list.toString().contains(ERROR_LOG_TAG + JsonMessageParser.ERROR_MSG_VES_EVENT_PARSING
+ "Can not get PRODUCT_NAME from eventName, eventName is not in correct format: Faulty event name"));
}
@Test
void whenPassingCorrectJsonWithoutName_noFileData() {
AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
.location(LOCATION) //
.compression(GZIP_COMPRESSION) //
.fileFormatType(FILE_FORMAT_TYPE) //
.fileFormatVersion(FILE_FORMAT_VERSION) //
.build();
JsonMessage message = new JsonMessage.JsonMessageBuilder() //
.eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
.changeIdentifier(CHANGE_IDENTIFIER) //
.changeType(CHANGE_TYPE) //
.notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
.addAdditionalField(additionalField) //
.build();
String parsedString = message.getParsed();
JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
JsonElement jsonElement = new JsonParser().parse(parsedString);
Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
.getJsonObjectFromAnArray(jsonElement);
final ListAppender logAppender = LoggingUtils.getLogListAppender(JsonMessageParser.class);
StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(jsonElement))).expectSubscription()
.expectNextCount(0).verifyComplete();
assertTrue("Error missing in log",
logAppender.list.toString()
.contains(ERROR_LOG_TAG + JsonMessageParser.ERROR_MSG_VES_EVENT_PARSING
+ "File information wrong. Missing data: [name] Data: "
+ message.getAdditionalFields().get(0).toString()));
}
@Test
void whenPassingCorrectJsonWithoutAdditionalFields_noFileData() {
JsonMessage message = new JsonMessage.JsonMessageBuilder() //
.eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
.changeIdentifier(CHANGE_IDENTIFIER) //
.changeType(CHANGE_TYPE) //
.notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
.build();
String parsedString = message.getParsed();
JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
JsonElement jsonElement = new JsonParser().parse(parsedString);
Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
.getJsonObjectFromAnArray(jsonElement);
final ListAppender logAppender = LoggingUtils.getLogListAppender(JsonMessageParser.class);
StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(jsonElement))).expectSubscription()
.expectNextCount(0).verifyComplete();
assertTrue("Error missing in log",
logAppender.list.toString().contains(ERROR_LOG_TAG + JsonMessageParser.ERROR_MSG_VES_EVENT_PARSING
+ "Missing arrayOfNamedHashMap in message. " + message.getParsed()));
}
@Test
void whenPassingCorrectJsonWithoutCompression_noFileData() {
AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
.name(PM_FILE_NAME) //
.location(LOCATION) //
.fileFormatType(FILE_FORMAT_TYPE) //
.fileFormatVersion(FILE_FORMAT_VERSION) //
.build();
JsonMessage message = new JsonMessage.JsonMessageBuilder() //
.eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
.changeIdentifier(CHANGE_IDENTIFIER) //
.changeType(CHANGE_TYPE) //
.notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
.addAdditionalField(additionalField) //
.build();
String parsedString = message.getParsed();
JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
JsonElement jsonElement = new JsonParser().parse(parsedString);
Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
.getJsonObjectFromAnArray(jsonElement);
final ListAppender logAppender = LoggingUtils.getLogListAppender(JsonMessageParser.class);
StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(jsonElement))).expectSubscription()
.expectNextCount(0).verifyComplete();
assertTrue("Error missing in log",
logAppender.list.toString()
.contains(ERROR_LOG_TAG + JsonMessageParser.ERROR_MSG_VES_EVENT_PARSING
+ "File information wrong. Missing data: [compression] Data: "
+ message.getAdditionalFields().get(0).toString()));
}
@Test
void whenPassingCorrectJsonWithoutFileFormatType_noFileData() {
AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
.name(PM_FILE_NAME) //
.location(LOCATION) //
.compression(GZIP_COMPRESSION) //
.fileFormatVersion(FILE_FORMAT_VERSION) //
.build();
JsonMessage message = new JsonMessage.JsonMessageBuilder() //
.eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
.changeIdentifier(CHANGE_IDENTIFIER) //
.changeType(CHANGE_TYPE) //
.notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
.addAdditionalField(additionalField) //
.build();
String parsedString = message.getParsed();
JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
JsonElement jsonElement = new JsonParser().parse(parsedString);
Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
.getJsonObjectFromAnArray(jsonElement);
final ListAppender logAppender = LoggingUtils.getLogListAppender(JsonMessageParser.class);
StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(jsonElement))).expectSubscription()
.expectNextCount(0).verifyComplete();
assertTrue("Error missing in log",
logAppender.list.toString()
.contains(ERROR_LOG_TAG + JsonMessageParser.ERROR_MSG_VES_EVENT_PARSING
+ "File information wrong. Missing data: [fileFormatType] Data: "
+ message.getAdditionalFields().get(0).toString()));
}
@Test
void whenPassingOneCorrectJsonWithoutFileFormatVersionAndOneCorrect_oneFileData() {
AdditionalField additionalFaultyField = new JsonMessage.AdditionalFieldBuilder() //
.name(PM_FILE_NAME) //
.location(LOCATION) //
.compression(GZIP_COMPRESSION) //
.fileFormatType(FILE_FORMAT_TYPE) //
.build();
AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
.name(PM_FILE_NAME) //
.location(LOCATION) //
.compression(GZIP_COMPRESSION) //
.fileFormatType(FILE_FORMAT_TYPE) //
.fileFormatVersion(FILE_FORMAT_VERSION) //
.build();
JsonMessage message = new JsonMessage.JsonMessageBuilder() //
.eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
.changeIdentifier(CHANGE_IDENTIFIER) //
.changeType(CHANGE_TYPE) //
.notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
.addAdditionalField(additionalFaultyField) //
.addAdditionalField(additionalField) //
.build();
MessageMetaData messageMetaData = ImmutableMessageMetaData.builder() //
.productName(PRODUCT_NAME) //
.vendorName(VENDOR_NAME) //
.lastEpochMicrosec(LAST_EPOCH_MICROSEC) //
.sourceName(SOURCE_NAME) //
.startEpochMicrosec(START_EPOCH_MICROSEC) //
.timeZoneOffset(TIME_ZONE_OFFSET) //
.changeIdentifier(CHANGE_IDENTIFIER) //
.changeType(CHANGE_TYPE) //
.build();
FileData expectedFileData = ImmutableFileData.builder() //
.name(PM_FILE_NAME) //
.location(LOCATION) //
.scheme(Scheme.FTPES) //
.compression(GZIP_COMPRESSION) //
.fileFormatType(FILE_FORMAT_TYPE) //
.fileFormatVersion(FILE_FORMAT_VERSION) //
.messageMetaData(messageMetaData) //
.build();
List files = new ArrayList<>();
files.add(expectedFileData);
FileReadyMessage expectedMessage = ImmutableFileReadyMessage.builder() //
.files(files) //
.build();
String parsedString = message.getParsed();
JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
JsonElement jsonElement = new JsonParser().parse(parsedString);
Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
.getJsonObjectFromAnArray(jsonElement);
StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(jsonElement))).expectSubscription()
.expectNext(expectedMessage).verifyComplete();
}
@Test
void whenPassingJsonWithoutMandatoryHeaderInformation_noFileData() {
JsonMessage message = new JsonMessage.JsonMessageBuilder() //
.eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
.build();
String parsedString = message.getParsed();
JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
JsonElement jsonElement = new JsonParser().parse(parsedString);
Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
.getJsonObjectFromAnArray(jsonElement);
final ListAppender logAppender = LoggingUtils.getLogListAppender(JsonMessageParser.class);
StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(jsonElement))).expectSubscription()
.expectComplete().verify();
assertTrue("Error missing in log",
logAppender.list.toString()
.contains(ERROR_LOG_TAG + JsonMessageParser.ERROR_MSG_VES_EVENT_PARSING
+ "Missing data: [changeIdentifier, changeType, notificationFieldsVersion]. "
+ "Change type is wrong: Expected: FileReady Message: " + message.getParsed()));
}
@Test
void whenPassingJsonWithNullJsonElement_noFileData() {
JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
JsonElement jsonElement = new JsonParser().parse("{}");
Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
.getJsonObjectFromAnArray(jsonElement);
final ListAppender logAppender = LoggingUtils.getLogListAppender(JsonMessageParser.class);
StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(jsonElement))).expectSubscription()
.expectComplete().verify();
assertTrue("Error missing in log",
logAppender.list.toString().contains(ERROR_LOG_TAG + "Incorrect JsonObject - missing header. "));
}
@Test
void whenPassingCorrectJsonWithIncorrectChangeType_noFileData() {
AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
.name(PM_FILE_NAME) //
.location(LOCATION) //
.compression(GZIP_COMPRESSION) //
.fileFormatVersion(FILE_FORMAT_VERSION) //
.build();
JsonMessage message = new JsonMessage.JsonMessageBuilder() //
.eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
.changeIdentifier(CHANGE_IDENTIFIER) //
.changeType(INCORRECT_CHANGE_TYPE) //
.notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
.addAdditionalField(additionalField) //
.build();
String parsedString = message.getParsed();
JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
JsonElement jsonElement = new JsonParser().parse(parsedString);
Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
.getJsonObjectFromAnArray(jsonElement);
final ListAppender logAppender = LoggingUtils.getLogListAppender(JsonMessageParser.class);
StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(jsonElement))).expectSubscription()
.expectNextCount(0).expectComplete().verify();
assertTrue("Error missing in log",
logAppender.list.toString()
.contains(ERROR_LOG_TAG + JsonMessageParser.ERROR_MSG_VES_EVENT_PARSING + " Change type is wrong: "
+ INCORRECT_CHANGE_TYPE + " Expected: FileReady Message: " + message.getParsed()));
}
@Test
void whenPassingCorrectJsonWithIncorrectChangeIdentifier_noFileData() {
AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() //
.name(PM_FILE_NAME) //
.location(LOCATION) //
.compression(GZIP_COMPRESSION) //
.fileFormatVersion(FILE_FORMAT_VERSION) //
.build();
JsonMessage message = new JsonMessage.JsonMessageBuilder() //
.eventName(NR_RADIO_ERICSSON_EVENT_NAME) //
.changeIdentifier(INCORRECT_CHANGE_IDENTIFIER) //
.changeType(CHANGE_TYPE) //
.notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION) //
.addAdditionalField(additionalField) //
.build();
String parsedString = message.getParsed();
JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
JsonElement jsonElement = new JsonParser().parse(parsedString);
Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
.getJsonObjectFromAnArray(jsonElement);
StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(jsonElement))).expectSubscription()
.expectComplete().verify();
}
}