/*
* 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.hadoop.contract;
import alluxio.Constants;
import alluxio.hadoop.FileSystem;
import alluxio.master.LocalAlluxioCluster;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.contract.AbstractFSContract;
import java.io.IOException;
import java.net.URI;
/**
* This class provides an implementation of {@link AbstractFSContract} using {@link FileSystem}.
* This will be used to run Hadoop Contract tests which verify the
* {@link alluxio.hadoop.AbstractFileSystem} interface. More information can be found here:
* http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/filesystem/testing.html
*/
public class FileSystemContract extends AbstractFSContract {
public static final String CONTRACT_XML = "contract/alluxiofs.xml";
public static final String SYSPROP_TEST_BUILD_DATA = "test.build.data";
public static final String DEFAULT_TEST_BUILD_DATA_DIR = "test/build/data";
private final LocalAlluxioCluster mLocalAlluxioCluster;
private org.apache.hadoop.fs.FileSystem mFS;
/**
* Creates a new {@link FileSystemContract}.
*
* @param conf configuration for hdfs
* @param cluster the Alluxio cluster to test in this contract
*/
public FileSystemContract(Configuration conf, LocalAlluxioCluster cluster) {
super(conf);
mLocalAlluxioCluster = cluster;
//insert the base features
addConfResource(getContractXml());
}
/**
* Return the contract file for this filesystem.
*
* @return the XML
*/
protected String getContractXml() {
return CONTRACT_XML;
}
@Override
public void init() throws IOException {
super.init();
Configuration conf = new Configuration();
conf.set("fs.alluxio.impl", FileSystem.class.getName());
URI uri = URI.create(mLocalAlluxioCluster.getMasterURI());
mFS = org.apache.hadoop.fs.FileSystem.get(uri, conf);
}
@Override
public org.apache.hadoop.fs.FileSystem getTestFileSystem() throws IOException {
return mFS;
}
@Override
public String getScheme() {
return Constants.SCHEME;
}
@Override
public Path getTestPath() {
Path path = mFS.makeQualified(new Path(getTestDataDir()));
return path;
}
/**
* Get the test data directory.
*
* @return the directory for test data
*/
protected String getTestDataDir() {
return System.getProperty(SYSPROP_TEST_BUILD_DATA, DEFAULT_TEST_BUILD_DATA_DIR);
}
}