blob: 60c5776cea12327d529545b586c81a2bf55be241 [file] [log] [blame]
/**
* 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.metron.management;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileUtil;
import org.apache.hadoop.hdfs.MiniDFSCluster;
import org.apache.metron.stellar.dsl.Context;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.MethodSource;
public class FileSystemFunctionsTest {
private FileSystemFunctions.FileSystemGetter fsGetter = null;
private static File hdfsBaseDir;
private static File localBaseDir;
private static MiniDFSCluster hdfsCluster;
private static String hdfsPrefix;
private static String localPrefix;
private String prefix;
private Context context = null;
private FileSystemFunctions.FileSystemGet get;
private FileSystemFunctions.FileSystemGetList getList;
private FileSystemFunctions.FileSystemLs ls;
private FileSystemFunctions.FileSystemPut put;
private FileSystemFunctions.FileSystemRm rm;
public static Collection<Object[]> types() {
return Arrays.asList(new Object[][]{
{FileSystemFunctions.FS_TYPE.HDFS}
, {FileSystemFunctions.FS_TYPE.LOCAL}
});
}
@BeforeAll
public static void setupFS() throws IOException {
{
hdfsBaseDir = Files.createTempDirectory("test_hdfs").toFile().getAbsoluteFile();
Configuration conf = new Configuration();
conf.set(MiniDFSCluster.HDFS_MINIDFS_BASEDIR, hdfsBaseDir.getAbsolutePath());
MiniDFSCluster.Builder builder = new MiniDFSCluster.Builder(conf);
hdfsCluster = builder.build();
hdfsPrefix = "/";
}
{
localPrefix = "target/fsTest/";
if (new File(localPrefix).exists()) {
new File(localPrefix).delete();
}
new File(localPrefix).mkdirs();
}
}
@AfterAll
public static void teardown() {
{
hdfsCluster.shutdown();
FileUtil.fullyDelete(hdfsBaseDir);
}
{
new File(localPrefix).delete();
}
}
private void setupFsTypeAndFunctions(FileSystemFunctions.FS_TYPE type) {
if(type == FileSystemFunctions.FS_TYPE.HDFS) {
prefix=hdfsPrefix;
fsGetter = () -> hdfsCluster.getFileSystem();
}
else {
prefix=localPrefix;
fsGetter = FileSystemFunctions.FS_TYPE.LOCAL;
}
get = new FileSystemFunctions.FileSystemGet(fsGetter);
get.initialize(null);
getList = new FileSystemFunctions.FileSystemGetList(fsGetter);
getList.initialize(null);
ls = new FileSystemFunctions.FileSystemLs(fsGetter);
ls.initialize(null);
put = new FileSystemFunctions.FileSystemPut(fsGetter);
put.initialize(null);
rm = new FileSystemFunctions.FileSystemRm(fsGetter);
rm.initialize(null);
}
@ParameterizedTest
@MethodSource("types")
public void testHappyPath(FileSystemFunctions.FS_TYPE type) {
setupFsTypeAndFunctions(type);
Object putOut = put.apply(Arrays.asList("foo", prefix + "testPut.dat"), null);
assertTrue((Boolean) putOut);
String getOut = (String)get.apply(Arrays.asList(prefix + "testPut.dat"), null);
assertEquals("foo", getOut);
String lsOut = (String) ls.apply(Arrays.asList(prefix), null);
assertFalse(lsOut.contains("(empty)"));
Boolean rmRet = (Boolean)rm.apply(Arrays.asList(prefix + "testPut.dat"), null);
assertTrue(rmRet);
lsOut = (String) ls.apply(Arrays.asList(prefix), null);
assertTrue(lsOut.contains("(empty)"));
}
@ParameterizedTest
@MethodSource("types")
public void testGetList(FileSystemFunctions.FS_TYPE type) {
setupFsTypeAndFunctions(type);
Object putOut = put.apply(Arrays.asList("foo\nbar", prefix + "testPut.dat"), null);
assertTrue((Boolean) putOut);
String getOut = (String)get.apply(Arrays.asList(prefix + "testPut.dat"), null);
assertEquals("foo\nbar", getOut);
List<String> list = (List<String>) getList.apply(Arrays.asList(prefix + "testPut.dat"), null);
assertEquals(2,list.size());
assertEquals("foo",list.get(0));
assertEquals("bar",list.get(1));
}
@ParameterizedTest
@MethodSource("types")
public void testPutMissingFile(FileSystemFunctions.FS_TYPE type) {
setupFsTypeAndFunctions(type);
Object o = put.apply(Arrays.asList("foo", null), null);
assertFalse((Boolean) o);
String lsOut = (String) ls.apply(Arrays.asList(prefix), null);
assertTrue(lsOut.contains("(empty)"));
}
@ParameterizedTest
@MethodSource("types")
public void testRmTwice(FileSystemFunctions.FS_TYPE type) {
setupFsTypeAndFunctions(type);
Object putOut = put.apply(Arrays.asList("foo", prefix + "testPut.dat"), null);
assertTrue((Boolean) putOut);
Boolean rmRet = (Boolean)rm.apply(Arrays.asList(prefix + "testPut.dat"), null);
assertTrue(rmRet);
rmRet = (Boolean)rm.apply(Arrays.asList(prefix + "testPut.dat"), null);
assertTrue(rmRet);
String lsOut = (String) ls.apply(Arrays.asList(prefix), null);
assertTrue(lsOut.contains("(empty)"));
}
@ParameterizedTest
@MethodSource("types")
public void testRecursiveRm(FileSystemFunctions.FS_TYPE type) {
setupFsTypeAndFunctions(type);
Object putOut = put.apply(Arrays.asList("foo", prefix + "blah/testPut.dat"), null);
assertTrue((Boolean) putOut);
putOut = put.apply(Arrays.asList("grok", prefix + "blah/testPut2.dat"), null);
assertTrue((Boolean) putOut);
assertEquals("foo", get.apply(Arrays.asList(prefix + "blah/testPut.dat"), null));
assertEquals("grok", get.apply(Arrays.asList(prefix + "blah/testPut2.dat"), null));
boolean rmRet = (Boolean)rm.apply(Arrays.asList(prefix + "blah", true), null);
assertTrue(rmRet);
String lsOut = (String) ls.apply(Arrays.asList(prefix), null);
assertTrue(lsOut.contains("(empty)"));
}
}