From: aravind.est Date: Wed, 5 Mar 2025 12:17:06 +0000 (+0000) Subject: Add support for different fileready message format X-Git-Tag: 1.2.0^0 X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=commitdiff_plain;h=cadc164c7076cb4ef5b17dc5efee42edaf3f2d64;p=nonrtric%2Fplt%2Franpm.git Add support for different fileready message format New fileready message format added. Changes made to support existing format by default and new format when the class name is given in the configuration Change-Id: Ica697fec36ba1a94a722ba062b0b67791532b20a Signed-off-by: aravind.est --- diff --git a/datafilecollector/README.md b/datafilecollector/README.md index 49e73bb..cd5856c 100644 --- a/datafilecollector/README.md +++ b/datafilecollector/README.md @@ -34,11 +34,11 @@ The latest documentation can be found here: https://docs.o-ran-sc.org/projects/o-ran-sc-nonrtric-plt-ranpm/en/latest/datafilecollector/index.html -The comonent is part of the RAM PM use case, which is described here: +The component is part of the RAM PM use case, which is described here: https://docs.o-ran-sc.org/projects/o-ran-sc-nonrtric-plt-ranpm/en/latest/overview.html#overview ## License -Copyright (C) 2018-2019 NOKIA Intellectual Property, 2018-2023 Nordix Foundation. All rights reserved. +Copyright (C) 2023-2025 OpenInfra Foundation Europe. All rights reserved, Copyright (C) 2018-2019 NOKIA Intellectual Property, 2018-2023 Nordix Foundation. All rights reserved. [License](http://www.apache.org/licenses/LICENSE-2.0) diff --git a/datafilecollector/config/application.yaml b/datafilecollector/config/application.yaml index 5352f1b..c78e3d6 100644 --- a/datafilecollector/config/application.yaml +++ b/datafilecollector/config/application.yaml @@ -32,6 +32,9 @@ app: # If specified, and authorization token will be loaded from file and inserted in each HTTP header when using HTTP/HTTPS. # If the file name is empty, no authorization token is used auth-token-file: + # If specified, this value will be used as a class to map the fileready event from kafka + # If this is empty, default filereadymessage class will be used + file-ready-message-class: kafka: # KAFKA boostrap servers. # several redundant boostrap servers can be specified, separated by a comma ','. diff --git a/datafilecollector/src/main/java/org/oran/datafile/configuration/AppConfig.java b/datafilecollector/src/main/java/org/oran/datafile/configuration/AppConfig.java index 6282cd4..c1eb8b6 100644 --- a/datafilecollector/src/main/java/org/oran/datafile/configuration/AppConfig.java +++ b/datafilecollector/src/main/java/org/oran/datafile/configuration/AppConfig.java @@ -2,6 +2,7 @@ * ============LICENSE_START====================================================================== * Copyright (C) 2018, 2020-2022 Nokia. All rights reserved. * Copyright (C) 2018-2023 Nordix Foundation. All rights reserved. + * Copyright (C) 2023-2025 OpenInfra Foundation Europe. 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 @@ -106,6 +107,10 @@ public class AppConfig { @Getter private int noOfWorkerThreads; + @Value("${app.file-ready-message-class:}") + @Getter + private String fileReadyMessageClass; + @Value("${app.kafka.ssl.key-store-location}") private String kafkaKeyStoreLocation; diff --git a/datafilecollector/src/main/java/org/oran/datafile/model/DefaultFileReadyMessage.java b/datafilecollector/src/main/java/org/oran/datafile/model/DefaultFileReadyMessage.java new file mode 100644 index 0000000..49753fe --- /dev/null +++ b/datafilecollector/src/main/java/org/oran/datafile/model/DefaultFileReadyMessage.java @@ -0,0 +1,154 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2019-2023 Nordix Foundation. + * Copyright (C) 2023-2025 OpenInfra Foundation Europe. 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.oran.datafile.model; + +import java.util.List; + +import lombok.Builder; + +@Builder +public class DefaultFileReadyMessage implements FileReadyMessage { + + /** + * Meta data about a fileReady message. + */ + @Builder + public static class MessageMetaData { + + @SuppressWarnings("java:S1104") + public String eventId; + + @SuppressWarnings("java:S1104") + public String priority; + + @SuppressWarnings("java:S1104") + public String version; + + @SuppressWarnings("java:S1104") + public String reportingEntityName; + + @SuppressWarnings("java:S1104") + public int sequence; + + @SuppressWarnings("java:S1104") + public String domain; + + @SuppressWarnings("java:S1104") + public String eventName; + + @SuppressWarnings("java:S1104") + public String vesEventListenerVersion; + + @SuppressWarnings("java:S1104") + public String sourceName; + + @SuppressWarnings("java:S1104") + public long lastEpochMicrosec; + + @SuppressWarnings("java:S1104") + public long startEpochMicrosec; + + @SuppressWarnings("java:S1104") + public String timeZoneOffset; + + @SuppressWarnings("java:S1104") + public String changeIdentifier; + + /** + * Gets data from the event name. Defined as: + * {DomainAbbreviation}_{productName}-{vendorName}_{Description}, + * example: Noti_RnNode-Ericsson_FileReady + * + */ + @SuppressWarnings("java:S6035") + public String productName() { + String[] eventArray = eventName.split("_|-"); + if (eventArray.length >= 2) { + return eventArray[1]; + } else { + return eventName; + } + } + + @SuppressWarnings("java:S6035") + public String vendorName() { + String[] eventArray = eventName.split("_|-"); + if (eventArray.length >= 3) { + return eventArray[2]; + } else { + return eventName; + } + } + } + + @Builder + public static class FileInfo { + @SuppressWarnings("java:S1104") + public String fileFormatType; + + @SuppressWarnings("java:S1104") + public String location; + + @SuppressWarnings("java:S1104") + public String fileFormatVersion; + + @SuppressWarnings("java:S1104") + public String compression; + } + + @Builder + public static class ArrayOfNamedHashMap { + @SuppressWarnings("java:S1104") + public String name; + + @SuppressWarnings("java:S1104") + public FileInfo hashMap; + } + + @Builder + public static class NotificationFields { + @SuppressWarnings("java:S1104") + public String notificationFieldsVersion; + + @SuppressWarnings("java:S1104") + public String changeType; + + @SuppressWarnings("java:S1104") + public String changeIdentifier; + + @SuppressWarnings("java:S1104") + public List arrayOfNamedHashMap; + } + + @Builder + public static class Event { + @SuppressWarnings("java:S1104") + public MessageMetaData commonEventHeader; + + @SuppressWarnings("java:S1104") + public NotificationFields notificationFields; + } + + @SuppressWarnings("java:S1104") + public Event event; + +} diff --git a/datafilecollector/src/main/java/org/oran/datafile/model/FileData.java b/datafilecollector/src/main/java/org/oran/datafile/model/FileData.java index 33a9327..72e4cd6 100644 --- a/datafilecollector/src/main/java/org/oran/datafile/model/FileData.java +++ b/datafilecollector/src/main/java/org/oran/datafile/model/FileData.java @@ -2,6 +2,7 @@ * ============LICENSE_START======================================================= * Copyright (C) 2019-2023 Nordix Foundation. * Copyright (C) 2021 Nokia. All rights reserved. + * Copyright (C) 2023-2025 OpenInfra Foundation Europe. 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. @@ -87,16 +88,34 @@ public class FileData { private static final Logger logger = LoggerFactory.getLogger(FileData.class); @SuppressWarnings("java:S1104") - public FileReadyMessage.ArrayOfNamedHashMap fileInfo; + public DefaultFileReadyMessage.ArrayOfNamedHashMap defaultFileInfo; @SuppressWarnings("java:S1104") - public FileReadyMessage.MessageMetaData messageMetaData; + public TS28532FileReadyMessage.FileInfo ts28532FileInfo; - public static Iterable createFileData(FileReadyMessage msg) { + @SuppressWarnings("java:S1104") + public DefaultFileReadyMessage.MessageMetaData messageMetaData; + + @SuppressWarnings("java:S1104") + public TS28532FileReadyMessage.MessageMetaData ts28532MessageMetaData; + + private String fileReadyMessageClass; + + public static Iterable createFileData(FileReadyMessage msg, String fileReadyMessageClass) { Collection res = new ArrayList<>(); - for (FileReadyMessage.ArrayOfNamedHashMap arr : msg.event.notificationFields.arrayOfNamedHashMap) { - FileData data = FileData.builder().fileInfo(arr).messageMetaData(msg.event.commonEventHeader).build(); - res.add(data); + + if(fileReadyMessageClass == null || fileReadyMessageClass.isEmpty()) { + DefaultFileReadyMessage defaultMsg = (DefaultFileReadyMessage) msg; + for (DefaultFileReadyMessage.ArrayOfNamedHashMap arr : defaultMsg.event.notificationFields.arrayOfNamedHashMap) { + FileData data = FileData.builder().defaultFileInfo(arr).fileReadyMessageClass(fileReadyMessageClass).messageMetaData(defaultMsg.event.commonEventHeader).build(); + res.add(data); + } + } else { + TS28532FileReadyMessage ts28532DefaultMsg = (TS28532FileReadyMessage) msg; + for (TS28532FileReadyMessage.FileInfo arr : ts28532DefaultMsg.event.stndDefinedFields.data.fileInfoList) { + FileData data = FileData.builder().ts28532FileInfo(arr).fileReadyMessageClass(fileReadyMessageClass).ts28532MessageMetaData(ts28532DefaultMsg.event.commonEventHeader).build(); + res.add(data); + } } return res; } @@ -107,11 +126,19 @@ public class FileData { * @return the name of the PNF, must be unique in the network */ public String sourceName() { - return messageMetaData.sourceName; + if(fileReadyMessageClass == null || fileReadyMessageClass.isEmpty()) { + return this.messageMetaData.sourceName; + } else { + return this.ts28532MessageMetaData.sourceName; + } } public String name() { - return this.messageMetaData.sourceName + "/" + fileInfo.name; + if(fileReadyMessageClass == null || fileReadyMessageClass.isEmpty()) { + return this.messageMetaData.sourceName + "/" + defaultFileInfo.name; + } else { + return this.ts28532MessageMetaData.sourceName + "/" + ts28532FileInfo.fileName(); + } } /** @@ -120,11 +147,11 @@ public class FileData { * @return the path to the file on the PNF. */ public String remoteFilePath() { - return URI.create(fileInfo.hashMap.location).getPath(); + return getLocationURI().getPath(); } public Scheme scheme() { - URI uri = URI.create(fileInfo.hashMap.location); + URI uri = getLocationURI(); try { return Scheme.getSchemeFromString(uri.getScheme()); } catch (Exception e) { @@ -133,13 +160,25 @@ public class FileData { } } + private URI getLocationURI() { + if(fileReadyMessageClass == null || fileReadyMessageClass.isEmpty()) { + return URI.create(defaultFileInfo.hashMap.location); + } else { + return URI.create(ts28532FileInfo.fileLocation); + } + } + /** * Get the path to the locally stored file. * * @return the path to the locally stored file. */ public Path getLocalFilePath(AppConfig config) { - return Paths.get(config.getCollectedFilesPath(), this.messageMetaData.sourceName, fileInfo.name); + if(fileReadyMessageClass == null || fileReadyMessageClass.isEmpty()) { + return Paths.get(config.getCollectedFilesPath(), this.messageMetaData.sourceName, defaultFileInfo.name); + } else { + return Paths.get(config.getCollectedFilesPath(), this.ts28532MessageMetaData.sourceName, ts28532FileInfo.fileName()); + } } /** @@ -150,7 +189,7 @@ public class FileData { * from. */ public FileServerData fileServerData() { - URI uri = URI.create(fileInfo.hashMap.location); + URI uri = getLocationURI(); Optional userInfo = getUserNameAndPasswordIfGiven(uri.getUserInfo()); FileServerDataBuilder builder = FileServerData.builder() // diff --git a/datafilecollector/src/main/java/org/oran/datafile/model/FileReadyMessage.java b/datafilecollector/src/main/java/org/oran/datafile/model/FileReadyMessage.java index 05b55ea..cc76d72 100644 --- a/datafilecollector/src/main/java/org/oran/datafile/model/FileReadyMessage.java +++ b/datafilecollector/src/main/java/org/oran/datafile/model/FileReadyMessage.java @@ -1,6 +1,6 @@ /*- * ============LICENSE_START======================================================= - * Copyright (C) 2019-2023 Nordix Foundation. + * Copyright (C) 2025 OpenInfra Foundation Europe. 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. @@ -20,134 +20,5 @@ package org.oran.datafile.model; -import java.util.List; - -import lombok.Builder; - -@Builder -public class FileReadyMessage { - - /** - * Meta data about a fileReady message. - */ - @Builder - public static class MessageMetaData { - - @SuppressWarnings("java:S1104") - public String eventId; - - @SuppressWarnings("java:S1104") - public String priority; - - @SuppressWarnings("java:S1104") - public String version; - - @SuppressWarnings("java:S1104") - public String reportingEntityName; - - @SuppressWarnings("java:S1104") - public int sequence; - - @SuppressWarnings("java:S1104") - public String domain; - - @SuppressWarnings("java:S1104") - public String eventName; - - @SuppressWarnings("java:S1104") - public String vesEventListenerVersion; - - @SuppressWarnings("java:S1104") - public String sourceName; - - @SuppressWarnings("java:S1104") - public long lastEpochMicrosec; - - @SuppressWarnings("java:S1104") - public long startEpochMicrosec; - - @SuppressWarnings("java:S1104") - public String timeZoneOffset; - - @SuppressWarnings("java:S1104") - public String changeIdentifier; - - /** - * Gets data from the event name. Defined as: - * {DomainAbbreviation}_{productName}-{vendorName}_{Description}, - * example: Noti_RnNode-Ericsson_FileReady - * - */ - @SuppressWarnings("java:S6035") - public String productName() { - String[] eventArray = eventName.split("_|-"); - if (eventArray.length >= 2) { - return eventArray[1]; - } else { - return eventName; - } - } - - @SuppressWarnings("java:S6035") - public String vendorName() { - String[] eventArray = eventName.split("_|-"); - if (eventArray.length >= 3) { - return eventArray[2]; - } else { - return eventName; - } - } - } - - @Builder - public static class FileInfo { - @SuppressWarnings("java:S1104") - public String fileFormatType; - - @SuppressWarnings("java:S1104") - public String location; - - @SuppressWarnings("java:S1104") - public String fileFormatVersion; - - @SuppressWarnings("java:S1104") - public String compression; - } - - @Builder - public static class ArrayOfNamedHashMap { - @SuppressWarnings("java:S1104") - public String name; - - @SuppressWarnings("java:S1104") - public FileInfo hashMap; - } - - @Builder - public static class NotificationFields { - @SuppressWarnings("java:S1104") - public String notificationFieldsVersion; - - @SuppressWarnings("java:S1104") - public String changeType; - - @SuppressWarnings("java:S1104") - public String changeIdentifier; - - @SuppressWarnings("java:S1104") - public List arrayOfNamedHashMap; - } - - @Builder - public static class Event { - @SuppressWarnings("java:S1104") - public MessageMetaData commonEventHeader; - - @SuppressWarnings("java:S1104") - public NotificationFields notificationFields; - } - - @SuppressWarnings("java:S1104") - public Event event; - +public interface FileReadyMessage { } diff --git a/datafilecollector/src/main/java/org/oran/datafile/model/TS28532FileReadyMessage.java b/datafilecollector/src/main/java/org/oran/datafile/model/TS28532FileReadyMessage.java new file mode 100644 index 0000000..ccea35f --- /dev/null +++ b/datafilecollector/src/main/java/org/oran/datafile/model/TS28532FileReadyMessage.java @@ -0,0 +1,213 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2025 OpenInfra Foundation Europe. 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.oran.datafile.model; + +import java.util.List; + +import lombok.Builder; + +@Builder +public class TS28532FileReadyMessage implements FileReadyMessage { + + @Builder + public static class InternalHeaderFields { + @SuppressWarnings("java:S1104") + public String collectorTimeStamp; + } + + /** + * Meta data about a fileReady message. + */ + @Builder + public static class MessageMetaData { + + @SuppressWarnings("java:S1104") + public String sourceId; + + @SuppressWarnings("java:S1104") + public String eventId; + + @SuppressWarnings("java:S1104") + public String priority; + + @SuppressWarnings("java:S1104") + public String version; + + @SuppressWarnings("java:S1104") + public String reportingEntityName; + + @SuppressWarnings("java:S1104") + public int sequence; + + @SuppressWarnings("java:S1104") + public String domain; + + @SuppressWarnings("java:S1104") + public String eventName; + + @SuppressWarnings("java:S1104") + public String eventType; + + @SuppressWarnings("java:S1104") + public String stndDefinedNamespace; + + @SuppressWarnings("java:S1104") + public String nfVendorName; + + @SuppressWarnings("java:S1104") + public String nfNamingCode; + + @SuppressWarnings("java:S1104") + public String vesEventListenerVersion; + + @SuppressWarnings("java:S1104") + public String sourceName; + + @SuppressWarnings("java:S1104") + public long lastEpochMicrosec; + + @SuppressWarnings("java:S1104") + public long startEpochMicrosec; + + @SuppressWarnings("java:S1104") + public String timeZoneOffset; + + @SuppressWarnings("java:S1104") + public String reportingEntityId; + + @SuppressWarnings("java:S1104") + public InternalHeaderFields internalHeaderFields; + + /** + * Gets data from the event name. Defined as: + * {DomainAbbreviation}_{productName}-{vendorName}_{Description}, + * example: Noti_RnNode-Ericsson_FileReady + */ + @SuppressWarnings("java:S6035") + public String productName() { + String[] eventArray = eventName.split("_|-"); + if (eventArray.length >= 2) { + return eventArray[1]; + } else { + return eventName; + } + } + + @SuppressWarnings("java:S6035") + public String vendorName() { + String[] eventArray = eventName.split("_|-"); + if (eventArray.length >= 3) { + return eventArray[2]; + } else { + return eventName; + } + } + } + + @Builder + public static class FileInfo { + @SuppressWarnings("java:S1104") + public int fileSize; + + @SuppressWarnings("java:S1104") + public String fileLocation; + + @SuppressWarnings("java:S1104") + public String fileReadyTime; + + @SuppressWarnings("java:S1104") + public String fileFormat; + + @SuppressWarnings("java:S1104") + public String fileDataType; + + @SuppressWarnings("java:S1104") + public String fileExpirationTime; + + @SuppressWarnings("java:S1104") + public String fileCompression; + + @SuppressWarnings("java:S6035") + public String fileName() { + String[] fileArray = fileLocation.split("/"); + if (fileArray.length >= 5) { + return fileArray[4]; + } else { + return fileLocation; + } + } + + @SuppressWarnings("java:S6035") + public String filePath() { + String fileP = fileLocation.substring(0, fileLocation.lastIndexOf('/')) + "/"; + return fileP; + } + } + + @Builder + public static class DataFields { + @SuppressWarnings("java:S1104") + public String systemDN; + + @SuppressWarnings("java:S1104") + public String additionalText; + + @SuppressWarnings("java:S1104") + public String eventTime; + + @SuppressWarnings("java:S1104") + public int notificationId; + + @SuppressWarnings("java:S1104") + public String href; + + @SuppressWarnings("java:S1104") + public String notificationType; + + @SuppressWarnings("java:S1104") + public List fileInfoList; + } + + @Builder + public static class StandardDefinedFields { + @SuppressWarnings("java:S1104") + public String stndDefinedFieldsVersion; + + @SuppressWarnings("java:S1104") + public String schemaReference; + + @SuppressWarnings("java:S1104") + public DataFields data; + } + + @Builder + public static class Event { + @SuppressWarnings("java:S1104") + public MessageMetaData commonEventHeader; + + @SuppressWarnings("java:S1104") + public StandardDefinedFields stndDefinedFields; + } + + @SuppressWarnings("java:S1104") + public Event event; + +} diff --git a/datafilecollector/src/main/java/org/oran/datafile/tasks/CollectAndReportFiles.java b/datafilecollector/src/main/java/org/oran/datafile/tasks/CollectAndReportFiles.java index 9ea9d57..ef96b9a 100644 --- a/datafilecollector/src/main/java/org/oran/datafile/tasks/CollectAndReportFiles.java +++ b/datafilecollector/src/main/java/org/oran/datafile/tasks/CollectAndReportFiles.java @@ -1,5 +1,6 @@ /*- * ============LICENSE_START====================================================================== + * Copyright (C) 2023-2025 OpenInfra Foundation Europe. All rights reserved. * Copyright (C) 2018, 2020 NOKIA Intellectual Property, 2018-2023 Nordix Foundation. All rights reserved. * =============================================================================================== * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except @@ -39,9 +40,11 @@ import org.oran.datafile.datastore.DataStore.Bucket; import org.oran.datafile.exceptions.DatafileTaskException; import org.oran.datafile.http.HttpsClientConnectionManagerUtil; import org.oran.datafile.model.Counters; +import org.oran.datafile.model.DefaultFileReadyMessage; import org.oran.datafile.model.FileData; import org.oran.datafile.model.FilePublishInformation; import org.oran.datafile.model.FileReadyMessage; +import org.oran.datafile.model.TS28532FileReadyMessage; import org.oran.datafile.oauth2.SecurityContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -142,7 +145,7 @@ public class CollectAndReportFiles { .parallel(noOfWorkerThreads) // Each FileReadyMessage in a separate thread .runOn(scheduler) // .doOnNext(fileReadyMessage -> counters.threadPoolQueueSize.decrementAndGet()) // - .flatMap(fileReadyMessage -> Flux.fromIterable(FileData.createFileData(fileReadyMessage)), true, 1) // + .flatMap(fileReadyMessage -> Flux.fromIterable(FileData.createFileData(fileReadyMessage, appConfig.getFileReadyMessageClass())), true, 1) // .flatMap(this::filterNotFetched, false, 1, 1) // .flatMap(this::fetchFile, false, 1, 1) // .flatMap(data -> reportFetchedFile(data, appConfig.getCollectedFileTopic()), false, 1) // @@ -282,9 +285,15 @@ public class CollectAndReportFiles { Mono parseReceivedFileReadyMessage(KafkaTopicListener.DataFromTopic data) { try { - FileReadyMessage msg = gson.fromJson(data.value, FileReadyMessage.class); - logger.debug("Received: {}", msg); - return Mono.just(msg); + if(appConfig.getFileReadyMessageClass() == null || appConfig.getFileReadyMessageClass().isEmpty()) { + DefaultFileReadyMessage msg = gson.fromJson(data.value, DefaultFileReadyMessage.class); + logger.debug("Received: {}", msg); + return Mono.just(msg); + } else { + TS28532FileReadyMessage msg = gson.fromJson(data.value, TS28532FileReadyMessage.class); + logger.debug("Received: {}", msg); + return Mono.just(msg); + } } catch (Exception e) { logger.warn("Could not parse received: {}, reason: {}", data.value, e.getMessage()); return Mono.empty(); diff --git a/datafilecollector/src/main/java/org/oran/datafile/tasks/FileCollector.java b/datafilecollector/src/main/java/org/oran/datafile/tasks/FileCollector.java index 999d2e8..b933625 100644 --- a/datafilecollector/src/main/java/org/oran/datafile/tasks/FileCollector.java +++ b/datafilecollector/src/main/java/org/oran/datafile/tasks/FileCollector.java @@ -1,5 +1,6 @@ /*- * ============LICENSE_START====================================================================== + * Copyright (C) 2023-2025 OpenInfra Foundation Europe. All rights reserved. * Copyright (C) 2018-2023 Nordix Foundation. All rights reserved. * Copyright (C) 2020-2022 Nokia. All rights reserved. * =============================================================================================== @@ -35,9 +36,10 @@ import org.oran.datafile.http.DfcHttpClient; import org.oran.datafile.http.DfcHttpsClient; import org.oran.datafile.http.HttpsClientConnectionManagerUtil; import org.oran.datafile.model.Counters; +import org.oran.datafile.model.DefaultFileReadyMessage; import org.oran.datafile.model.FileData; import org.oran.datafile.model.FilePublishInformation; -import org.oran.datafile.model.FileReadyMessage; +import org.oran.datafile.model.TS28532FileReadyMessage; import org.oran.datafile.oauth2.SecurityContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -72,7 +74,6 @@ public class FileCollector { * @param fileData data about the file to collect. * @param numRetries the number of retries if the publishing fails * @param firstBackoff the time to delay the first retry - * @param contextMap context for logging. * @return the data needed to publish the file. */ public Mono collectFile(FileData fileData, long numRetries, Duration firstBackoff) { @@ -96,7 +97,13 @@ public class FileCollector { } private Mono> tryCollectFile(FileData fileData) { - logger.trace("starting to collectFile {}", fileData.fileInfo.name); + String fileName; + if(appConfig.getFileReadyMessageClass() == null || appConfig.getFileReadyMessageClass().isEmpty()) { + fileName = fileData.defaultFileInfo.name; + } else { + fileName = fileData.ts28532FileInfo.fileName(); + } + logger.trace("starting to collectFile {}", fileName); final String remoteFile = fileData.remoteFilePath(); final Path localFile = fileData.getLocalFilePath(this.appConfig); @@ -109,16 +116,16 @@ public class FileCollector { return Mono.just(Optional.of(createFilePublishInformation(fileData))); } catch (NonRetryableDatafileTaskException nre) { logger.warn("Failed to download file, not retryable: {} {}, reason: {}", fileData.sourceName(), - fileData.fileInfo.name, nre.getMessage()); + fileName, nre.getMessage()); incFailedAttemptsCounter(fileData); return Mono.just(Optional.empty()); // Give up } catch (DatafileTaskException e) { - logger.warn("Failed to download file: {} {}, reason: {}", fileData.sourceName(), fileData.fileInfo.name, + logger.warn("Failed to download file: {} {}, reason: {}", fileData.sourceName(), fileName, e.getMessage()); incFailedAttemptsCounter(fileData); return Mono.error(e); } catch (Exception throwable) { - logger.warn("Failed to close client: {} {}, reason: {}", fileData.sourceName(), fileData.fileInfo.name, + logger.warn("Failed to close client: {} {}, reason: {}", fileData.sourceName(), fileName, throwable.getMessage(), throwable); return Mono.just(Optional.of(createFilePublishInformation(fileData))); } @@ -148,21 +155,39 @@ public class FileCollector { } public FilePublishInformation createFilePublishInformation(FileData fileData) { - FileReadyMessage.MessageMetaData metaData = fileData.messageMetaData; - return FilePublishInformation.builder() // - .productName(metaData.productName()) // - .vendorName(metaData.vendorName()) // - .lastEpochMicrosec(metaData.lastEpochMicrosec) // - .sourceName(metaData.sourceName) // - .startEpochMicrosec(metaData.startEpochMicrosec) // - .timeZoneOffset(metaData.timeZoneOffset) // - .name(metaData.sourceName + "/" + fileData.fileInfo.name) // - .compression(fileData.fileInfo.hashMap.compression) // - .fileFormatType(fileData.fileInfo.hashMap.fileFormatType) // - .fileFormatVersion(fileData.fileInfo.hashMap.fileFormatVersion) // - .changeIdentifier(fileData.messageMetaData.changeIdentifier) // - .objectStoreBucket(this.appConfig.isS3Enabled() ? this.appConfig.getS3Bucket() : null) // - .build(); + if(appConfig.getFileReadyMessageClass() == null || appConfig.getFileReadyMessageClass().isEmpty()) { + DefaultFileReadyMessage.MessageMetaData metaData = fileData.messageMetaData; + return FilePublishInformation.builder() // + .productName(metaData.productName()) // + .vendorName(metaData.vendorName()) // + .lastEpochMicrosec(metaData.lastEpochMicrosec) // + .sourceName(metaData.sourceName) // + .startEpochMicrosec(metaData.startEpochMicrosec) // + .timeZoneOffset(metaData.timeZoneOffset) // + .name(metaData.sourceName + "/" + fileData.defaultFileInfo.name) // + .compression(fileData.defaultFileInfo.hashMap.compression) // + .fileFormatType(fileData.defaultFileInfo.hashMap.fileFormatType) // + .fileFormatVersion(fileData.defaultFileInfo.hashMap.fileFormatVersion) // + .changeIdentifier(fileData.messageMetaData.changeIdentifier) // + .objectStoreBucket(this.appConfig.isS3Enabled() ? this.appConfig.getS3Bucket() : null) // + .build(); + } else { + TS28532FileReadyMessage.MessageMetaData metaData = fileData.ts28532MessageMetaData; + return FilePublishInformation.builder() // + .productName(metaData.productName()) // + .vendorName(metaData.vendorName()) // + .lastEpochMicrosec(metaData.lastEpochMicrosec) // + .sourceName(metaData.sourceName) // + .startEpochMicrosec(metaData.startEpochMicrosec) // + .timeZoneOffset(metaData.timeZoneOffset) // + .name(metaData.sourceName + "/" + fileData.ts28532FileInfo.fileName()) // + .compression(fileData.ts28532FileInfo.fileCompression) // + .fileFormatType(fileData.ts28532FileInfo.fileFormat) // + .fileFormatVersion(fileData.ts28532FileInfo.fileDataType) // + .changeIdentifier(fileData.ts28532MessageMetaData.reportingEntityName) // + .objectStoreBucket(this.appConfig.isS3Enabled() ? this.appConfig.getS3Bucket() : null) // + .build(); + } } protected SftpClient createSftpClient(FileData fileData) { diff --git a/datafilecollector/src/test/java/org/oran/datafile/Integration.java b/datafilecollector/src/test/java/org/oran/datafile/Integration.java index c8ef111..879e3dd 100644 --- a/datafilecollector/src/test/java/org/oran/datafile/Integration.java +++ b/datafilecollector/src/test/java/org/oran/datafile/Integration.java @@ -2,7 +2,8 @@ * ========================LICENSE_START================================= * O-RAN-SC * %% - * Copyright (C) 2020-2023 NordixFoundation + * Copyright (C) 2020-2023 Nordix Foundation + * Copyright (C) 2025 OpenInfra Foundation Europe. 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. @@ -44,10 +45,10 @@ import org.oran.datafile.configuration.AppConfig; import org.oran.datafile.datastore.DataStore; import org.oran.datafile.datastore.DataStore.Bucket; import org.oran.datafile.model.Counters; +import org.oran.datafile.model.DefaultFileReadyMessage; import org.oran.datafile.model.FileData; import org.oran.datafile.model.FilePublishInformation; -import org.oran.datafile.model.FileReadyMessage; -import org.oran.datafile.model.FileReadyMessage.MessageMetaData; +import org.oran.datafile.model.DefaultFileReadyMessage.MessageMetaData; import org.oran.datafile.oauth2.SecurityContext; import org.oran.datafile.tasks.CollectAndReportFiles; import org.oran.datafile.tasks.FileCollector; @@ -297,7 +298,7 @@ class Integration { } } - FileReadyMessage.Event event(String fileName) { + DefaultFileReadyMessage.Event event(String fileName) { MessageMetaData messageMetaData = MessageMetaData.builder() // .lastEpochMicrosec(LAST_EPOCH_MICROSEC) // .sourceName(SOURCE_NAME) // @@ -306,7 +307,7 @@ class Integration { .changeIdentifier(CHANGE_IDENTIFIER) // .eventName("Noti_RnNode-Ericsson_FileReady").build(); - FileReadyMessage.FileInfo fileInfo = FileReadyMessage.FileInfo // + DefaultFileReadyMessage.FileInfo fileInfo = DefaultFileReadyMessage.FileInfo // .builder() // .fileFormatType(FILE_FORMAT_TYPE) // .location(LOCATION) // @@ -314,34 +315,34 @@ class Integration { .compression(GZIP_COMPRESSION) // .build(); - FileReadyMessage.ArrayOfNamedHashMap arrayOfNamedHashMap = FileReadyMessage.ArrayOfNamedHashMap // + DefaultFileReadyMessage.ArrayOfNamedHashMap arrayOfNamedHashMap = DefaultFileReadyMessage.ArrayOfNamedHashMap // .builder() // .name(fileName) // .hashMap(fileInfo) // .build(); - List arrayOfNamedHashMapList = new ArrayList<>(); + List arrayOfNamedHashMapList = new ArrayList<>(); arrayOfNamedHashMapList.add(arrayOfNamedHashMap); - FileReadyMessage.NotificationFields notificationFields = FileReadyMessage.NotificationFields // + DefaultFileReadyMessage.NotificationFields notificationFields = DefaultFileReadyMessage.NotificationFields // .builder().notificationFieldsVersion("notificationFieldsVersion") // .changeType(CHANGE_TYPE).changeIdentifier(CHANGE_IDENTIFIER) // .arrayOfNamedHashMap(arrayOfNamedHashMapList) // .build(); - return FileReadyMessage.Event.builder() // + return DefaultFileReadyMessage.Event.builder() // .commonEventHeader(messageMetaData) // .notificationFields(notificationFields).build(); } - private FileReadyMessage fileReadyMessage(String fileName) { - FileReadyMessage message = FileReadyMessage.builder() // + private DefaultFileReadyMessage fileReadyMessage(String fileName) { + DefaultFileReadyMessage message = DefaultFileReadyMessage.builder() // .event(event(fileName)) // .build(); return message; } - private FileReadyMessage fileReadyMessage() { + private DefaultFileReadyMessage fileReadyMessage() { return fileReadyMessage(PM_FILE_NAME); } diff --git a/datafilecollector/src/test/java/org/oran/datafile/model/FileReadyMessageTest.java b/datafilecollector/src/test/java/org/oran/datafile/model/DefaultFileReadyMessageTest.java similarity index 60% rename from datafilecollector/src/test/java/org/oran/datafile/model/FileReadyMessageTest.java rename to datafilecollector/src/test/java/org/oran/datafile/model/DefaultFileReadyMessageTest.java index 29a7236..e2cf148 100644 --- a/datafilecollector/src/test/java/org/oran/datafile/model/FileReadyMessageTest.java +++ b/datafilecollector/src/test/java/org/oran/datafile/model/DefaultFileReadyMessageTest.java @@ -1,6 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2019-2023 Nordix Foundation. + * Copyright (C) 2023-2025 OpenInfra Foundation Europe. 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. @@ -24,20 +25,22 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import org.junit.jupiter.api.Test; -class FileReadyMessageTest { +class DefaultFileReadyMessageTest { @Test void testMessageMetaDataProductName() { assertEquals("Event Name", - (new FileReadyMessage.MessageMetaData("42", "Priority", "1.0.2", "Reporting Entity Name", - 1, "Domain", "Event Name", "1.0.2", "Source Name", 1L, 1L, "UTC", "42")).productName()); - assertEquals("|", (new FileReadyMessage.MessageMetaData("42", "Priority", "1.0.2", "Reporting Entity Name", 1, - "Domain", "_|-", "1.0.2", "Source Name", 1L, 1L, "UTC", "42")).productName()); + (new DefaultFileReadyMessage.MessageMetaData("42", "Priority", "1.0.2", "Reporting Entity Name", 1, + "Domain", "Event Name", "1.0.2", "Source Name", 1L, 1L, "UTC", "42")).productName()); + assertEquals("|", + (new DefaultFileReadyMessage.MessageMetaData("42", "Priority", "1.0.2", "Reporting Entity Name", 1, + "Domain", "_|-", "1.0.2", "Source Name", 1L, 1L, "UTC", "42")).productName()); } + @Test void testMessageMetaDataVendorName() { assertEquals("Event Name", - (new FileReadyMessage.MessageMetaData("42", "Priority", "1.0.2", "Reporting Entity Name", 1, "Domain", - "Event Name", "1.0.2", "Source Name", 1L, 1L, "UTC", "42")).vendorName()); + (new DefaultFileReadyMessage.MessageMetaData("42", "Priority", "1.0.2", "Reporting Entity Name", 1, + "Domain", "Event Name", "1.0.2", "Source Name", 1L, 1L, "UTC", "42")).vendorName()); } } diff --git a/datafilecollector/src/test/java/org/oran/datafile/model/FileDataTest.java b/datafilecollector/src/test/java/org/oran/datafile/model/FileDataTest.java index f52cfcc..7da9438 100644 --- a/datafilecollector/src/test/java/org/oran/datafile/model/FileDataTest.java +++ b/datafilecollector/src/test/java/org/oran/datafile/model/FileDataTest.java @@ -1,6 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2019-2023 Nordix Foundation. + * Copyright (C) 2023-2025 OpenInfra Foundation Europe. 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. @@ -52,10 +53,9 @@ class FileDataTest { @Test void testSourceName() { - FileReadyMessage.MessageMetaData metaData = new FileReadyMessage.MessageMetaData( - "sourceName", "otherField1", "otherField2", "otherField3", 42, "field5", "field6", - "field7", "field8", 123456789L, 987654321L, "field11", "field12" - ); + DefaultFileReadyMessage.MessageMetaData metaData = new DefaultFileReadyMessage.MessageMetaData("sourceName", + "otherField1", "otherField2", "otherField3", 42, "field5", "field6", "field7", "field8", 123456789L, + 987654321L, "field11", "field12"); FileData fileData = FileData.builder().messageMetaData(metaData).build(); assertEquals("field8", fileData.sourceName()); @@ -63,45 +63,48 @@ class FileDataTest { @Test void testName() { - FileReadyMessage.MessageMetaData metaData = new FileReadyMessage.MessageMetaData( - "sourceName", "otherField1", "otherField2", "otherField3", 42, "field5", "field6", - "field7", "field8", 123456789L, 987654321L, "field11", "field12" - ); + DefaultFileReadyMessage.MessageMetaData metaData = new DefaultFileReadyMessage.MessageMetaData("sourceName", + "otherField1", "otherField2", "otherField3", 42, "field5", "field6", "field7", "field8", 123456789L, + 987654321L, "field11", "field12"); FileData fileData = FileData.builder().messageMetaData(metaData).build(); - FileReadyMessage.FileInfo fileInfo = new FileReadyMessage.FileInfo("name", "location", "hashMapField", ""); - FileReadyMessage.ArrayOfNamedHashMap arrayOfNamedHashMap = new FileReadyMessage.ArrayOfNamedHashMap("someString", fileInfo); - fileData.fileInfo = arrayOfNamedHashMap; + DefaultFileReadyMessage.FileInfo fileInfo = new DefaultFileReadyMessage.FileInfo("name", "location", "hashMapField", + ""); + DefaultFileReadyMessage.ArrayOfNamedHashMap arrayOfNamedHashMap = new DefaultFileReadyMessage.ArrayOfNamedHashMap( + "someString", fileInfo); + fileData.defaultFileInfo = arrayOfNamedHashMap; assertEquals("field8/someString", fileData.name()); } @Test void testRemoteFilePath() { - FileReadyMessage.MessageMetaData metaData = new FileReadyMessage.MessageMetaData( - "sourceName", "otherField1", "otherField2", "otherField3", 42, "field5", "field6", - "field7", "field8", 123456789L, 987654321L, "field11", "field12" - ); + DefaultFileReadyMessage.MessageMetaData metaData = new DefaultFileReadyMessage.MessageMetaData("sourceName", + "otherField1", "otherField2", "otherField3", 42, "field5", "field6", "field7", "field8", 123456789L, + 987654321L, "field11", "field12"); FileData fileData = FileData.builder().messageMetaData(metaData).build(); - FileReadyMessage.FileInfo fileInfo = new FileReadyMessage.FileInfo("name", "ftp://example.com/remote/file.txt", "hashMapField", ""); - FileReadyMessage.ArrayOfNamedHashMap arrayOfNamedHashMap = new FileReadyMessage.ArrayOfNamedHashMap("someString", fileInfo); - fileData.fileInfo = arrayOfNamedHashMap; + DefaultFileReadyMessage.FileInfo fileInfo = new DefaultFileReadyMessage.FileInfo("name", + "ftp://example.com/remote/file.txt", "hashMapField", ""); + DefaultFileReadyMessage.ArrayOfNamedHashMap arrayOfNamedHashMap = new DefaultFileReadyMessage.ArrayOfNamedHashMap( + "someString", fileInfo); + fileData.defaultFileInfo = arrayOfNamedHashMap; assertEquals("/remote/file.txt", fileData.remoteFilePath()); } @Test void testScheme() { - FileReadyMessage.MessageMetaData metaData = new FileReadyMessage.MessageMetaData( - "sourceName", "otherField1", "otherField2", "otherField3", 42, "field5", "field6", - "field7", "field8", 123456789L, 987654321L, "field11", "field12" - ); + DefaultFileReadyMessage.MessageMetaData metaData = new DefaultFileReadyMessage.MessageMetaData("sourceName", + "otherField1", "otherField2", "otherField3", 42, "field5", "field6", "field7", "field8", 123456789L, + 987654321L, "field11", "field12"); FileData fileData = FileData.builder().messageMetaData(metaData).build(); - FileReadyMessage.FileInfo fileInfo = new FileReadyMessage.FileInfo("name", "http://example.com/file.txt", "hashMapField", ""); - FileReadyMessage.ArrayOfNamedHashMap arrayOfNamedHashMap = new FileReadyMessage.ArrayOfNamedHashMap("someString", fileInfo); - fileData.fileInfo = arrayOfNamedHashMap; + DefaultFileReadyMessage.FileInfo fileInfo = new DefaultFileReadyMessage.FileInfo("name", + "http://example.com/file.txt", "hashMapField", ""); + DefaultFileReadyMessage.ArrayOfNamedHashMap arrayOfNamedHashMap = new DefaultFileReadyMessage.ArrayOfNamedHashMap( + "someString", fileInfo); + fileData.defaultFileInfo = arrayOfNamedHashMap; assertEquals(FileData.Scheme.HTTP, fileData.scheme()); } @@ -110,15 +113,16 @@ class FileDataTest { void testGetLocalFilePath() { AppConfig config = new AppConfig(); config.setCollectedFilesPath("/local/path"); - FileReadyMessage.MessageMetaData metaData = new FileReadyMessage.MessageMetaData( - "sourceName", "otherField1", "otherField2", "otherField3", 42, "field5", "field6", - "field7", "field8", 123456789L, 987654321L, "field11", "field12" - ); + DefaultFileReadyMessage.MessageMetaData metaData = new DefaultFileReadyMessage.MessageMetaData("sourceName", + "otherField1", "otherField2", "otherField3", 42, "field5", "field6", "field7", "field8", 123456789L, + 987654321L, "field11", "field12"); FileData fileData = FileData.builder().messageMetaData(metaData).build(); - FileReadyMessage.FileInfo fileInfo = new FileReadyMessage.FileInfo("name", "http://example.com/file.txt", "hashMapField", ""); - FileReadyMessage.ArrayOfNamedHashMap arrayOfNamedHashMap = new FileReadyMessage.ArrayOfNamedHashMap("someString", fileInfo); - fileData.fileInfo = arrayOfNamedHashMap; + DefaultFileReadyMessage.FileInfo fileInfo = new DefaultFileReadyMessage.FileInfo("name", + "http://example.com/file.txt", "hashMapField", ""); + DefaultFileReadyMessage.ArrayOfNamedHashMap arrayOfNamedHashMap = new DefaultFileReadyMessage.ArrayOfNamedHashMap( + "someString", fileInfo); + fileData.defaultFileInfo = arrayOfNamedHashMap; Path expectedPath = Paths.get("/local/path/field8/someString"); Path actualPath = fileData.getLocalFilePath(config); @@ -130,15 +134,16 @@ class FileDataTest { // Arrange AppConfig config = new AppConfig(); config.setCollectedFilesPath("/local/path"); - FileReadyMessage.MessageMetaData metaData = new FileReadyMessage.MessageMetaData( - "sourceName", "otherField1", "otherField2", "otherField3", 42, "field5", "field6", - "field7", "field8", 123456789L, 987654321L, "field11", "field12" - ); + DefaultFileReadyMessage.MessageMetaData metaData = new DefaultFileReadyMessage.MessageMetaData("sourceName", + "otherField1", "otherField2", "otherField3", 42, "field5", "field6", "field7", "field8", 123456789L, + 987654321L, "field11", "field12"); FileData fileData = FileData.builder().messageMetaData(metaData).build(); - FileReadyMessage.FileInfo fileInfo = new FileReadyMessage.FileInfo("name", "http://username:password@example.com:8080/path?query1=value1&query2=value2", "hashMapField", ""); - FileReadyMessage.ArrayOfNamedHashMap arrayOfNamedHashMap = new FileReadyMessage.ArrayOfNamedHashMap("someString", fileInfo); - fileData.fileInfo = arrayOfNamedHashMap; + DefaultFileReadyMessage.FileInfo fileInfo = new DefaultFileReadyMessage.FileInfo("name", + "http://username:password@example.com:8080/path?query1=value1&query2=value2", "hashMapField", ""); + DefaultFileReadyMessage.ArrayOfNamedHashMap arrayOfNamedHashMap = new DefaultFileReadyMessage.ArrayOfNamedHashMap( + "someString", fileInfo); + fileData.defaultFileInfo = arrayOfNamedHashMap; // Act FileServerData result = fileData.fileServerData(); @@ -153,15 +158,16 @@ class FileDataTest { // Arrange AppConfig config = new AppConfig(); config.setCollectedFilesPath("/local/path"); - FileReadyMessage.MessageMetaData metaData = new FileReadyMessage.MessageMetaData( - "sourceName", "otherField1", "otherField2", "otherField3", 42, "field5", "field6", - "field7", "field8", 123456789L, 987654321L, "field11", "field12" - ); + DefaultFileReadyMessage.MessageMetaData metaData = new DefaultFileReadyMessage.MessageMetaData("sourceName", + "otherField1", "otherField2", "otherField3", 42, "field5", "field6", "field7", "field8", 123456789L, + 987654321L, "field11", "field12"); FileData fileData = FileData.builder().messageMetaData(metaData).build(); - FileReadyMessage.FileInfo fileInfo = new FileReadyMessage.FileInfo("name", "http://username@example.com:8080/path?query1=value1&query2=value2#rawFragment", "hashMapField", ""); - FileReadyMessage.ArrayOfNamedHashMap arrayOfNamedHashMap = new FileReadyMessage.ArrayOfNamedHashMap("someString", fileInfo); - fileData.fileInfo = arrayOfNamedHashMap; + DefaultFileReadyMessage.FileInfo fileInfo = new DefaultFileReadyMessage.FileInfo("name", + "http://username@example.com:8080/path?query1=value1&query2=value2#rawFragment", "hashMapField", ""); + DefaultFileReadyMessage.ArrayOfNamedHashMap arrayOfNamedHashMap = new DefaultFileReadyMessage.ArrayOfNamedHashMap( + "someString", fileInfo); + fileData.defaultFileInfo = arrayOfNamedHashMap; // Act FileServerData result = fileData.fileServerData(); @@ -175,15 +181,16 @@ class FileDataTest { // Arrange AppConfig config = new AppConfig(); config.setCollectedFilesPath("/local/path"); - FileReadyMessage.MessageMetaData metaData = new FileReadyMessage.MessageMetaData( - "sourceName", "otherField1", "otherField2", "otherField3", 42, "field5", "field6", - "field7", "field8", 123456789L, 987654321L, "field11", "field12" - ); + DefaultFileReadyMessage.MessageMetaData metaData = new DefaultFileReadyMessage.MessageMetaData("sourceName", + "otherField1", "otherField2", "otherField3", 42, "field5", "field6", "field7", "field8", 123456789L, + 987654321L, "field11", "field12"); FileData fileData = FileData.builder().messageMetaData(metaData).build(); - FileReadyMessage.FileInfo fileInfo = new FileReadyMessage.FileInfo("name", "http://example.com:8080/path?query1=value1&query2=value2", "hashMapField", ""); - FileReadyMessage.ArrayOfNamedHashMap arrayOfNamedHashMap = new FileReadyMessage.ArrayOfNamedHashMap("someString", fileInfo); - fileData.fileInfo = arrayOfNamedHashMap; + DefaultFileReadyMessage.FileInfo fileInfo = new DefaultFileReadyMessage.FileInfo("name", + "http://example.com:8080/path?query1=value1&query2=value2", "hashMapField", ""); + DefaultFileReadyMessage.ArrayOfNamedHashMap arrayOfNamedHashMap = new DefaultFileReadyMessage.ArrayOfNamedHashMap( + "someString", fileInfo); + fileData.defaultFileInfo = arrayOfNamedHashMap; FileServerData result = fileData.fileServerData(); assertEquals("example.com", result.getServerAddress()); @@ -194,15 +201,16 @@ class FileDataTest { // Arrange AppConfig config = new AppConfig(); config.setCollectedFilesPath("/local/path"); - FileReadyMessage.MessageMetaData metaData = new FileReadyMessage.MessageMetaData( - "sourceName", "otherField1", "otherField2", "otherField3", 42, "field5", "field6", - "field7", "field8", 123456789L, 987654321L, "field11", "field12" - ); + DefaultFileReadyMessage.MessageMetaData metaData = new DefaultFileReadyMessage.MessageMetaData("sourceName", + "otherField1", "otherField2", "otherField3", 42, "field5", "field6", "field7", "field8", 123456789L, + 987654321L, "field11", "field12"); FileData fileData = FileData.builder().messageMetaData(metaData).build(); - FileReadyMessage.FileInfo fileInfo = new FileReadyMessage.FileInfo("name", "abcxyz://example.com:8080/path?query1=value1&query2=value2", "hashMapField", ""); - FileReadyMessage.ArrayOfNamedHashMap arrayOfNamedHashMap = new FileReadyMessage.ArrayOfNamedHashMap("someString", fileInfo); - fileData.fileInfo = arrayOfNamedHashMap; + DefaultFileReadyMessage.FileInfo fileInfo = new DefaultFileReadyMessage.FileInfo("name", + "abcxyz://example.com:8080/path?query1=value1&query2=value2", "hashMapField", ""); + DefaultFileReadyMessage.ArrayOfNamedHashMap arrayOfNamedHashMap = new DefaultFileReadyMessage.ArrayOfNamedHashMap( + "someString", fileInfo); + fileData.defaultFileInfo = arrayOfNamedHashMap; // Act FileData.Scheme result = fileData.scheme(); @@ -210,45 +218,25 @@ class FileDataTest { } @Test - void testCreateFileData(){ - - FileReadyMessage.MessageMetaData metaData = new FileReadyMessage.MessageMetaData( - "sourceName", "otherField1", "otherField2", "otherField3", 42, "field5", "field6", - "field7", "field8", 123456789L, 987654321L, "field11", "field12" - ); - - FileReadyMessage fileReadyMessage = FileReadyMessage.builder() - .event( - FileReadyMessage.Event.builder() - .commonEventHeader(metaData) - .notificationFields( - FileReadyMessage.NotificationFields.builder() - .notificationFieldsVersion("1.0") - .changeType("Add") - .changeIdentifier("Change123") - .arrayOfNamedHashMap( - Collections.singletonList( - FileReadyMessage.ArrayOfNamedHashMap.builder() - .name("File1") - .hashMap( - FileReadyMessage.FileInfo.builder() - .fileFormatType("Text") - .location("ftp://example.com/files/file.txt") - .fileFormatVersion("1.0") - .compression("None") - .build() - ) - .build() - ) - ) - .build() - ) - .build() - ) - .build(); - - Iterable fileDataIterable = FileData.createFileData(fileReadyMessage); - FileReadyMessage.MessageMetaData messageMetaData = fileDataIterable.iterator().next().messageMetaData; + void testCreateFileData() { + + DefaultFileReadyMessage.MessageMetaData metaData = new DefaultFileReadyMessage.MessageMetaData("sourceName", + "otherField1", "otherField2", "otherField3", 42, "field5", "field6", "field7", "field8", 123456789L, + 987654321L, "field11", "field12"); + + DefaultFileReadyMessage defaultFileReadyMessage = DefaultFileReadyMessage.builder() + .event(DefaultFileReadyMessage.Event.builder().commonEventHeader(metaData).notificationFields( + DefaultFileReadyMessage.NotificationFields.builder().notificationFieldsVersion("1.0") + .changeType("Add").changeIdentifier("Change123").arrayOfNamedHashMap( + Collections.singletonList( + DefaultFileReadyMessage.ArrayOfNamedHashMap.builder().name("File1").hashMap( + DefaultFileReadyMessage.FileInfo.builder().fileFormatType("Text") + .location("ftp://example.com/files/file.txt") + .fileFormatVersion("1.0").compression("None").build()).build())) + .build()).build()).build(); + + Iterable fileDataIterable = FileData.createFileData(defaultFileReadyMessage, null); + DefaultFileReadyMessage.MessageMetaData messageMetaData = fileDataIterable.iterator().next().messageMetaData; assertEquals("field8", messageMetaData.sourceName); } diff --git a/datafilecollector/src/test/java/org/oran/datafile/tasks/FileCollectorTest.java b/datafilecollector/src/test/java/org/oran/datafile/tasks/FileCollectorTest.java index 432e045..9fdf062 100644 --- a/datafilecollector/src/test/java/org/oran/datafile/tasks/FileCollectorTest.java +++ b/datafilecollector/src/test/java/org/oran/datafile/tasks/FileCollectorTest.java @@ -1,5 +1,6 @@ /*- * ============LICENSE_START====================================================================== + * Copyright (C) 2023-2025 OpenInfra Foundation Europe. All rights reserved. * Copyright (C) 2018-2023 Nordix Foundation. All rights reserved. * Copyright (C) 2020-2022 Nokia. All rights reserved. * =============================================================================================== @@ -46,9 +47,9 @@ import org.oran.datafile.ftp.SftpClient; import org.oran.datafile.http.DfcHttpClient; import org.oran.datafile.http.DfcHttpsClient; import org.oran.datafile.model.Counters; +import org.oran.datafile.model.DefaultFileReadyMessage; import org.oran.datafile.model.FileData; import org.oran.datafile.model.FilePublishInformation; -import org.oran.datafile.model.FileReadyMessage; import org.oran.datafile.oauth2.SecurityContext; import reactor.test.StepVerifier; @@ -113,8 +114,8 @@ class FileCollectorTest { static final SecurityContext securityContext = new SecurityContext(""); - FileReadyMessage.Event event(String location) { - FileReadyMessage.MessageMetaData messageMetaData = FileReadyMessage.MessageMetaData.builder() // + DefaultFileReadyMessage.Event event(String location) { + DefaultFileReadyMessage.MessageMetaData messageMetaData = DefaultFileReadyMessage.MessageMetaData.builder() // .lastEpochMicrosec(LAST_EPOCH_MICROSEC) // .sourceName(SOURCE_NAME) // .startEpochMicrosec(START_EPOCH_MICROSEC) // @@ -122,7 +123,7 @@ class FileCollectorTest { .changeIdentifier(CHANGE_IDENTIFIER) // .eventName("Noti_NrRadio-Ericsson_FileReady").build(); - FileReadyMessage.FileInfo fileInfo = FileReadyMessage.FileInfo // + DefaultFileReadyMessage.FileInfo fileInfo = DefaultFileReadyMessage.FileInfo // .builder() // .fileFormatType(FILE_FORMAT_TYPE) // .location(location) // @@ -130,33 +131,33 @@ class FileCollectorTest { .compression(GZIP_COMPRESSION) // .build(); - FileReadyMessage.ArrayOfNamedHashMap arrayOfNamedHashMap = FileReadyMessage.ArrayOfNamedHashMap // + DefaultFileReadyMessage.ArrayOfNamedHashMap arrayOfNamedHashMap = DefaultFileReadyMessage.ArrayOfNamedHashMap // .builder().name(PM_FILE_NAME) // .hashMap(fileInfo).build(); - List arrayOfNamedHashMapList = new ArrayList<>(); + List arrayOfNamedHashMapList = new ArrayList<>(); arrayOfNamedHashMapList.add(arrayOfNamedHashMap); - FileReadyMessage.NotificationFields notificationFields = FileReadyMessage.NotificationFields // + DefaultFileReadyMessage.NotificationFields notificationFields = DefaultFileReadyMessage.NotificationFields // .builder().notificationFieldsVersion("notificationFieldsVersion") // .changeType(CHANGE_TYPE).changeIdentifier(CHANGE_IDENTIFIER) // .arrayOfNamedHashMap(arrayOfNamedHashMapList) // .build(); - return FileReadyMessage.Event.builder() // + return DefaultFileReadyMessage.Event.builder() // .commonEventHeader(messageMetaData) // .notificationFields(notificationFields).build(); } - private FileReadyMessage fileReadyMessage(String location) { - FileReadyMessage message = FileReadyMessage.builder() // + private DefaultFileReadyMessage fileReadyMessage(String location) { + DefaultFileReadyMessage message = DefaultFileReadyMessage.builder() // .event(event(location)) // .build(); return message; } private FileData createFileData(String location) { - return FileData.createFileData(fileReadyMessage(location)).iterator().next(); + return FileData.createFileData(fileReadyMessage(location), null).iterator().next(); } private FilePublishInformation createExpectedFilePublishInformation(String location) {