FINERACT-1707 - S3 export and dependent service
- [x] S3 export function - [x] list all available export type services - [x] refactor export service - [x] unit test for export name generator - [x] s3 integration test - [x] localstack integration for testing
This commit is contained in:
committed by
Arnold Gálovics
parent
e08675ed54
commit
d8fd8088b0
+97
@@ -0,0 +1,97 @@
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you 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.
|
||||
*/
|
||||
package org.apache.fineract.infrastructure.dataqueries.service;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Map;
|
||||
import java.util.TreeMap;
|
||||
import org.apache.fineract.infrastructure.dataqueries.service.export.DatatableExportUtil;
|
||||
import org.junit.Assert;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
public class DatatableExportUtilTest {
|
||||
|
||||
@Test
|
||||
public void emptyFolderTest() {
|
||||
Assert.assertEquals("", DatatableExportUtil.normalizeFolderName(""));
|
||||
Assert.assertEquals("", DatatableExportUtil.normalizeFolderName("/"));
|
||||
Assert.assertEquals("", DatatableExportUtil.normalizeFolderName(null));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void specialCharacterFolderTest() {
|
||||
Assert.assertEquals("_", DatatableExportUtil.normalizeFolderName("Á"));
|
||||
Assert.assertEquals("_", DatatableExportUtil.normalizeFolderName("="));
|
||||
Assert.assertEquals("_", DatatableExportUtil.normalizeFolderName("\\"));
|
||||
Assert.assertEquals("_", DatatableExportUtil.normalizeFolderName("@"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void normalizedFolderNameTest() {
|
||||
Assert.assertEquals("$", DatatableExportUtil.normalizeFolderName("$"));
|
||||
Assert.assertEquals("reports", DatatableExportUtil.normalizeFolderName("reports"));
|
||||
Assert.assertEquals("reports", DatatableExportUtil.normalizeFolderName("reports/"));
|
||||
Assert.assertEquals("reports", DatatableExportUtil.normalizeFolderName("/reports/"));
|
||||
Assert.assertEquals("reports/content", DatatableExportUtil.normalizeFolderName("reports/content"));
|
||||
Assert.assertEquals("reports/content", DatatableExportUtil.normalizeFolderName("reports/////content"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void generateDatatableExportFileNameSuccessTest() {
|
||||
String reportName = "reportName";
|
||||
Map<String, String> reportParams = Collections.synchronizedSortedMap(new TreeMap<>(Map.of("param1", "value1", "param2", "value2")));
|
||||
String fileName = DatatableExportUtil.generateS3DatatableExportFileName(1024, "folder", "csv", reportName, reportParams);
|
||||
Assert.assertTrue(fileName.matches("folder/reportName\\(param1_value1;param2_value2\\)_\\d{14}.csv"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void generateDatatableExportFileNameComplexTest() {
|
||||
String reportName = "reportName";
|
||||
Map<String, String> reportParams = Collections.synchronizedSortedMap(new TreeMap<>(Map.of("param1", "value1", "param2", "value2")));
|
||||
Assert.assertTrue(DatatableExportUtil.generateS3DatatableExportFileName(1024, "folder///name///", "csv", reportName, reportParams)
|
||||
.matches("folder/name/reportName\\(param1_value1;param2_value2\\)_\\d{14}.csv"));
|
||||
IllegalArgumentException folderTooLongException = Assert.assertThrows(IllegalArgumentException.class, () -> {
|
||||
DatatableExportUtil.generateS3DatatableExportFileName(30, "too_long_folder_name_test", "csv", reportName, reportParams);
|
||||
});
|
||||
Assert.assertEquals("The folder name is too long", folderTooLongException.getMessage());
|
||||
|
||||
IllegalArgumentException maximumLengthException = Assert.assertThrows(IllegalArgumentException.class, () -> {
|
||||
DatatableExportUtil.generateS3DatatableExportFileName(29, "folder///name/", "csv", reportName, reportParams);
|
||||
});
|
||||
Assert.assertEquals("The maximum length must be greater than 30", maximumLengthException.getMessage());
|
||||
|
||||
IllegalArgumentException extensionRequired = Assert.assertThrows(IllegalArgumentException.class, () -> {
|
||||
DatatableExportUtil.generateS3DatatableExportFileName(30, "too_long_folder_name_test", null, reportName, reportParams);
|
||||
});
|
||||
Assert.assertEquals("The extension is required", extensionRequired.getMessage());
|
||||
|
||||
IllegalArgumentException reportNameRequired = Assert.assertThrows(IllegalArgumentException.class, () -> {
|
||||
DatatableExportUtil.generateS3DatatableExportFileName(30, "too_long_folder_name_test", "csv", null, reportParams);
|
||||
});
|
||||
Assert.assertEquals("The report name is required", reportNameRequired.getMessage());
|
||||
|
||||
Assert.assertTrue(DatatableExportUtil.generateS3DatatableExportFileName(1024, "folder///name/", ".csv", reportName, null)
|
||||
.matches("folder/name/reportName_\\d{14}.csv"));
|
||||
|
||||
Assert.assertTrue(
|
||||
DatatableExportUtil.generateS3DatatableExportFileName(1024, "folder///name/", "csv", "report/with/slash", reportParams)
|
||||
.matches("folder/name/report_with_slash\\(param1_value1;param2_value2\\)_\\d{14}.csv"));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -70,6 +70,8 @@ fineract.content.s3.enabled=false
|
||||
fineract.content.s3.bucketName=
|
||||
fineract.content.s3.accessKey=
|
||||
fineract.content.s3.secretKey=
|
||||
fineract.report.export.s3.bucket=${FINERACT_REPORT_EXPORT_S3_BUCKET_NAME:}
|
||||
fineract.report.export.s3.enabled=${FINERACT_REPORT_EXPORT_S3_ENABLED:false}
|
||||
|
||||
management.health.jms.enabled=false
|
||||
|
||||
|
||||
Reference in New Issue
Block a user