Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -359,7 +359,7 @@ public static boolean isTrashPath(String path) throws IOException {
public static String getTrashRoot() throws IOException {
// Gets the Trash directory for the current user.
return FileSystem.USER_HOME_PREFIX + "/" +
RouterRpcServer.getRemoteUser().getUserName() + "/" +
RouterRpcServer.getRemoteUser().getShortUserName() + "/" +
FileSystem.TRASH_PREFIX;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,44 @@ public void testMoveToTrashNoMountPoint() throws IOException,
assertEquals(2, fileStatuses.length);
}

@Test
public void testMoveToTrashWithKerberosUser() throws IOException,
URISyntaxException, InterruptedException {
//Constructs the structure of the KerBoers user name
String kerberosUser = "randomUser/dev@HADOOP.COM";
UserGroupInformation ugi = UserGroupInformation.createRemoteUser(kerberosUser);
MountTable addEntry = MountTable.newInstance(MOUNT_POINT,
Collections.singletonMap(ns1, MOUNT_POINT));
assertTrue(addMountTable(addEntry));
// current user client
MiniRouterDFSCluster.NamenodeContext nn1Context = cluster.getNamenode(ns1, null);
DFSClient currentUserClientNs0 = nnContext.getClient();
DFSClient currentUserClientNs1 = nn1Context.getClient();

currentUserClientNs0.setOwner("/", ugi.getShortUserName(), ugi.getShortUserName());
currentUserClientNs1.setOwner("/", ugi.getShortUserName(), ugi.getShortUserName());
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If only one DFSClient and NamenodeContext is enough for this unit test?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is a good idea to set the test user permissions for both subsets. Give test users permission to create both subCluster Trash directories, otherwise there may be some false positives.


// test user client
DFSClient testUserClientNs1 = nn1Context.getClient(ugi);
testUserClientNs1.mkdirs(MOUNT_POINT, new FsPermission("777"), true);
assertTrue(testUserClientNs1.exists(MOUNT_POINT));
// create test file
testUserClientNs1.create(FILE, true);
Path filePath = new Path(FILE);

FileStatus[] fileStatuses = routerFs.listStatus(filePath);
assertEquals(1, fileStatuses.length);
assertEquals(ugi.getShortUserName(), fileStatuses[0].getOwner());
// move to Trash
Configuration routerConf = routerContext.getConf();
FileSystem fs = DFSTestUtil.getFileSystemAs(ugi, routerConf);
Trash trash = new Trash(fs, routerConf);
assertTrue(trash.moveToTrash(filePath));
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggest to check if the final trash directory entries are expected: /user/randomUser/.Trash/?

fileStatuses = fs.listStatus(
new Path("/user/" + ugi.getShortUserName() + "/.Trash/Current" + MOUNT_POINT));
assertEquals(1, fileStatuses.length);
}

@Test
public void testDeleteToTrashExistMountPoint() throws IOException,
URISyntaxException, InterruptedException {
Expand Down