HDFS-3665. Add a test for renaming across file systems via a symlink. Contributed by Eli Collins

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1362177 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Eli Collins 2012-07-16 18:29:25 +00:00
parent cc1ee7203b
commit 572823c82c
2 changed files with 39 additions and 2 deletions

View File

@ -336,6 +336,8 @@ Branch-2 ( Unreleased changes )
HDFS-3537. Move libhdfs and fuse-dfs source to native subdirectories. HDFS-3537. Move libhdfs and fuse-dfs source to native subdirectories.
(Colin Patrick McCabe via eli) (Colin Patrick McCabe via eli)
HDFS-3665. Add a test for renaming across file systems via a symlink. (eli)
OPTIMIZATIONS OPTIMIZATIONS
HDFS-2982. Startup performance suffers when there are many edit log HDFS-2982. Startup performance suffers when there are many edit log

View File

@ -97,7 +97,7 @@ public static void testTearDown() throws Exception {
} }
@Test @Test
/** Link from Hdfs to LocalFs */ /** Access a file using a link that spans Hdfs to LocalFs */
public void testLinkAcrossFileSystems() throws IOException { public void testLinkAcrossFileSystems() throws IOException {
Path localDir = new Path("file://"+getAbsoluteTestRootDir(fc)+"/test"); Path localDir = new Path("file://"+getAbsoluteTestRootDir(fc)+"/test");
Path localFile = new Path("file://"+getAbsoluteTestRootDir(fc)+"/test/file"); Path localFile = new Path("file://"+getAbsoluteTestRootDir(fc)+"/test/file");
@ -112,7 +112,42 @@ public void testLinkAcrossFileSystems() throws IOException {
readFile(link); readFile(link);
assertEquals(fileSize, fc.getFileStatus(link).getLen()); assertEquals(fileSize, fc.getFileStatus(link).getLen());
} }
@Test
/** Test renaming a file across two file systems using a link */
public void testRenameAcrossFileSystemsViaLink() throws IOException {
Path localDir = new Path("file://"+getAbsoluteTestRootDir(fc)+"/test");
Path hdfsFile = new Path(testBaseDir1(), "file");
Path link = new Path(testBaseDir1(), "link");
Path hdfsFileNew = new Path(testBaseDir1(), "fileNew");
Path hdfsFileNewViaLink = new Path(link, "fileNew");
FileContext localFc = FileContext.getLocalFSFileContext();
localFc.delete(localDir, true);
localFc.mkdir(localDir, FileContext.DEFAULT_PERM, true);
localFc.setWorkingDirectory(localDir);
createAndWriteFile(fc, hdfsFile);
fc.createSymlink(localDir, link, false);
// Rename hdfs://test1/file to hdfs://test1/link/fileNew
// which renames to file://TEST_ROOT/test/fileNew which
// spans AbstractFileSystems and therefore fails.
try {
fc.rename(hdfsFile, hdfsFileNewViaLink);
fail("Renamed across file systems");
} catch (InvalidPathException ipe) {
// Expected
}
// Now rename hdfs://test1/link/fileNew to hdfs://test1/fileNew
// which renames file://TEST_ROOT/test/fileNew to hdfs://test1/fileNew
// which spans AbstractFileSystems and therefore fails.
createAndWriteFile(fc, hdfsFileNewViaLink);
try {
fc.rename(hdfsFileNewViaLink, hdfsFileNew);
fail("Renamed across file systems");
} catch (InvalidPathException ipe) {
// Expected
}
}
@Test @Test
/** Test access a symlink using AbstractFileSystem */ /** Test access a symlink using AbstractFileSystem */
public void testAccessLinkFromAbstractFileSystem() throws IOException { public void testAccessLinkFromAbstractFileSystem() throws IOException {