aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorelinuxhenrik <henrik.b.andersson@est.tech>2018-11-27 09:01:19 +0100
committerelinuxhenrik <henrik.b.andersson@est.tech>2018-11-28 14:49:47 +0100
commita3c452af58c12283d76019509dd605f67f14532c (patch)
tree6836348b0fa1c6d3a68aeb3334e749fe8ec166ba
parent69daf676c2eea017dbde3d7fdafb42dcbe730e75 (diff)
Fix sonar issues
Change-Id: I4aff14b6afc5faaf95f28286dc6f2f741191e403 Issue-ID: DCAEGEN2-991 Signed-off-by: elinuxhenrik <henrik.b.andersson@est.tech>
-rw-r--r--datafile-app-server/src/main/java/org/onap/dcaegen2/collectors/datafile/model/FileData.java16
-rw-r--r--datafile-app-server/src/main/java/org/onap/dcaegen2/collectors/datafile/service/DmaapConsumerJsonParser.java239
-rw-r--r--datafile-app-server/src/main/java/org/onap/dcaegen2/collectors/datafile/tasks/XnfCollectorTaskImpl.java12
-rw-r--r--datafile-app-server/src/test/java/org/onap/dcaegen2/collectors/datafile/service/DmaapConsumerJsonParserTest.java50
-rw-r--r--datafile-app-server/src/test/java/org/onap/dcaegen2/collectors/datafile/tasks/DmaapConsumerTaskImplTest.java19
-rw-r--r--datafile-app-server/src/test/java/org/onap/dcaegen2/collectors/datafile/tasks/XnfCollectorTaskImplTest.java64
-rw-r--r--datafile-app-server/src/test/java/org/onap/dcaegen2/collectors/datafile/utils/JsonMessage.java11
-rw-r--r--datafile-commons/src/main/java/org/onap/dcaegen2/collectors/datafile/model/FileMetaData.java45
8 files changed, 250 insertions, 206 deletions
diff --git a/datafile-app-server/src/main/java/org/onap/dcaegen2/collectors/datafile/model/FileData.java b/datafile-app-server/src/main/java/org/onap/dcaegen2/collectors/datafile/model/FileData.java
index 1098aeed..5377b9c1 100644
--- a/datafile-app-server/src/main/java/org/onap/dcaegen2/collectors/datafile/model/FileData.java
+++ b/datafile-app-server/src/main/java/org/onap/dcaegen2/collectors/datafile/model/FileData.java
@@ -29,21 +29,7 @@ import org.immutables.value.Value;
@Value.Immutable
@Gson.TypeAdapters
public interface FileData {
- String productName();
-
- String vendorName();
-
- String lastEpochMicrosec();
-
- String sourceName();
-
- String startEpochMicrosec();
-
- String timeZoneOffset();
-
- String changeIdentifier();
-
- String changeType();
+ FileMetaData fileMetaData();
String name();
diff --git a/datafile-app-server/src/main/java/org/onap/dcaegen2/collectors/datafile/service/DmaapConsumerJsonParser.java b/datafile-app-server/src/main/java/org/onap/dcaegen2/collectors/datafile/service/DmaapConsumerJsonParser.java
index 629f3ef9..e828776a 100644
--- a/datafile-app-server/src/main/java/org/onap/dcaegen2/collectors/datafile/service/DmaapConsumerJsonParser.java
+++ b/datafile-app-server/src/main/java/org/onap/dcaegen2/collectors/datafile/service/DmaapConsumerJsonParser.java
@@ -29,7 +29,9 @@ import java.util.stream.StreamSupport;
import org.onap.dcaegen2.collectors.datafile.exceptions.DmaapEmptyResponseException;
import org.onap.dcaegen2.collectors.datafile.exceptions.DmaapNotFoundException;
import org.onap.dcaegen2.collectors.datafile.model.FileData;
+import org.onap.dcaegen2.collectors.datafile.model.FileMetaData;
import org.onap.dcaegen2.collectors.datafile.model.ImmutableFileData;
+import org.onap.dcaegen2.collectors.datafile.model.ImmutableFileMetaData;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.StringUtils;
@@ -71,7 +73,20 @@ public class DmaapConsumerJsonParser {
private static final String FILE_READY_CHANGE_IDENTIFIER = "PM_MEAS_FILES";
/**
- * Extract info from string and create @see {@link FileData}.
+ * The data types available in the event name.
+ */
+ private enum EventNameDataType {
+ PRODUCT_NAME(1), VENDOR_NAME(2);
+
+ private int index;
+
+ EventNameDataType(int index) {
+ this.index = index;
+ }
+ }
+
+ /**
+ * Extract info from string and create a {@link FileData}.
*
* @param rawMessage - results from DMaaP
* @return reactive Mono with an array of FileData
@@ -103,39 +118,66 @@ public class DmaapConsumerJsonParser {
}
private Flux<FileData> create(Mono<JsonObject> jsonObject) {
- return jsonObject.flatMapMany(monoJsonP -> !containsHeader(monoJsonP)
- ? Flux.error(new DmaapNotFoundException("Incorrect JsonObject - missing header"))
+ return jsonObject.flatMapMany(monoJsonP -> !containsNotificationFields(monoJsonP)
+ ? Flux.error(new DmaapNotFoundException("Incorrect JsonObject - missing header. " + jsonObject))
: transform(monoJsonP));
}
- private Flux<FileData> transform(JsonObject jsonObject) {
- if (containsHeader(jsonObject, EVENT, NOTIFICATION_FIELDS)) {
- JsonObject commonEventHeader = jsonObject.getAsJsonObject(EVENT).getAsJsonObject(COMMON_EVENT_HEADER);
- String eventName = getValueFromJson(commonEventHeader, EVENT_NAME);
- String productName = getProductNameFromEventName(eventName);
- String vendorName = getVendorNameFromEventName(eventName);
- String lastEpochMicrosec = getValueFromJson(commonEventHeader, LAST_EPOCH_MICROSEC);
- String sourceName = getValueFromJson(commonEventHeader, SOURCE_NAME);
- String startEpochMicrosec = getValueFromJson(commonEventHeader, START_EPOCH_MICROSEC);
- String timeZoneOffset = getValueFromJson(commonEventHeader, TIME_ZONE_OFFSET);
-
- JsonObject notificationFields = jsonObject.getAsJsonObject(EVENT).getAsJsonObject(NOTIFICATION_FIELDS);
- String changeIdentifier = getValueFromJson(notificationFields, CHANGE_IDENTIFIER);
- String changeType = getValueFromJson(notificationFields, CHANGE_TYPE);
- String notificationFieldsVersion = getValueFromJson(notificationFields, NOTIFICATION_FIELDS_VERSION);
+ private Flux<FileData> transform(JsonObject message) {
+ Optional<FileMetaData> fileMetaData = getFileMetaData(message);
+ if (fileMetaData.isPresent()) {
+ JsonObject notificationFields = message.getAsJsonObject(EVENT).getAsJsonObject(NOTIFICATION_FIELDS);
JsonArray arrayOfNamedHashMap = notificationFields.getAsJsonArray(ARRAY_OF_NAMED_HASH_MAP);
- if (isNotificationFieldsHeaderNotEmpty(changeIdentifier, changeType, notificationFieldsVersion)
- && arrayOfNamedHashMap != null && isChangeIdentifierCorrect(changeIdentifier)
- && isChangeTypeCorrect(changeType)) {
- return getAllFileDataFromJson(productName, vendorName, lastEpochMicrosec, sourceName,
- startEpochMicrosec, timeZoneOffset, changeIdentifier, changeType, arrayOfNamedHashMap);
+ if (arrayOfNamedHashMap != null) {
+ return getAllFileDataFromJson(fileMetaData.get(), arrayOfNamedHashMap);
}
- return handleJsonError(changeIdentifier, changeType, notificationFieldsVersion, arrayOfNamedHashMap,
- jsonObject);
+ return Flux.error(new DmaapNotFoundException(
+ "Unable to collect file from xNF. Missing arrayOfNamedHashMap in message. " + message));
+ }
+ return Flux.error(new DmaapNotFoundException(
+ "Unable to collect file from xNF. FileReady event has incorrect JsonObject"));
+ }
+
+ private Optional<FileMetaData> getFileMetaData(JsonObject message) {
+ List<String> missingValues = new ArrayList<>();
+ JsonObject commonEventHeader = message.getAsJsonObject(EVENT).getAsJsonObject(COMMON_EVENT_HEADER);
+ String eventName = getValueFromJson(commonEventHeader, EVENT_NAME, missingValues);
+
+ JsonObject notificationFields = message.getAsJsonObject(EVENT).getAsJsonObject(NOTIFICATION_FIELDS);
+ String changeIdentifier = getValueFromJson(notificationFields, CHANGE_IDENTIFIER, missingValues);
+ String changeType = getValueFromJson(notificationFields, CHANGE_TYPE, missingValues);
+
+ // Just to check that it is in the message. Might be needed in the future if there is a new
+ // version.
+ getValueFromJson(notificationFields, NOTIFICATION_FIELDS_VERSION, missingValues);
+
+ // @formatter:off
+ FileMetaData fileMetaData = ImmutableFileMetaData.builder()
+ .productName(getDataFromEventName(EventNameDataType.PRODUCT_NAME, eventName, missingValues))
+ .vendorName(getDataFromEventName(EventNameDataType.VENDOR_NAME, eventName, missingValues))
+ .lastEpochMicrosec(getValueFromJson(commonEventHeader, LAST_EPOCH_MICROSEC, missingValues))
+ .sourceName(getValueFromJson(commonEventHeader, SOURCE_NAME, missingValues))
+ .startEpochMicrosec(getValueFromJson(commonEventHeader, START_EPOCH_MICROSEC, missingValues))
+ .timeZoneOffset(getValueFromJson(commonEventHeader, TIME_ZONE_OFFSET, missingValues))
+ .changeIdentifier(changeIdentifier)
+ .changeType(changeType)
+ .build();
+ // @formatter:on
+ if (missingValues.isEmpty() && isChangeIdentifierCorrect(changeIdentifier) && isChangeTypeCorrect(changeType)) {
+ return Optional.of(fileMetaData);
+ } else {
+ String errorMessage = "Unable to collect file from xNF.";
+ if (!missingValues.isEmpty()) {
+ errorMessage += " Missing data: " + missingValues;
+ }
+ if (!isChangeIdentifierCorrect(changeIdentifier) || !isChangeTypeCorrect(changeType)) {
+ errorMessage += " Change identifier or change type is wrong.";
+ }
+ errorMessage += " Message: {}";
+ logger.error(errorMessage, message);
+ return Optional.empty();
}
- return Flux.error(
- new DmaapNotFoundException("FileReady event has incorrect JsonObject - missing header. " + jsonObject));
}
private boolean isChangeTypeCorrect(String changeType) {
@@ -146,139 +188,76 @@ public class DmaapConsumerJsonParser {
return FILE_READY_CHANGE_IDENTIFIER.equals(changeIdentifier);
}
- private Flux<FileData> getAllFileDataFromJson(String productName, String vendorName, String lastEpochMicrosec,
- String sourceName, String startEpochMicrosec, String timeZoneOffset, String changeIdentifier,
- String changeType, JsonArray arrayOfAdditionalFields) {
+ private Flux<FileData> getAllFileDataFromJson(FileMetaData fileMetaData, JsonArray arrayOfAdditionalFields) {
List<FileData> res = new ArrayList<>();
for (int i = 0; i < arrayOfAdditionalFields.size(); i++) {
if (arrayOfAdditionalFields.get(i) != null) {
JsonObject fileInfo = (JsonObject) arrayOfAdditionalFields.get(i);
- FileData fileData = getFileDataFromJson(productName, vendorName, lastEpochMicrosec, sourceName,
- startEpochMicrosec, timeZoneOffset, fileInfo, changeIdentifier, changeType);
+ Optional<FileData> fileData = getFileDataFromJson(fileMetaData, fileInfo);
- if (fileData != null) {
- res.add(fileData);
- } else {
- logger.error("Unable to collect file from xNF. File information wrong. Data: {}", fileInfo);
+ if (fileData.isPresent()) {
+ res.add(fileData.get());
}
}
}
return Flux.fromIterable(res);
}
- private FileData getFileDataFromJson(String productName, String vendorName, String lastEpochMicrosec,
- String sourceName, String startEpochMicrosec, String timeZoneOffset, JsonObject fileInfo,
- String changeIdentifier, String changeType) {
+ private Optional<FileData> getFileDataFromJson(FileMetaData fileMetaData, JsonObject fileInfo) {
logger.trace("starting to getFileDataFromJson!");
- FileData fileData = null;
-
- String name = getValueFromJson(fileInfo, NAME);
+ List<String> missingValues = new ArrayList<>();
JsonObject data = fileInfo.getAsJsonObject(HASH_MAP);
- String fileFormatType = getValueFromJson(data, FILE_FORMAT_TYPE);
- String fileFormatVersion = getValueFromJson(data, FILE_FORMAT_VERSION);
- String location = getValueFromJson(data, LOCATION);
- String compression = getValueFromJson(data, COMPRESSION);
-
- if (isFileFormatFieldsNotEmpty(fileFormatVersion, fileFormatType)
- && isNameAndLocationAndCompressionNotEmpty(name, location, compression)) {
- // @formatter:off
- fileData = ImmutableFileData.builder()
- .productName(productName)
- .vendorName(vendorName)
- .lastEpochMicrosec(lastEpochMicrosec)
- .sourceName(sourceName)
- .startEpochMicrosec(startEpochMicrosec)
- .timeZoneOffset(timeZoneOffset)
- .name(name)
- .changeIdentifier(changeIdentifier)
- .changeType(changeType)
- .location(location)
- .compression(compression)
- .fileFormatType(fileFormatType)
- .fileFormatVersion(fileFormatVersion)
- .build();
- // @formatter:on
+
+ // @formatter:off
+ FileData fileData = ImmutableFileData.builder()
+ .fileMetaData(fileMetaData)
+ .name(getValueFromJson(fileInfo, NAME, missingValues))
+ .fileFormatType(getValueFromJson(data, FILE_FORMAT_TYPE, missingValues))
+ .fileFormatVersion(getValueFromJson(data, FILE_FORMAT_VERSION, missingValues))
+ .location(getValueFromJson(data, LOCATION, missingValues))
+ .compression(getValueFromJson(data, COMPRESSION, missingValues))
+ .build();
+ // @formatter:on
+ if (missingValues.isEmpty()) {
+ return Optional.of(fileData);
}
- return fileData;
+ logger.error("Unable to collect file from xNF. File information wrong. Missing data: {} Data: {}",
+ missingValues, fileInfo);
+ return Optional.empty();
}
/**
- * @param eventName
- * @return String of vendorName eventName is defined as:
- * {DomainAbbreviation}_{productName}-{vendorName}_{Description}, example:
- * Noti_RnNode-Ericsson_FileReady
+ * Gets data from the event name, defined as:
+ * {DomainAbbreviation}_{productName}-{vendorName}_{Description}, example:
+ * Noti_RnNode-Ericsson_FileReady
+ *
+ * @param dataType The type of data to get, {@link DmaapConsumerJsonParser.EventNameDataType}.
+ * @param eventName The event name to get the data from.
+ * @param missingValues List of missing values. The dataType will be added if missing.
+ * @return String of data from event name
*/
- private String getVendorNameFromEventName(String eventName) {
+ private String getDataFromEventName(EventNameDataType dataType, String eventName, List<String> missingValues) {
String[] eventArray = eventName.split("_|-");
if (eventArray.length >= 4) {
- return eventArray[2];
+ return eventArray[dataType.index];
} else {
- logger.trace("Can not get vendorName from eventName, eventName is not in correct format: " + eventName);
+ missingValues.add(dataType.toString());
+ logger.error("Can not get {} from eventName, eventName is not in correct format: {}", dataType, eventName);
}
return "";
}
- /**
- * @param eventName
- * @return String of productName
- */
- private String getProductNameFromEventName(String eventName) {
- String[] eventArray = eventName.split("_|-");
- if (eventArray.length >= 4) {
- return eventArray[1];
+ private String getValueFromJson(JsonObject jsonObject, String jsonKey, List<String> missingValues) {
+ if (jsonObject.has(jsonKey)) {
+ return jsonObject.get(jsonKey).getAsString();
} else {
- logger.trace("Can not get productName from eventName, eventName is not in correct format: " + eventName);
+ missingValues.add(jsonKey);
+ return "";
}
- return "";
- }
-
- private String getValueFromJson(JsonObject jsonObject, String jsonKey) {
- return jsonObject.has(jsonKey) ? jsonObject.get(jsonKey).getAsString() : "";
- }
-
- private boolean isNotificationFieldsHeaderNotEmpty(String changeIdentifier, String changeType,
- String notificationFieldsVersion) {
- return isStringIsNotNullAndNotEmpty(changeIdentifier) && isStringIsNotNullAndNotEmpty(changeType)
- && isStringIsNotNullAndNotEmpty(notificationFieldsVersion);
}
- private boolean isFileFormatFieldsNotEmpty(String fileFormatVersion, String fileFormatType) {
- return isStringIsNotNullAndNotEmpty(fileFormatVersion) && isStringIsNotNullAndNotEmpty(fileFormatType);
- }
-
- private boolean isNameAndLocationAndCompressionNotEmpty(String name, String location, String compression) {
- return isStringIsNotNullAndNotEmpty(name) && isStringIsNotNullAndNotEmpty(location)
- && isStringIsNotNullAndNotEmpty(compression);
- }
-
- private boolean containsHeader(JsonObject jsonObject) {
+ private boolean containsNotificationFields(JsonObject jsonObject) {
return jsonObject.has(EVENT) && jsonObject.getAsJsonObject(EVENT).has(NOTIFICATION_FIELDS);
}
-
- private boolean containsHeader(JsonObject jsonObject, String topHeader, String header) {
- return jsonObject.has(topHeader) && jsonObject.getAsJsonObject(topHeader).has(header);
- }
-
- private boolean isStringIsNotNullAndNotEmpty(String string) {
- return string != null && !string.isEmpty();
- }
-
- private Flux<FileData> handleJsonError(String changeIdentifier, String changeType, String notificationFieldsVersion,
- JsonArray arrayOfNamedHashMap, JsonObject jsonObject) {
- String errorMessage = "FileReady event information is incomplete or incorrect!\n";
- if (!isNotificationFieldsHeaderNotEmpty(changeIdentifier, changeType, notificationFieldsVersion)) {
- errorMessage += "header is missing.\n";
- }
- if (arrayOfNamedHashMap == null) {
- errorMessage += "arrayOfNamedHashMap is missing.\n";
- }
- if (!isChangeIdentifierCorrect(changeIdentifier)) {
- errorMessage += "changeIdentifier is incorrect.\n";
- }
- if (!isChangeTypeCorrect(changeType)) {
- errorMessage += "changeType is incorrect.\n";
- }
- return Flux.error(new DmaapNotFoundException(errorMessage + jsonObject));
- }
}
diff --git a/datafile-app-server/src/main/java/org/onap/dcaegen2/collectors/datafile/tasks/XnfCollectorTaskImpl.java b/datafile-app-server/src/main/java/org/onap/dcaegen2/collectors/datafile/tasks/XnfCollectorTaskImpl.java
index 75549f9b..b861653a 100644
--- a/datafile-app-server/src/main/java/org/onap/dcaegen2/collectors/datafile/tasks/XnfCollectorTaskImpl.java
+++ b/datafile-app-server/src/main/java/org/onap/dcaegen2/collectors/datafile/tasks/XnfCollectorTaskImpl.java
@@ -162,12 +162,12 @@ public class XnfCollectorTaskImpl implements XnfCollectorTask {
}
private ConsumerDmaapModel getConsumerDmaapModel(FileData fileData, String localFile) {
- String productName = fileData.productName();
- String vendorName = fileData.vendorName();
- String lastEpochMicrosec = fileData.lastEpochMicrosec();
- String sourceName = fileData.sourceName();
- String startEpochMicrosec = fileData.startEpochMicrosec();
- String timeZoneOffset = fileData.timeZoneOffset();
+ String productName = fileData.fileMetaData().productName();
+ String vendorName = fileData.fileMetaData().vendorName();
+ String lastEpochMicrosec = fileData.fileMetaData().lastEpochMicrosec();
+ String sourceName = fileData.fileMetaData().sourceName();
+ String startEpochMicrosec = fileData.fileMetaData().startEpochMicrosec();
+ String timeZoneOffset = fileData.fileMetaData().timeZoneOffset();
String name = fileData.name();
String location = fileData.location();
String internalLocation = localFile;
diff --git a/datafile-app-server/src/test/java/org/onap/dcaegen2/collectors/datafile/service/DmaapConsumerJsonParserTest.java b/datafile-app-server/src/test/java/org/onap/dcaegen2/collectors/datafile/service/DmaapConsumerJsonParserTest.java
index d5491f5e..a9bc546f 100644
--- a/datafile-app-server/src/test/java/org/onap/dcaegen2/collectors/datafile/service/DmaapConsumerJsonParserTest.java
+++ b/datafile-app-server/src/test/java/org/onap/dcaegen2/collectors/datafile/service/DmaapConsumerJsonParserTest.java
@@ -27,7 +27,9 @@ import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import org.onap.dcaegen2.collectors.datafile.exceptions.DmaapNotFoundException;
import org.onap.dcaegen2.collectors.datafile.model.FileData;
+import org.onap.dcaegen2.collectors.datafile.model.FileMetaData;
import org.onap.dcaegen2.collectors.datafile.model.ImmutableFileData;
+import org.onap.dcaegen2.collectors.datafile.model.ImmutableFileMetaData;
import org.onap.dcaegen2.collectors.datafile.utils.JsonMessage;
import org.onap.dcaegen2.collectors.datafile.utils.JsonMessage.AdditionalField;
@@ -39,6 +41,7 @@ import reactor.test.StepVerifier;
* @author <a href="mailto:henrik.b.andersson@est.tech">Henrik Andersson</a>
*/
class DmaapConsumerJsonParserTest {
+ 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";
@@ -67,13 +70,14 @@ class DmaapConsumerJsonParserTest {
.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();
- FileData expectedFileData = ImmutableFileData.builder()
+ FileMetaData fileMetaData = ImmutableFileMetaData.builder()
.productName(PRODUCT_NAME)
.vendorName(VENDOR_NAME)
.lastEpochMicrosec(LAST_EPOCH_MICROSEC)
@@ -82,6 +86,9 @@ class DmaapConsumerJsonParserTest {
.timeZoneOffset(TIME_ZONE_OFFSET)
.changeIdentifier(CHANGE_IDENTIFIER)
.changeType(CHANGE_TYPE)
+ .build();
+ FileData expectedFileData = ImmutableFileData.builder()
+ .fileMetaData(fileMetaData)
.name(PM_FILE_NAME)
.location(LOCATION)
.compression(GZIP_COMPRESSION)
@@ -101,6 +108,34 @@ class DmaapConsumerJsonParserTest {
}
@Test
+ void whenPassingCorrectJsonWithFaultyEventName_validationThrowingAnException() {
+ // @formatter:off
+ 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();
+ // @formatter:on
+ String messageString = message.toString();
+ String parsedString = message.getParsed();
+ DmaapConsumerJsonParser dmaapConsumerJsonParser = spy(new DmaapConsumerJsonParser());
+ JsonElement jsonElement = new JsonParser().parse(parsedString);
+ Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(dmaapConsumerJsonParser)
+ .getJsonObjectFromAnArray(jsonElement);
+
+ StepVerifier.create(dmaapConsumerJsonParser.getJsonObject(Mono.just(messageString))).expectSubscription()
+ .expectError(DmaapNotFoundException.class).verify();
+ }
+
+ @Test
void whenPassingCorrectJsonWithoutName_noFileData() {
// @formatter:off
AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder()
@@ -110,6 +145,7 @@ class DmaapConsumerJsonParserTest {
.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)
@@ -137,6 +173,7 @@ class DmaapConsumerJsonParserTest {
.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)
@@ -164,6 +201,7 @@ class DmaapConsumerJsonParserTest {
.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)
@@ -191,6 +229,7 @@ class DmaapConsumerJsonParserTest {
.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)
@@ -225,6 +264,7 @@ class DmaapConsumerJsonParserTest {
.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)
@@ -232,7 +272,7 @@ class DmaapConsumerJsonParserTest {
.addAdditionalField(additionalField)
.build();
- FileData expectedFileData = ImmutableFileData.builder()
+ FileMetaData fileMetaData = ImmutableFileMetaData.builder()
.productName(PRODUCT_NAME)
.vendorName(VENDOR_NAME)
.lastEpochMicrosec(LAST_EPOCH_MICROSEC)
@@ -241,6 +281,9 @@ class DmaapConsumerJsonParserTest {
.timeZoneOffset(TIME_ZONE_OFFSET)
.changeIdentifier(CHANGE_IDENTIFIER)
.changeType(CHANGE_TYPE)
+ .build();
+ FileData expectedFileData = ImmutableFileData.builder()
+ .fileMetaData(fileMetaData)
.name(PM_FILE_NAME)
.location(LOCATION)
.compression(GZIP_COMPRESSION)
@@ -263,6 +306,7 @@ class DmaapConsumerJsonParserTest {
void whenPassingJsonWithoutMandatoryHeaderInformation_validationThrowingAnException() {
// @formatter:off
JsonMessage message = new JsonMessage.JsonMessageBuilder()
+ .eventName(NR_RADIO_ERICSSON_EVENT_NAME)
.changeIdentifier("PM_MEAS_FILES_INVALID")
.changeType("FileReady_INVALID")
.notificationFieldsVersion("1.0_INVALID")
@@ -305,6 +349,7 @@ class DmaapConsumerJsonParserTest {
.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)
@@ -332,6 +377,7 @@ class DmaapConsumerJsonParserTest {
.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)
diff --git a/datafile-app-server/src/test/java/org/onap/dcaegen2/collectors/datafile/tasks/DmaapConsumerTaskImplTest.java b/datafile-app-server/src/test/java/org/onap/dcaegen2/collectors/datafile/tasks/DmaapConsumerTaskImplTest.java
index 8810c921..c6d115f6 100644
--- a/datafile-app-server/src/test/java/org/onap/dcaegen2/collectors/datafile/tasks/DmaapConsumerTaskImplTest.java
+++ b/datafile-app-server/src/test/java/org/onap/dcaegen2/collectors/datafile/tasks/DmaapConsumerTaskImplTest.java
@@ -36,8 +36,10 @@ import org.onap.dcaegen2.collectors.datafile.exceptions.DatafileTaskException;
import org.onap.dcaegen2.collectors.datafile.exceptions.DmaapEmptyResponseException;
import org.onap.dcaegen2.collectors.datafile.model.ConsumerDmaapModel;
import org.onap.dcaegen2.collectors.datafile.model.FileData;
+import org.onap.dcaegen2.collectors.datafile.model.FileMetaData;
import org.onap.dcaegen2.collectors.datafile.model.ImmutableConsumerDmaapModel;
import org.onap.dcaegen2.collectors.datafile.model.ImmutableFileData;
+import org.onap.dcaegen2.collectors.datafile.model.ImmutableFileMetaData;
import org.onap.dcaegen2.collectors.datafile.service.DmaapConsumerJsonParser;
import org.onap.dcaegen2.collectors.datafile.service.consumer.DmaapConsumerReactiveHttpClient;
import org.onap.dcaegen2.collectors.datafile.utils.JsonMessage;
@@ -52,6 +54,7 @@ import reactor.test.StepVerifier;
* @author <a href="mailto:henrik.b.andersson@est.tech">Henrik Andersson</a>
*/
class DmaapConsumerTaskImplTest {
+ 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 = "8745745764578";
@@ -112,6 +115,7 @@ class DmaapConsumerTaskImplTest {
.build();
JsonMessage ftpesJsonMessage = new JsonMessage.JsonMessageBuilder()
+ .eventName(NR_RADIO_ERICSSON_EVENT_NAME)
.changeIdentifier(PM_MEAS_CHANGE_IDENTIFIER)
.changeType(FILE_READY_CHANGE_TYPE)
.notificationFieldsVersion("1.0")
@@ -119,7 +123,7 @@ class DmaapConsumerTaskImplTest {
.build();
ftpesMessage = ftpesJsonMessage.toString();
- ftpesFileData = ImmutableFileData.builder()
+ FileMetaData fileMetaData = ImmutableFileMetaData.builder()
.productName(PRODUCT_NAME)
.vendorName(VENDOR_NAME)
.lastEpochMicrosec(LAST_EPOCH_MICROSEC)
@@ -128,6 +132,9 @@ class DmaapConsumerTaskImplTest {
.timeZoneOffset(TIME_ZONE_OFFSET)
.changeIdentifier(PM_MEAS_CHANGE_IDENTIFIER)
.changeType(FILE_READY_CHANGE_TYPE)
+ .build();
+ ftpesFileData = ImmutableFileData.builder()
+ .fileMetaData(fileMetaData)
.name(PM_FILE_NAME)
.location(FTPES_LOCATION)
.compression(GZIP_COMPRESSION)
@@ -142,6 +149,7 @@ class DmaapConsumerTaskImplTest {
.fileFormatVersion(FILE_FORMAT_VERSION)
.build();
JsonMessage sftpJsonMessage = new JsonMessage.JsonMessageBuilder()
+ .eventName(NR_RADIO_ERICSSON_EVENT_NAME)
.changeIdentifier(PM_MEAS_CHANGE_IDENTIFIER)
.changeType(FILE_READY_CHANGE_TYPE)
.notificationFieldsVersion("1.0")
@@ -149,14 +157,7 @@ class DmaapConsumerTaskImplTest {
.build();
sftpMessage = sftpJsonMessage.toString();
sftpFileData = ImmutableFileData.builder()
- .productName(PRODUCT_NAME)
- .vendorName(VENDOR_NAME)
- .lastEpochMicrosec(LAST_EPOCH_MICROSEC)
- .sourceName(SOURCE_NAME)
- .startEpochMicrosec(START_EPOCH_MICROSEC)
- .timeZoneOffset(TIME_ZONE_OFFSET)
- .changeIdentifier(PM_MEAS_CHANGE_IDENTIFIER)
- .changeType(FILE_READY_CHANGE_TYPE)
+ .fileMetaData(fileMetaData)
.name(PM_FILE_NAME)
.location(SFTP_LOCATION)
.compression(GZIP_COMPRESSION)
diff --git a/datafile-app-server/src/test/java/org/onap/dcaegen2/collectors/datafile/tasks/XnfCollectorTaskImplTest.java b/datafile-app-server/src/test/java/org/onap/dcaegen2/collectors/datafile/tasks/XnfCollectorTaskImplTest.java
index acd0c0bd..55fa639f 100644
--- a/datafile-app-server/src/test/java/org/onap/dcaegen2/collectors/datafile/tasks/XnfCollectorTaskImplTest.java
+++ b/datafile-app-server/src/test/java/org/onap/dcaegen2/collectors/datafile/tasks/XnfCollectorTaskImplTest.java
@@ -37,8 +37,10 @@ import org.onap.dcaegen2.collectors.datafile.ftp.ImmutableFileServerData;
import org.onap.dcaegen2.collectors.datafile.ftp.SftpClient;
import org.onap.dcaegen2.collectors.datafile.model.ConsumerDmaapModel;
import org.onap.dcaegen2.collectors.datafile.model.FileData;
+import org.onap.dcaegen2.collectors.datafile.model.FileMetaData;
import org.onap.dcaegen2.collectors.datafile.model.ImmutableConsumerDmaapModel;
import org.onap.dcaegen2.collectors.datafile.model.ImmutableFileData;
+import org.onap.dcaegen2.collectors.datafile.model.ImmutableFileMetaData;
import reactor.test.StepVerifier;
@@ -53,7 +55,7 @@ public class XnfCollectorTaskImplTest {
private static final String SOURCE_NAME = "oteNB5309";
private static final String START_EPOCH_MICROSEC = "8745745764578";
private static final String TIME_ZONE_OFFSET = "UTC+05:00";
- private static final String PM_MEAS_CHANGE_IDINTIFIER = "PM_MEAS_FILES";
+ private static final String PM_MEAS_CHANGE_IDENTIFIER = "PM_MEAS_FILES";
private static final String FILE_READY_CHANGE_TYPE = "FileReady";
private static final String FTPES_SCHEME = "ftpes://";
private static final String SFTP_SCHEME = "sftp://";
@@ -83,7 +85,18 @@ public class XnfCollectorTaskImplTest {
private SftpClient sftpClientMock = mock(SftpClient.class);
private RetryTimer retryTimerMock = mock(RetryTimer.class);
-
+ // @formatter:off
+ private FileMetaData fileMetaData = ImmutableFileMetaData.builder()
+ .productName(PRODUCT_NAME)
+ .vendorName(VENDOR_NAME)
+ .lastEpochMicrosec(LAST_EPOCH_MICROSEC)
+ .sourceName(SOURCE_NAME)
+ .startEpochMicrosec(START_EPOCH_MICROSEC)
+ .timeZoneOffset(TIME_ZONE_OFFSET)
+ .changeIdentifier(PM_MEAS_CHANGE_IDENTIFIER)
+ .changeType(FILE_READY_CHANGE_TYPE)
+ .build();;
+ // @formatter:on
@BeforeAll
public static void setUpConfiguration() {
@@ -99,16 +112,9 @@ public class XnfCollectorTaskImplTest {
XnfCollectorTaskImpl collectorUndetTest =
new XnfCollectorTaskImpl(appConfigMock, ftpsClientMock, sftpClientMock);
- // @formatter:off
+ // @formatter:off
FileData fileData = ImmutableFileData.builder()
- .productName(PRODUCT_NAME)
- .vendorName(VENDOR_NAME)
- .lastEpochMicrosec(LAST_EPOCH_MICROSEC)
- .sourceName(SOURCE_NAME)
- .startEpochMicrosec(START_EPOCH_MICROSEC)
- .timeZoneOffset(TIME_ZONE_OFFSET)
- .changeIdentifier(PM_MEAS_CHANGE_IDINTIFIER)
- .changeType(FILE_READY_CHANGE_TYPE)
+ .fileMetaData(fileMetaData)
.name(PM_FILE_NAME)
.location(FTPES_LOCATION)
.compression(GZIP_COMPRESSION)
@@ -160,14 +166,7 @@ public class XnfCollectorTaskImplTest {
new XnfCollectorTaskImpl(appConfigMock, ftpsClientMock, sftpClientMock);
// @formatter:off
FileData fileData = ImmutableFileData.builder()
- .productName(PRODUCT_NAME)
- .vendorName(VENDOR_NAME)
- .lastEpochMicrosec(LAST_EPOCH_MICROSEC)
- .sourceName(SOURCE_NAME)
- .startEpochMicrosec(START_EPOCH_MICROSEC)
- .timeZoneOffset(TIME_ZONE_OFFSET)
- .changeIdentifier(PM_MEAS_CHANGE_IDINTIFIER)
- .changeType(FILE_READY_CHANGE_TYPE)
+ .fileMetaData(fileMetaData)
.name(PM_FILE_NAME)
.location(SFTP_LOCATION)
.compression(GZIP_COMPRESSION)
@@ -215,14 +214,7 @@ public class XnfCollectorTaskImplTest {
collectorUndetTest.setRetryTimer(retryTimerMock);
// @formatter:off
FileData fileData = ImmutableFileData.builder()
- .productName(PRODUCT_NAME)
- .vendorName(VENDOR_NAME)
- .lastEpochMicrosec(LAST_EPOCH_MICROSEC)
- .sourceName(SOURCE_NAME)
- .startEpochMicrosec(START_EPOCH_MICROSEC)
- .timeZoneOffset(TIME_ZONE_OFFSET)
- .changeIdentifier(PM_MEAS_CHANGE_IDINTIFIER)
- .changeType(FILE_READY_CHANGE_TYPE)
+ .fileMetaData(fileMetaData)
.name(PM_FILE_NAME)
.location(FTPES_LOCATION)
.compression(GZIP_COMPRESSION)
@@ -256,14 +248,7 @@ public class XnfCollectorTaskImplTest {
collectorUndetTest.setRetryTimer(retryTimerMock);
// @formatter:off
FileData fileData = ImmutableFileData.builder()
- .productName(PRODUCT_NAME)
- .vendorName(VENDOR_NAME)
- .lastEpochMicrosec(LAST_EPOCH_MICROSEC)
- .sourceName(SOURCE_NAME)
- .startEpochMicrosec(START_EPOCH_MICROSEC)
- .timeZoneOffset(TIME_ZONE_OFFSET)
- .changeIdentifier(PM_MEAS_CHANGE_IDINTIFIER)
- .changeType(FILE_READY_CHANGE_TYPE)
+ .fileMetaData(fileMetaData)
.name(PM_FILE_NAME)
.location(FTPES_LOCATION)
.compression(GZIP_COMPRESSION)
@@ -313,14 +298,7 @@ public class XnfCollectorTaskImplTest {
new XnfCollectorTaskImpl(appConfigMock, ftpsClientMock, sftpClientMock);
// @formatter:off
FileData fileData = ImmutableFileData.builder()
- .productName(PRODUCT_NAME)
- .vendorName(VENDOR_NAME)
- .lastEpochMicrosec(LAST_EPOCH_MICROSEC)
- .sourceName(SOURCE_NAME)
- .startEpochMicrosec(START_EPOCH_MICROSEC)
- .timeZoneOffset(TIME_ZONE_OFFSET)
- .changeIdentifier(PM_MEAS_CHANGE_IDINTIFIER)
- .changeType(FILE_READY_CHANGE_TYPE)
+ .fileMetaData(fileMetaData)
.name(PM_FILE_NAME)
.location("http://host.com/file.zip")
.compression(GZIP_COMPRESSION)
diff --git a/datafile-app-server/src/test/java/org/onap/dcaegen2/collectors/datafile/utils/JsonMessage.java b/datafile-app-server/src/test/java/org/onap/dcaegen2/collectors/datafile/utils/JsonMessage.java
index 8a25d72f..76c33bb4 100644
--- a/datafile-app-server/src/test/java/org/onap/dcaegen2/collectors/datafile/utils/JsonMessage.java
+++ b/datafile-app-server/src/test/java/org/onap/dcaegen2/collectors/datafile/utils/JsonMessage.java
@@ -27,6 +27,7 @@ import java.util.List;
*
*/
public class JsonMessage {
+ private String eventName;
private String changeIdentifier;
private String changeType;
private String notificationFieldsVersion;
@@ -61,7 +62,7 @@ public class JsonMessage {
+ "\"commonEventHeader\":{"
+ "\"domain\":\"notification\","
+ "\"eventId\":\"<<SerialNumber>>-reg\","
- + "\"eventName\":\"Noti_NrRadio-Ericsson_FileReady\","
+ + "\"eventName\":\"" + eventName + "\","
+ "\"eventType\":\"fileReady\","
+ "\"internalHeaderFields\":{},"
+ "\"lastEpochMicrosec\":1519837825682,"
@@ -88,6 +89,7 @@ public class JsonMessage {
}
private JsonMessage(final JsonMessageBuilder builder) {
+ this.eventName = builder.eventName;
this.changeIdentifier = builder.changeIdentifier;
this.changeType = builder.changeType;
this.notificationFieldsVersion = builder.notificationFieldsVersion;
@@ -161,11 +163,17 @@ public class JsonMessage {
}
public static class JsonMessageBuilder {
+ private String eventName;
private String changeIdentifier;
private String changeType;
private String notificationFieldsVersion;
private List<AdditionalField> arrayOfAdditionalFields = new ArrayList<AdditionalField>();
+ public JsonMessageBuilder eventName(String eventName) {
+ this.eventName = eventName;
+ return this;
+ }
+
public JsonMessageBuilder changeIdentifier(String changeIdentifier) {
this.changeIdentifier = changeIdentifier;
return this;
@@ -227,6 +235,7 @@ public class JsonMessage {
.fileFormatVersion("V10")
.build();
JsonMessage message = new JsonMessage.JsonMessageBuilder()
+ .eventName("Noti_NrRadio-Ericsson_FileReady")
.changeIdentifier("PM_MEAS_FILES")
.changeType("FileReady")
.notificationFieldsVersion("2.0")
diff --git a/datafile-commons/src/main/java/org/onap/dcaegen2/collectors/datafile/model/FileMetaData.java b/datafile-commons/src/main/java/org/onap/dcaegen2/collectors/datafile/model/FileMetaData.java
new file mode 100644
index 00000000..c3e7c154
--- /dev/null
+++ b/datafile-commons/src/main/java/org/onap/dcaegen2/collectors/datafile/model/FileMetaData.java
@@ -0,0 +1,45 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2018 Nordix Foundation. 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.model;
+
+import org.immutables.gson.Gson;
+import org.immutables.value.Value;
+
+/**
+ * @author <a href="mailto:henrik.b.andersson@est.tech">Henrik Andersson</a>
+ */
+@Value.Immutable
+@Gson.TypeAdapters
+public interface FileMetaData {
+ String productName();
+
+ String vendorName();
+
+ String lastEpochMicrosec();
+
+ String sourceName();
+
+ String startEpochMicrosec();
+
+ String timeZoneOffset();
+
+ String changeIdentifier();
+
+ String changeType();
+}