/// <summary>Validates the toString method for FileStatus.</summary> /// <param name="fileStatus">FileStatus to be validated</param> /// <exception cref="System.IO.IOException"/> private void ValidateToString(FileStatus fileStatus) { StringBuilder expected = new StringBuilder(); expected.Append("FileStatus{"); expected.Append("path=").Append(fileStatus.GetPath()).Append("; "); expected.Append("isDirectory=").Append(fileStatus.IsDirectory()).Append("; "); if (!fileStatus.IsDirectory()) { expected.Append("length=").Append(fileStatus.GetLen()).Append("; "); expected.Append("replication=").Append(fileStatus.GetReplication()).Append("; "); expected.Append("blocksize=").Append(fileStatus.GetBlockSize()).Append("; "); } expected.Append("modification_time=").Append(fileStatus.GetModificationTime()).Append ("; "); expected.Append("access_time=").Append(fileStatus.GetAccessTime()).Append("; "); expected.Append("owner=").Append(fileStatus.GetOwner()).Append("; "); expected.Append("group=").Append(fileStatus.GetGroup()).Append("; "); expected.Append("permission=").Append(fileStatus.GetPermission()).Append("; "); if (fileStatus.IsSymlink()) { expected.Append("isSymlink=").Append(true).Append("; "); expected.Append("symlink=").Append(fileStatus.GetSymlink()).Append("}"); } else { expected.Append("isSymlink=").Append(false).Append("}"); } Assert.Equal(expected.ToString(), fileStatus.ToString()); }
/// <exception cref="System.IO.IOException"/> public override Path GetLinkTarget(Path f) { FileStatus fi = GetFileLinkStatusInternal(f, false); // return an unqualified symlink target return(fi.GetSymlink()); }
/// <summary>Constructor</summary> /// <param name="stat">a file status</param> /// <param name="locations">a file's block locations</param> /// <exception cref="System.IO.IOException"/> public LocatedFileStatus(FileStatus stat, BlockLocation[] locations) : this(stat.GetLen(), stat.IsDirectory(), stat.GetReplication(), stat.GetBlockSize (), stat.GetModificationTime(), stat.GetAccessTime(), stat.GetPermission(), stat .GetOwner(), stat.GetGroup(), null, stat.GetPath(), locations) { if (stat.IsSymlink()) { SetSymlink(stat.GetSymlink()); } }
// Expected /// <exception cref="System.IO.IOException"/> public virtual void TestDanglingLink() { Assume.AssumeTrue(!Path.Windows); Path fileAbs = new Path(TestBaseDir1() + "/file"); Path fileQual = new Path(TestURI().ToString(), fileAbs); Path link = new Path(TestBaseDir1() + "/linkToFile"); Path linkQual = new Path(TestURI().ToString(), link.ToString()); wrapper.CreateSymlink(fileAbs, link, false); // Deleting the link using FileContext currently fails because // resolve looks up LocalFs rather than RawLocalFs for the path // so we call ChecksumFs delete (which doesn't delete dangling // links) instead of delegating to delete in RawLocalFileSystem // which deletes via fullyDelete. testDeleteLink above works // because the link is not dangling. //assertTrue(fc.delete(link, false)); FileUtil.FullyDelete(new FilePath(link.ToUri().GetPath())); wrapper.CreateSymlink(fileAbs, link, false); try { wrapper.GetFileStatus(link); NUnit.Framework.Assert.Fail("Got FileStatus for dangling link"); } catch (FileNotFoundException) { } // Expected. File's exists method returns false for dangling links // We can stat a dangling link UserGroupInformation user = UserGroupInformation.GetCurrentUser(); FileStatus fsd = wrapper.GetFileLinkStatus(link); Assert.Equal(fileQual, fsd.GetSymlink()); Assert.True(fsd.IsSymlink()); NUnit.Framework.Assert.IsFalse(fsd.IsDirectory()); Assert.Equal(user.GetUserName(), fsd.GetOwner()); // Compare against user's primary group Assert.Equal(user.GetGroupNames()[0], fsd.GetGroup()); Assert.Equal(linkQual, fsd.GetPath()); // Accessing the link try { ReadFile(link); NUnit.Framework.Assert.Fail("Got FileStatus for dangling link"); } catch (FileNotFoundException) { } // Ditto. // Creating the file makes the link work CreateAndWriteFile(fileAbs); wrapper.GetFileStatus(link); }
/// <summary>Return a FileStatus representing the given path.</summary> /// <remarks> /// Return a FileStatus representing the given path. If the path refers /// to a symlink return a FileStatus representing the link rather than /// the object the link refers to. /// </remarks> /// <exception cref="System.IO.IOException"/> public override FileStatus GetFileLinkStatus(Path f) { FileStatus fi = GetFileLinkStatusInternal(f, false); // getFileLinkStatus is supposed to return a symlink with a // qualified path if (fi.IsSymlink()) { Path targetQual = FSLinkResolver.QualifySymlinkTarget(this.GetUri(), fi.GetPath() , fi.GetSymlink()); fi.SetSymlink(targetQual); } return(fi); }
/// <summary>Validate the accessors for FileStatus.</summary> /// <param name="fileStatus">FileStatus to checked</param> /// <param name="length">expected length</param> /// <param name="isdir">expected isDirectory</param> /// <param name="replication">expected replication</param> /// <param name="blocksize">expected blocksize</param> /// <param name="mtime">expected modification time</param> /// <param name="atime">expected access time</param> /// <param name="permission">expected permission</param> /// <param name="owner">expected owner</param> /// <param name="group">expected group</param> /// <param name="symlink">expected symlink</param> /// <param name="path">expected path</param> /// <exception cref="System.IO.IOException"/> private void ValidateAccessors(FileStatus fileStatus, long length, bool isdir, int replication, long blocksize, long mtime, long atime, FsPermission permission, string owner, string group, Path symlink, Path path) { Assert.Equal(length, fileStatus.GetLen()); Assert.Equal(isdir, fileStatus.IsDirectory()); Assert.Equal(replication, fileStatus.GetReplication()); Assert.Equal(blocksize, fileStatus.GetBlockSize()); Assert.Equal(mtime, fileStatus.GetModificationTime()); Assert.Equal(atime, fileStatus.GetAccessTime()); Assert.Equal(permission, fileStatus.GetPermission()); Assert.Equal(owner, fileStatus.GetOwner()); Assert.Equal(group, fileStatus.GetGroup()); if (symlink == null) { NUnit.Framework.Assert.IsFalse(fileStatus.IsSymlink()); } else { Assert.True(fileStatus.IsSymlink()); Assert.Equal(symlink, fileStatus.GetSymlink()); } Assert.Equal(path, fileStatus.GetPath()); }