/// <exception cref="System.IO.IOException"/> public virtual void TestRenameAcrossFileSystemsViaLink() { Path localDir = new Path("file://" + wrapper.GetAbsoluteTestRootDir() + "/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"); FSTestWrapper localWrapper = wrapper.GetLocalFSWrapper(); localWrapper.Delete(localDir, true); localWrapper.Mkdir(localDir, FileContext.DefaultPerm, true); localWrapper.SetWorkingDirectory(localDir); CreateAndWriteFile(hdfsFile); wrapper.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 { wrapper.Rename(hdfsFile, hdfsFileNewViaLink); NUnit.Framework.Assert.Fail("Renamed across file systems"); } catch (InvalidPathException) { } catch (ArgumentException e) { // Expected from FileContext // Expected from Filesystem GenericTestUtils.AssertExceptionContains("Wrong FS: ", e); } // 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(hdfsFileNewViaLink); try { wrapper.Rename(hdfsFileNewViaLink, hdfsFileNew); NUnit.Framework.Assert.Fail("Renamed across file systems"); } catch (InvalidPathException) { } catch (ArgumentException e) { // Expected from FileContext // Expected from Filesystem GenericTestUtils.AssertExceptionContains("Wrong FS: ", e); } }
/// <exception cref="System.IO.IOException"/> public virtual void TestLinkAcrossFileSystems() { Path localDir = new Path("file://" + wrapper.GetAbsoluteTestRootDir() + "/test"); Path localFile = new Path("file://" + wrapper.GetAbsoluteTestRootDir() + "/test/file" ); Path link = new Path(TestBaseDir1(), "linkToFile"); FSTestWrapper localWrapper = wrapper.GetLocalFSWrapper(); localWrapper.Delete(localDir, true); localWrapper.Mkdir(localDir, FileContext.DefaultPerm, true); localWrapper.SetWorkingDirectory(localDir); NUnit.Framework.Assert.AreEqual(localDir, localWrapper.GetWorkingDirectory()); CreateAndWriteFile(localWrapper, localFile); wrapper.CreateSymlink(localFile, link, false); ReadFile(link); NUnit.Framework.Assert.AreEqual(fileSize, wrapper.GetFileStatus(link).GetLen()); }
/// <exception cref="System.IO.IOException"/> public virtual void TestCreateLinkToSlash() { Path dir = new Path(TestBaseDir1()); Path file = new Path(TestBaseDir1(), "file"); Path link = new Path(TestBaseDir1(), "linkToSlash"); Path fileViaLink = new Path(TestBaseDir1() + "/linkToSlash" + TestBaseDir1() + "/file" ); CreateAndWriteFile(file); wrapper.SetWorkingDirectory(dir); wrapper.CreateSymlink(new Path("/"), link, false); ReadFile(fileViaLink); NUnit.Framework.Assert.AreEqual(fileSize, wrapper.GetFileStatus(fileViaLink).GetLen ()); // Ditto when using another file context since the file system // for the slash is resolved according to the link's parent. if (wrapper is FileContextTestWrapper) { FSTestWrapper localWrapper = wrapper.GetLocalFSWrapper(); Path linkQual = new Path(cluster.GetURI(0).ToString(), fileViaLink); NUnit.Framework.Assert.AreEqual(fileSize, localWrapper.GetFileStatus(linkQual).GetLen ()); } }