HDFS-10430. Reuse FileSystem#access in TestAsyncDFS. Contributed by Xiaobing Zhou.
This commit is contained in:
parent
da07477197
commit
21890c4239
@ -34,7 +34,6 @@
|
|||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.security.PrivilegedExceptionAction;
|
import java.security.PrivilegedExceptionAction;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@ -46,19 +45,16 @@
|
|||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
import org.apache.hadoop.conf.Configuration;
|
import org.apache.hadoop.conf.Configuration;
|
||||||
import org.apache.hadoop.fs.CommonConfigurationKeys;
|
import org.apache.hadoop.fs.CommonConfigurationKeys;
|
||||||
import org.apache.hadoop.fs.FileStatus;
|
|
||||||
import org.apache.hadoop.fs.FileSystem;
|
import org.apache.hadoop.fs.FileSystem;
|
||||||
import org.apache.hadoop.fs.Path;
|
import org.apache.hadoop.fs.Path;
|
||||||
import org.apache.hadoop.fs.Options.Rename;
|
import org.apache.hadoop.fs.Options.Rename;
|
||||||
import org.apache.hadoop.fs.permission.AclEntry;
|
import org.apache.hadoop.fs.permission.AclEntry;
|
||||||
import org.apache.hadoop.fs.permission.AclStatus;
|
import org.apache.hadoop.fs.permission.AclStatus;
|
||||||
import org.apache.hadoop.fs.permission.FsAction;
|
|
||||||
import org.apache.hadoop.fs.permission.FsPermission;
|
import org.apache.hadoop.fs.permission.FsPermission;
|
||||||
import org.apache.hadoop.hdfs.TestDFSPermission.PermissionGenerator;
|
import org.apache.hadoop.hdfs.TestDFSPermission.PermissionGenerator;
|
||||||
import org.apache.hadoop.hdfs.server.namenode.AclTestHelpers;
|
import org.apache.hadoop.hdfs.server.namenode.AclTestHelpers;
|
||||||
import org.apache.hadoop.hdfs.server.namenode.FSAclBaseTest;
|
import org.apache.hadoop.hdfs.server.namenode.FSAclBaseTest;
|
||||||
import org.apache.hadoop.ipc.AsyncCallLimitExceededException;
|
import org.apache.hadoop.ipc.AsyncCallLimitExceededException;
|
||||||
import org.apache.hadoop.security.AccessControlException;
|
|
||||||
import org.apache.hadoop.security.UserGroupInformation;
|
import org.apache.hadoop.security.UserGroupInformation;
|
||||||
import org.apache.hadoop.util.Time;
|
import org.apache.hadoop.util.Time;
|
||||||
import org.junit.After;
|
import org.junit.After;
|
||||||
@ -445,7 +441,7 @@ public void testConcurrentAsyncAPI() throws Exception {
|
|||||||
for (int i = 0; i < NUM_TESTS; i++) {
|
for (int i = 0; i < NUM_TESTS; i++) {
|
||||||
assertTrue(fs.exists(dsts[i]));
|
assertTrue(fs.exists(dsts[i]));
|
||||||
FsPermission fsPerm = new FsPermission(permissions[i]);
|
FsPermission fsPerm = new FsPermission(permissions[i]);
|
||||||
checkAccessPermissions(fs.getFileStatus(dsts[i]), fsPerm.getUserAction());
|
fs.access(dsts[i], fsPerm.getUserAction());
|
||||||
}
|
}
|
||||||
|
|
||||||
// test setOwner
|
// test setOwner
|
||||||
@ -474,34 +470,4 @@ public void testConcurrentAsyncAPI() throws Exception {
|
|||||||
assertTrue("group2".equals(fs.getFileStatus(dsts[i]).getGroup()));
|
assertTrue("group2".equals(fs.getFileStatus(dsts[i]).getGroup()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void checkAccessPermissions(FileStatus stat, FsAction mode)
|
|
||||||
throws IOException {
|
|
||||||
checkAccessPermissions(UserGroupInformation.getCurrentUser(), stat, mode);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void checkAccessPermissions(final UserGroupInformation ugi,
|
|
||||||
FileStatus stat, FsAction mode) throws IOException {
|
|
||||||
FsPermission perm = stat.getPermission();
|
|
||||||
String user = ugi.getShortUserName();
|
|
||||||
List<String> groups = Arrays.asList(ugi.getGroupNames());
|
|
||||||
|
|
||||||
if (user.equals(stat.getOwner())) {
|
|
||||||
if (perm.getUserAction().implies(mode)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
} else if (groups.contains(stat.getGroup())) {
|
|
||||||
if (perm.getGroupAction().implies(mode)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (perm.getOtherAction().implies(mode)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
throw new AccessControlException(String.format(
|
|
||||||
"Permission denied: user=%s, path=\"%s\":%s:%s:%s%s", user, stat
|
|
||||||
.getPath(), stat.getOwner(), stat.getGroup(),
|
|
||||||
stat.isDirectory() ? "d" : "-", perm));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user