/*
* The Alluxio Open Foundation licenses this work under the Apache License, version 2.0
* (the "License"). You may not use this work except in compliance with the License, which is
* available at www.apache.org/licenses/LICENSE-2.0
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
* either express or implied, as more fully set forth in the License.
*
* See the NOTICE file distributed with this work for information regarding copyright ownership.
*/
package alluxio.client.file;
import alluxio.AlluxioURI;
import alluxio.client.ReadType;
import alluxio.client.WriteType;
import alluxio.client.file.options.CreateFileOptions;
import alluxio.client.file.options.OpenFileOptions;
import alluxio.exception.AlluxioException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.concurrent.ThreadSafe;
/**
* Utility class for testing the Alluxio file system.
*/
@ThreadSafe
public final class FileSystemTestUtils {
/**
* Creates a simple file with {@code len} bytes.
*
* @param fs a {@link FileSystem} handler
* @param fileName the name of the file to be created
* @param len file size in bytes
* @param options options to create the file with
*/
public static void createByteFile(FileSystem fs, String fileName, int len,
CreateFileOptions options) {
createByteFile(fs, new AlluxioURI(fileName), options, len);
}
/**
* Creates a simple file with {@code len} bytes.
*
* @param fs a {@link FileSystem} handler
* @param fileName the name of the file to be created
* @param writeType {@link WriteType} used to create the file
* @param len file size
*/
public static void createByteFile(FileSystem fs, String fileName,
WriteType writeType, int len) {
createByteFile(fs, new AlluxioURI(fileName), writeType, len);
}
/**
* Creates a simple file with {@code len} bytes.
*
* @param fs a {@link FileSystem} handler
* @param fileURI URI of the file
* @param writeType {@link WriteType} used to create the file
* @param len file size
*/
public static void createByteFile(FileSystem fs, AlluxioURI fileURI,
WriteType writeType, int len) {
CreateFileOptions options = CreateFileOptions.defaults().setWriteType(writeType);
createByteFile(fs, fileURI, options, len);
}
/**
* Creates a simple file with {@code len} bytes.
*
* @param fs a {@link FileSystem} handler
* @param fileURI URI of the file
* @param options client options to create the file with
* @param len file size
*/
public static void createByteFile(FileSystem fs, AlluxioURI fileURI, CreateFileOptions options,
int len) {
try (FileOutStream os = fs.createFile(fileURI, options)) {
byte[] arr = new byte[len];
for (int k = 0; k < len; k++) {
arr[k] = (byte) k;
}
os.write(arr);
} catch (IOException | AlluxioException e) {
throw new RuntimeException(e);
}
}
/**
* Creates a simple file with {@code len} bytes.
*
* @param fs a {@link FileSystem} handler
* @param fileName the name of the file to be created
* @param writeType {@link WriteType} used to create the file
* @param len file size
* @param blockCapacityByte block size of the file
*/
public static void createByteFile(FileSystem fs, String fileName, WriteType writeType, int len,
long blockCapacityByte) {
CreateFileOptions options =
CreateFileOptions.defaults().setWriteType(writeType).setBlockSizeBytes(blockCapacityByte);
createByteFile(fs, new AlluxioURI(fileName), options, len);
}
/**
* Returns a list of files at a given {@code path}.
*
* @param fs a {@link FileSystem} handler
* @param path a path in alluxio file system
* @return a list of strings representing the file names under the given path
*/
public static List<String> listFiles(FileSystem fs, String path) {
try {
List<URIStatus> statuses = fs.listStatus(new AlluxioURI(path));
List<String> res = new ArrayList<>();
for (URIStatus status : statuses) {
res.add(status.getPath());
if (status.isFolder()) {
res.addAll(listFiles(fs, status.getPath()));
}
}
return res;
} catch (IOException | AlluxioException e) {
throw new RuntimeException(e);
}
}
/**
* Converts a {@link CreateFileOptions} object to an {@link OpenFileOptions} object with a
* matching Alluxio storage type.
*
* @param op a {@link CreateFileOptions} object
* @return an {@link OpenFileOptions} object with a matching Alluxio storage type
*/
public static OpenFileOptions toOpenFileOptions(CreateFileOptions op) {
if (op.getWriteType().getAlluxioStorageType().isStore()) {
return OpenFileOptions.defaults().setReadType(ReadType.CACHE);
}
return OpenFileOptions.defaults().setReadType(ReadType.NO_CACHE);
}
private FileSystemTestUtils() {} // prevent instantiation
}