blob: 26c5a96b77d371438e2d52e5cda36690caa2a30e [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.hadoop.hbase.oss.contract;
import java.lang.reflect.Method;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystemContractBaseTest;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hbase.oss.HBaseObjectStoreSemantics;
import org.apache.hadoop.hbase.oss.TestUtils;
import org.junit.Assert;
import org.junit.Assume;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TestName;
public class TestHBOSSContract extends FileSystemContractBaseTest {
private Path basePath;
private Configuration conf;
@Rule
public TestName methodName = new TestName();
private void nameThread() {
Thread.currentThread().setName("JUnit-" + methodName.getMethodName());
}
@Before
public void setUp() throws Exception {
nameThread();
conf = new Configuration();
conf.addResource("contract/s3a.xml");
fs = TestUtils.getFileSystem(conf);
Assume.assumeNotNull(fs);
HBaseObjectStoreSemantics hboss = (HBaseObjectStoreSemantics)fs;
basePath = fs.makeQualified(TestUtils.testPath(hboss, "ITestHBOSSContract"));
}
@Override
public Path getTestBaseDir() {
return basePath;
}
@Test
public void testMkdirsWithUmask() throws Exception {
// Skipped in the hadoop-aws tests
if (TestUtils.fsIs(TestUtils.S3A, conf)) {
// It would be nice to use Assume.assumeFalse instead of if, but Hadoop 2
// builds pull in JUnit 3, and this is the only way to skip the test.
return;
}
super.testMkdirsWithUmask();
}
@Test
public void testRenameDirectoryAsExistingDirectory() throws Exception {
if (!TestUtils.fsIs(TestUtils.S3A, conf)) {
super.testRenameDirectoryAsExistingDirectory();
return;
}
// Overridden implementation in the hadoop-aws tests
Assume.assumeTrue(renameSupported());
Path src = path("testRenameDirectoryAsExisting/dir");
fs.mkdirs(src);
createFile(path(src + "/file1"));
createFile(path(src + "/subdir/file2"));
Path dst = path("testRenameDirectoryAsExistingNew/newdir");
fs.mkdirs(dst);
rename(src, dst, true, false, true);
Assert.assertFalse("Nested file1 exists",
fs.exists(path(src + "/file1")));
Assert.assertFalse("Nested file2 exists",
fs.exists(path(src + "/subdir/file2")));
Assert.assertTrue("Renamed nested file1 exists",
fs.exists(path(dst + "/file1")));
Assert.assertTrue("Renamed nested exists",
fs.exists(path(dst + "/subdir/file2")));
}
@Test
public void testMoveDirUnderParent() throws Throwable {
// Skipped in the hadoop-aws tests
if (TestUtils.fsIs(TestUtils.S3A, conf)) {
// It would be nice to use Assume.assumeFalse instead of if, but Hadoop 2
// builds pull in JUnit 3, and this is the only way to skip the test.
return;
}
// Can't just call super.testMoveDirUnderParent() because it doesn't
// exist in older Hadoop versions
String methodName = "testMoveDirUnderParent";
Method method = null;
boolean skip = false;
try {
method = super.getClass().getMethod(methodName, (Class<?>[]) null);
} catch (NoSuchMethodException e) {
skip = true;
}
Assume.assumeFalse("Unable to find method " + methodName, skip);
if (!skip) {
method.invoke(this, (Object[]) null);
}
}
}