HADOOP-14429. FTPFileSystem#getFsAction always returns FsAction.NONE. (Hongyuan Li via Yongjun Zhang)
This commit is contained in:
parent
45ff4d38e6
commit
5157f6c46e
|
@ -415,16 +415,17 @@ public class FTPFileSystem extends FileSystem {
|
||||||
return client.removeDirectory(pathName);
|
return client.removeDirectory(pathName);
|
||||||
}
|
}
|
||||||
|
|
||||||
private FsAction getFsAction(int accessGroup, FTPFile ftpFile) {
|
@VisibleForTesting
|
||||||
|
FsAction getFsAction(int accessGroup, FTPFile ftpFile) {
|
||||||
FsAction action = FsAction.NONE;
|
FsAction action = FsAction.NONE;
|
||||||
if (ftpFile.hasPermission(accessGroup, FTPFile.READ_PERMISSION)) {
|
if (ftpFile.hasPermission(accessGroup, FTPFile.READ_PERMISSION)) {
|
||||||
action.or(FsAction.READ);
|
action = action.or(FsAction.READ);
|
||||||
}
|
}
|
||||||
if (ftpFile.hasPermission(accessGroup, FTPFile.WRITE_PERMISSION)) {
|
if (ftpFile.hasPermission(accessGroup, FTPFile.WRITE_PERMISSION)) {
|
||||||
action.or(FsAction.WRITE);
|
action = action.or(FsAction.WRITE);
|
||||||
}
|
}
|
||||||
if (ftpFile.hasPermission(accessGroup, FTPFile.EXECUTE_PERMISSION)) {
|
if (ftpFile.hasPermission(accessGroup, FTPFile.EXECUTE_PERMISSION)) {
|
||||||
action.or(FsAction.EXECUTE);
|
action = action.or(FsAction.EXECUTE);
|
||||||
}
|
}
|
||||||
return action;
|
return action;
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,14 +17,18 @@
|
||||||
*/
|
*/
|
||||||
package org.apache.hadoop.fs.ftp;
|
package org.apache.hadoop.fs.ftp;
|
||||||
|
|
||||||
|
import com.google.common.base.Preconditions;
|
||||||
import org.apache.commons.net.ftp.FTP;
|
import org.apache.commons.net.ftp.FTP;
|
||||||
|
|
||||||
import org.apache.commons.net.ftp.FTPClient;
|
import org.apache.commons.net.ftp.FTPClient;
|
||||||
|
import org.apache.commons.net.ftp.FTPFile;
|
||||||
import org.apache.hadoop.conf.Configuration;
|
import org.apache.hadoop.conf.Configuration;
|
||||||
|
import org.apache.hadoop.fs.permission.FsAction;
|
||||||
import org.junit.Rule;
|
import org.junit.Rule;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.rules.Timeout;
|
import org.junit.rules.Timeout;
|
||||||
|
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -82,4 +86,55 @@ public class TestFTPFileSystem {
|
||||||
client.getDataConnectionMode());
|
client.getDataConnectionMode());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testGetFsAction(){
|
||||||
|
FTPFileSystem ftp = new FTPFileSystem();
|
||||||
|
int[] accesses = new int[] {FTPFile.USER_ACCESS, FTPFile.GROUP_ACCESS,
|
||||||
|
FTPFile.WORLD_ACCESS};
|
||||||
|
FsAction[] actions = FsAction.values();
|
||||||
|
for(int i = 0; i < accesses.length; i++){
|
||||||
|
for(int j = 0; j < actions.length; j++){
|
||||||
|
enhancedAssertEquals(actions[j], ftp.getFsAction(accesses[i],
|
||||||
|
getFTPFileOf(accesses[i], actions[j])));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void enhancedAssertEquals(FsAction actionA, FsAction actionB){
|
||||||
|
String notNullErrorMessage = "FsAction cannot be null here.";
|
||||||
|
Preconditions.checkNotNull(actionA, notNullErrorMessage);
|
||||||
|
Preconditions.checkNotNull(actionB, notNullErrorMessage);
|
||||||
|
String errorMessageFormat = "expect FsAction is %s, whereas it is %s now.";
|
||||||
|
String notEqualErrorMessage = String.format(errorMessageFormat,
|
||||||
|
actionA.name(), actionB.name());
|
||||||
|
assertEquals(notEqualErrorMessage, actionA, actionB);
|
||||||
|
}
|
||||||
|
|
||||||
|
private FTPFile getFTPFileOf(int access, FsAction action) {
|
||||||
|
boolean check = access == FTPFile.USER_ACCESS ||
|
||||||
|
access == FTPFile.GROUP_ACCESS ||
|
||||||
|
access == FTPFile.WORLD_ACCESS;
|
||||||
|
String errorFormat = "access must be in [%d,%d,%d], but it is %d now.";
|
||||||
|
String errorMessage = String.format(errorFormat, FTPFile.USER_ACCESS,
|
||||||
|
FTPFile.GROUP_ACCESS, FTPFile.WORLD_ACCESS, access);
|
||||||
|
Preconditions.checkArgument(check, errorMessage);
|
||||||
|
Preconditions.checkNotNull(action);
|
||||||
|
FTPFile ftpFile = new FTPFile();
|
||||||
|
|
||||||
|
if(action.implies(FsAction.READ)){
|
||||||
|
ftpFile.setPermission(access, FTPFile.READ_PERMISSION, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(action.implies(FsAction.WRITE)){
|
||||||
|
ftpFile.setPermission(access, FTPFile.WRITE_PERMISSION, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(action.implies(FsAction.EXECUTE)){
|
||||||
|
ftpFile.setPermission(access, FTPFile.EXECUTE_PERMISSION, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ftpFile;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
Loading…
Reference in New Issue