Improve Test coverage of DFC
[nonrtric/plt/ranpm.git] / datafilecollector / src / test / java / org / oran / datafile / model / FileDataTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2019-2023 Nordix Foundation.
4  * ================================================================================
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  * SPDX-License-Identifier: Apache-2.0
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.oran.datafile.model;
22
23 import static org.junit.jupiter.api.Assertions.assertEquals;
24 import static org.junit.jupiter.api.Assertions.assertFalse;
25 import static org.junit.jupiter.api.Assertions.assertThrows;
26 import static org.junit.jupiter.api.Assertions.assertTrue;
27
28 import java.nio.file.Path;
29 import java.nio.file.Paths;
30 import java.util.Collections;
31 import org.junit.jupiter.api.Test;
32 import org.oran.datafile.configuration.AppConfig;
33 import org.oran.datafile.exceptions.DatafileTaskException;
34
35 class FileDataTest {
36     @Test
37     void testSchemeGetSchemeFromString() throws DatafileTaskException {
38         assertThrows(DatafileTaskException.class, () -> FileData.Scheme.getSchemeFromString("Scheme String"));
39         assertEquals(FileData.Scheme.FTPES, FileData.Scheme.getSchemeFromString("FTPES"));
40         assertEquals(FileData.Scheme.SFTP, FileData.Scheme.getSchemeFromString("SFTP"));
41         assertEquals(FileData.Scheme.HTTP, FileData.Scheme.getSchemeFromString("HTTP"));
42         assertEquals(FileData.Scheme.HTTPS, FileData.Scheme.getSchemeFromString("HTTPS"));
43     }
44
45     @Test
46     void testSchemeIsFtpScheme() {
47         assertTrue(FileData.Scheme.isFtpScheme(FileData.Scheme.FTPES));
48         assertTrue(FileData.Scheme.isFtpScheme(FileData.Scheme.SFTP));
49         assertFalse(FileData.Scheme.isFtpScheme(FileData.Scheme.HTTP));
50         assertFalse(FileData.Scheme.isFtpScheme(FileData.Scheme.HTTPS));
51     }
52
53     @Test
54     void testSourceName() {
55         FileReadyMessage.MessageMetaData metaData = new FileReadyMessage.MessageMetaData(
56             "sourceName", "otherField1", "otherField2", "otherField3", 42, "field5", "field6",
57             "field7", "field8", 123456789L, 987654321L, "field11", "field12"
58         );
59         FileData fileData = FileData.builder().messageMetaData(metaData).build();
60
61         assertEquals("field8", fileData.sourceName());
62     }
63
64     @Test
65     void testName() {
66         FileReadyMessage.MessageMetaData metaData = new FileReadyMessage.MessageMetaData(
67             "sourceName", "otherField1", "otherField2", "otherField3", 42, "field5", "field6",
68             "field7", "field8", 123456789L, 987654321L, "field11", "field12"
69         );
70         FileData fileData = FileData.builder().messageMetaData(metaData).build();
71
72         FileReadyMessage.FileInfo fileInfo = new FileReadyMessage.FileInfo("name", "location", "hashMapField", "");
73         FileReadyMessage.ArrayOfNamedHashMap arrayOfNamedHashMap = new FileReadyMessage.ArrayOfNamedHashMap("someString", fileInfo);
74         fileData.fileInfo = arrayOfNamedHashMap;
75
76         assertEquals("field8/someString", fileData.name());
77     }
78
79     @Test
80     void testRemoteFilePath() {
81         FileReadyMessage.MessageMetaData metaData = new FileReadyMessage.MessageMetaData(
82             "sourceName", "otherField1", "otherField2", "otherField3", 42, "field5", "field6",
83             "field7", "field8", 123456789L, 987654321L, "field11", "field12"
84         );
85         FileData fileData = FileData.builder().messageMetaData(metaData).build();
86
87         FileReadyMessage.FileInfo fileInfo = new FileReadyMessage.FileInfo("name", "ftp://example.com/remote/file.txt", "hashMapField", "");
88         FileReadyMessage.ArrayOfNamedHashMap arrayOfNamedHashMap = new FileReadyMessage.ArrayOfNamedHashMap("someString", fileInfo);
89         fileData.fileInfo = arrayOfNamedHashMap;
90
91         assertEquals("/remote/file.txt", fileData.remoteFilePath());
92     }
93
94     @Test
95     void testScheme() {
96         FileReadyMessage.MessageMetaData metaData = new FileReadyMessage.MessageMetaData(
97             "sourceName", "otherField1", "otherField2", "otherField3", 42, "field5", "field6",
98             "field7", "field8", 123456789L, 987654321L, "field11", "field12"
99         );
100         FileData fileData = FileData.builder().messageMetaData(metaData).build();
101
102         FileReadyMessage.FileInfo fileInfo = new FileReadyMessage.FileInfo("name", "http://example.com/file.txt", "hashMapField", "");
103         FileReadyMessage.ArrayOfNamedHashMap arrayOfNamedHashMap = new FileReadyMessage.ArrayOfNamedHashMap("someString", fileInfo);
104         fileData.fileInfo = arrayOfNamedHashMap;
105
106         assertEquals(FileData.Scheme.HTTP, fileData.scheme());
107     }
108
109     @Test
110     void testGetLocalFilePath() {
111         AppConfig config = new AppConfig();
112         config.setCollectedFilesPath("/local/path");
113         FileReadyMessage.MessageMetaData metaData = new FileReadyMessage.MessageMetaData(
114             "sourceName", "otherField1", "otherField2", "otherField3", 42, "field5", "field6",
115             "field7", "field8", 123456789L, 987654321L, "field11", "field12"
116         );
117         FileData fileData = FileData.builder().messageMetaData(metaData).build();
118
119         FileReadyMessage.FileInfo fileInfo = new FileReadyMessage.FileInfo("name", "http://example.com/file.txt", "hashMapField", "");
120         FileReadyMessage.ArrayOfNamedHashMap arrayOfNamedHashMap = new FileReadyMessage.ArrayOfNamedHashMap("someString", fileInfo);
121         fileData.fileInfo = arrayOfNamedHashMap;
122
123         Path expectedPath = Paths.get("/local/path/field8/someString");
124         Path actualPath = fileData.getLocalFilePath(config);
125         assertEquals(expectedPath, actualPath);
126     }
127
128     @Test
129     void testFileServerDataWithUserInfo() throws Exception {
130         // Arrange
131         AppConfig config = new AppConfig();
132         config.setCollectedFilesPath("/local/path");
133         FileReadyMessage.MessageMetaData metaData = new FileReadyMessage.MessageMetaData(
134             "sourceName", "otherField1", "otherField2", "otherField3", 42, "field5", "field6",
135             "field7", "field8", 123456789L, 987654321L, "field11", "field12"
136         );
137         FileData fileData = FileData.builder().messageMetaData(metaData).build();
138
139         FileReadyMessage.FileInfo fileInfo = new FileReadyMessage.FileInfo("name", "http://username:password@example.com:8080/path?query1=value1&query2=value2", "hashMapField", "");
140         FileReadyMessage.ArrayOfNamedHashMap arrayOfNamedHashMap = new FileReadyMessage.ArrayOfNamedHashMap("someString", fileInfo);
141         fileData.fileInfo = arrayOfNamedHashMap;
142
143         // Act
144         FileServerData result = fileData.fileServerData();
145
146         // Assert
147         assertEquals("username", result.userId);
148         assertEquals("password", result.password);
149     }
150
151     @Test
152     void testFileServerDataWithFragment() throws Exception {
153         // Arrange
154         AppConfig config = new AppConfig();
155         config.setCollectedFilesPath("/local/path");
156         FileReadyMessage.MessageMetaData metaData = new FileReadyMessage.MessageMetaData(
157             "sourceName", "otherField1", "otherField2", "otherField3", 42, "field5", "field6",
158             "field7", "field8", 123456789L, 987654321L, "field11", "field12"
159         );
160         FileData fileData = FileData.builder().messageMetaData(metaData).build();
161
162         FileReadyMessage.FileInfo fileInfo = new FileReadyMessage.FileInfo("name", "http://username@example.com:8080/path?query1=value1&query2=value2#rawFragment", "hashMapField", "");
163         FileReadyMessage.ArrayOfNamedHashMap arrayOfNamedHashMap = new FileReadyMessage.ArrayOfNamedHashMap("someString", fileInfo);
164         fileData.fileInfo = arrayOfNamedHashMap;
165
166         // Act
167         FileServerData result = fileData.fileServerData();
168
169         // Assert
170         assertEquals("rawFragment", result.uriRawFragment);
171     }
172
173     @Test
174     void testFileServerDataWithoutUserInfo() throws Exception {
175         // Arrange
176         AppConfig config = new AppConfig();
177         config.setCollectedFilesPath("/local/path");
178         FileReadyMessage.MessageMetaData metaData = new FileReadyMessage.MessageMetaData(
179             "sourceName", "otherField1", "otherField2", "otherField3", 42, "field5", "field6",
180             "field7", "field8", 123456789L, 987654321L, "field11", "field12"
181         );
182         FileData fileData = FileData.builder().messageMetaData(metaData).build();
183
184         FileReadyMessage.FileInfo fileInfo = new FileReadyMessage.FileInfo("name", "http://example.com:8080/path?query1=value1&query2=value2", "hashMapField", "");
185         FileReadyMessage.ArrayOfNamedHashMap arrayOfNamedHashMap = new FileReadyMessage.ArrayOfNamedHashMap("someString", fileInfo);
186         fileData.fileInfo = arrayOfNamedHashMap;
187
188         FileServerData result = fileData.fileServerData();
189         assertEquals("example.com", result.getServerAddress());
190     }
191
192     @Test
193     void testInvalidScheme() throws Exception {
194         // Arrange
195         AppConfig config = new AppConfig();
196         config.setCollectedFilesPath("/local/path");
197         FileReadyMessage.MessageMetaData metaData = new FileReadyMessage.MessageMetaData(
198             "sourceName", "otherField1", "otherField2", "otherField3", 42, "field5", "field6",
199             "field7", "field8", 123456789L, 987654321L, "field11", "field12"
200         );
201         FileData fileData = FileData.builder().messageMetaData(metaData).build();
202
203         FileReadyMessage.FileInfo fileInfo = new FileReadyMessage.FileInfo("name", "abcxyz://example.com:8080/path?query1=value1&query2=value2", "hashMapField", "");
204         FileReadyMessage.ArrayOfNamedHashMap arrayOfNamedHashMap = new FileReadyMessage.ArrayOfNamedHashMap("someString", fileInfo);
205         fileData.fileInfo = arrayOfNamedHashMap;
206
207         // Act
208         FileData.Scheme result = fileData.scheme();
209         assertEquals("FTPES", result.name());
210     }
211
212     @Test
213     void testCreateFileData(){
214
215         FileReadyMessage.MessageMetaData metaData = new FileReadyMessage.MessageMetaData(
216             "sourceName", "otherField1", "otherField2", "otherField3", 42, "field5", "field6",
217             "field7", "field8", 123456789L, 987654321L, "field11", "field12"
218         );
219
220         FileReadyMessage fileReadyMessage = FileReadyMessage.builder()
221             .event(
222                 FileReadyMessage.Event.builder()
223                     .commonEventHeader(metaData)
224                     .notificationFields(
225                         FileReadyMessage.NotificationFields.builder()
226                             .notificationFieldsVersion("1.0")
227                             .changeType("Add")
228                             .changeIdentifier("Change123")
229                             .arrayOfNamedHashMap(
230                                 Collections.singletonList(
231                                     FileReadyMessage.ArrayOfNamedHashMap.builder()
232                                         .name("File1")
233                                         .hashMap(
234                                             FileReadyMessage.FileInfo.builder()
235                                                 .fileFormatType("Text")
236                                                 .location("ftp://example.com/files/file.txt")
237                                                 .fileFormatVersion("1.0")
238                                                 .compression("None")
239                                                 .build()
240                                         )
241                                         .build()
242                                 )
243                             )
244                             .build()
245                     )
246                     .build()
247             )
248             .build();
249
250         Iterable<FileData> fileDataIterable = FileData.createFileData(fileReadyMessage);
251         FileReadyMessage.MessageMetaData messageMetaData = fileDataIterable.iterator().next().messageMetaData;
252
253         assertEquals("field8", messageMetaData.sourceName);
254     }
255 }
256