예제 #1
0
        /// <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());
        }
예제 #2
0
        private FileStatus DeprecatedGetFileLinkStatusInternal(Path f)
        {
            string target = FileUtil.ReadLink(new FilePath(f.ToString()));

            try
            {
                FileStatus fs = GetFileStatus(f);
                // If f refers to a regular file or directory
                if (target.IsEmpty())
                {
                    return(fs);
                }
                // Otherwise f refers to a symlink
                return(new FileStatus(fs.GetLen(), false, fs.GetReplication(), fs.GetBlockSize(),
                                      fs.GetModificationTime(), fs.GetAccessTime(), fs.GetPermission(), fs.GetOwner(),
                                      fs.GetGroup(), new Path(target), f));
            }
            catch (FileNotFoundException e)
            {
                /* The exists method in the File class returns false for dangling
                 * links so we can get a FileNotFoundException for links that exist.
                 * It's also possible that we raced with a delete of the link. Use
                 * the readBasicFileAttributes method in java.nio.file.attributes
                 * when available.
                 */
                if (!target.IsEmpty())
                {
                    return(new FileStatus(0, false, 0, 0, 0, 0, FsPermission.GetDefault(), string.Empty
                                          , string.Empty, new Path(target), f));
                }
                // f refers to a file or directory that does not exist
                throw;
            }
        }
예제 #3
0
 /// <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());
     }
 }
예제 #4
0
        /// <exception cref="System.IO.IOException"/>
        public virtual void TestSetPermissionAffectsTarget()
        {
            Path file       = new Path(TestBaseDir1(), "file");
            Path dir        = new Path(TestBaseDir2());
            Path linkToFile = new Path(TestBaseDir1(), "linkToFile");
            Path linkToDir  = new Path(TestBaseDir1(), "linkToDir");

            CreateAndWriteFile(file);
            wrapper.CreateSymlink(file, linkToFile, false);
            wrapper.CreateSymlink(dir, linkToDir, false);
            // Changing the permissions using the link does not modify
            // the permissions of the link..
            FsPermission perms = wrapper.GetFileLinkStatus(linkToFile).GetPermission();

            wrapper.SetPermission(linkToFile, new FsPermission((short)0x1b4));
            wrapper.SetOwner(linkToFile, "user", "group");
            NUnit.Framework.Assert.AreEqual(perms, wrapper.GetFileLinkStatus(linkToFile).GetPermission
                                                ());
            // but the file's permissions were adjusted appropriately
            FileStatus stat = wrapper.GetFileStatus(file);

            NUnit.Framework.Assert.AreEqual(0x1b4, stat.GetPermission().ToShort());
            NUnit.Framework.Assert.AreEqual("user", stat.GetOwner());
            NUnit.Framework.Assert.AreEqual("group", stat.GetGroup());
            // Getting the file's permissions via the link is the same
            // as getting the permissions directly.
            NUnit.Framework.Assert.AreEqual(stat.GetPermission(), wrapper.GetFileStatus(linkToFile
                                                                                        ).GetPermission());
            // Ditto for a link to a directory
            perms = wrapper.GetFileLinkStatus(linkToDir).GetPermission();
            wrapper.SetPermission(linkToDir, new FsPermission((short)0x1b4));
            wrapper.SetOwner(linkToDir, "user", "group");
            NUnit.Framework.Assert.AreEqual(perms, wrapper.GetFileLinkStatus(linkToDir).GetPermission
                                                ());
            stat = wrapper.GetFileStatus(dir);
            NUnit.Framework.Assert.AreEqual(0x1b4, stat.GetPermission().ToShort());
            NUnit.Framework.Assert.AreEqual("user", stat.GetOwner());
            NUnit.Framework.Assert.AreEqual("group", stat.GetGroup());
            NUnit.Framework.Assert.AreEqual(stat.GetPermission(), wrapper.GetFileStatus(linkToDir
                                                                                        ).GetPermission());
        }
예제 #5
0
        /// <exception cref="System.Exception"/>
        public virtual void TestMkdirsWithUmask()
        {
            if (fs.GetScheme().Equals("s3") || fs.GetScheme().Equals("s3n"))
            {
                // skip permission tests for S3FileSystem until HDFS-1333 is fixed.
                return;
            }
            Configuration conf     = fs.GetConf();
            string        oldUmask = conf.Get(CommonConfigurationKeys.FsPermissionsUmaskKey);

            try
            {
                conf.Set(CommonConfigurationKeys.FsPermissionsUmaskKey, TestUmask);
                Org.Apache.Hadoop.FS.Path dir = new Org.Apache.Hadoop.FS.Path("/test/newDir");
                Assert.True(fs.Mkdirs(dir, new FsPermission((short)0x1ff)));
                FileStatus status = fs.GetFileStatus(dir);
                Assert.True(status.IsDirectory());
                Assert.Equal((short)0x1cd, status.GetPermission().ToShort());
            }
            finally
            {
                conf.Set(CommonConfigurationKeys.FsPermissionsUmaskKey, oldUmask);
            }
        }
예제 #6
0
 /// <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());
 }