/*- * ============LICENSE_START======================================================= * Copyright (C) 2019-2023 Nordix Foundation. * ================================================================================ * 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 static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import java.nio.file.Path; import java.nio.file.Paths; import java.util.Collections; import org.junit.jupiter.api.Test; import org.oran.datafile.configuration.AppConfig; import org.oran.datafile.exceptions.DatafileTaskException; class FileDataTest { @Test void testSchemeGetSchemeFromString() throws DatafileTaskException { assertThrows(DatafileTaskException.class, () -> FileData.Scheme.getSchemeFromString("Scheme String")); assertEquals(FileData.Scheme.FTPES, FileData.Scheme.getSchemeFromString("FTPES")); assertEquals(FileData.Scheme.SFTP, FileData.Scheme.getSchemeFromString("SFTP")); assertEquals(FileData.Scheme.HTTP, FileData.Scheme.getSchemeFromString("HTTP")); assertEquals(FileData.Scheme.HTTPS, FileData.Scheme.getSchemeFromString("HTTPS")); } @Test void testSchemeIsFtpScheme() { assertTrue(FileData.Scheme.isFtpScheme(FileData.Scheme.FTPES)); assertTrue(FileData.Scheme.isFtpScheme(FileData.Scheme.SFTP)); assertFalse(FileData.Scheme.isFtpScheme(FileData.Scheme.HTTP)); assertFalse(FileData.Scheme.isFtpScheme(FileData.Scheme.HTTPS)); } @Test void testSourceName() { FileReadyMessage.MessageMetaData metaData = new FileReadyMessage.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()); } @Test void testName() { FileReadyMessage.MessageMetaData metaData = new FileReadyMessage.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; 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" ); 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; 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" ); 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; assertEquals(FileData.Scheme.HTTP, fileData.scheme()); } @Test 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" ); 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; Path expectedPath = Paths.get("/local/path/field8/someString"); Path actualPath = fileData.getLocalFilePath(config); assertEquals(expectedPath, actualPath); } @Test void testFileServerDataWithUserInfo() throws Exception { // 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" ); 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; // Act FileServerData result = fileData.fileServerData(); // Assert assertEquals("username", result.userId); assertEquals("password", result.password); } @Test void testFileServerDataWithFragment() throws Exception { // 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" ); 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; // Act FileServerData result = fileData.fileServerData(); // Assert assertEquals("rawFragment", result.uriRawFragment); } @Test void testFileServerDataWithoutUserInfo() throws Exception { // 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" ); 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; FileServerData result = fileData.fileServerData(); assertEquals("example.com", result.getServerAddress()); } @Test void testInvalidScheme() throws Exception { // 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" ); 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; // Act FileData.Scheme result = fileData.scheme(); assertEquals("FTPES", result.name()); } @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; assertEquals("field8", messageMetaData.sourceName); } }