HDFS-12193. Fix style issues in HttpFS tests. Contributed by Zoran Dimitrijevic

This commit is contained in:
Ravi Prakash 2017-07-24 19:06:15 -07:00
parent 94ca52ae9e
commit c98201b5d8
3 changed files with 77 additions and 54 deletions

View File

@ -73,6 +73,9 @@
import java.util.Properties; import java.util.Properties;
import org.apache.hadoop.security.authentication.server.AuthenticationFilter; import org.apache.hadoop.security.authentication.server.AuthenticationFilter;
/**
* Main test class for HttpFSServer.
*/
public class TestHttpFSServer extends HFSTestCase { public class TestHttpFSServer extends HFSTestCase {
@Test @Test
@ -82,15 +85,20 @@ public void server() throws Exception {
String dir = TestDirHelper.getTestDir().getAbsolutePath(); String dir = TestDirHelper.getTestDir().getAbsolutePath();
Configuration httpfsConf = new Configuration(false); Configuration httpfsConf = new Configuration(false);
HttpFSServerWebApp server = new HttpFSServerWebApp(dir, dir, dir, dir, httpfsConf); HttpFSServerWebApp server = new HttpFSServerWebApp(dir, dir, dir, dir,
httpfsConf);
server.init(); server.init();
server.destroy(); server.destroy();
} }
public static class MockGroups implements Service,Groups { /**
* Mock groups.
*/
public static class MockGroups implements Service, Groups {
@Override @Override
public void init(org.apache.hadoop.lib.server.Server server) throws ServiceException { public void init(org.apache.hadoop.lib.server.Server server)
throws ServiceException {
} }
@Override @Override
@ -112,8 +120,10 @@ public Class getInterface() {
} }
@Override @Override
public void serverStatusChange(org.apache.hadoop.lib.server.Server.Status oldStatus, public void serverStatusChange(
org.apache.hadoop.lib.server.Server.Status newStatus) throws ServiceException { org.apache.hadoop.lib.server.Server.Status oldStatus,
org.apache.hadoop.lib.server.Server.Status newStatus)
throws ServiceException {
} }
@Override @Override
@ -300,25 +310,30 @@ public void instrumentation() throws Exception {
createHttpFSServer(false, false); createHttpFSServer(false, false);
URL url = new URL(TestJettyHelper.getJettyURL(), URL url = new URL(TestJettyHelper.getJettyURL(),
MessageFormat.format("/webhdfs/v1?user.name={0}&op=instrumentation", "nobody")); MessageFormat.format("/webhdfs/v1?user.name={0}&op=instrumentation",
"nobody"));
HttpURLConnection conn = (HttpURLConnection) url.openConnection(); HttpURLConnection conn = (HttpURLConnection) url.openConnection();
Assert.assertEquals(conn.getResponseCode(), HttpURLConnection.HTTP_UNAUTHORIZED); Assert.assertEquals(conn.getResponseCode(),
HttpURLConnection.HTTP_UNAUTHORIZED);
url = new URL(TestJettyHelper.getJettyURL(), url = new URL(TestJettyHelper.getJettyURL(),
MessageFormat.format("/webhdfs/v1?user.name={0}&op=instrumentation", MessageFormat.format("/webhdfs/v1?user.name={0}&op=instrumentation",
HadoopUsersConfTestHelper.getHadoopUsers()[0])); HadoopUsersConfTestHelper.getHadoopUsers()[0]));
conn = (HttpURLConnection) url.openConnection(); conn = (HttpURLConnection) url.openConnection();
Assert.assertEquals(conn.getResponseCode(), HttpURLConnection.HTTP_OK); Assert.assertEquals(conn.getResponseCode(), HttpURLConnection.HTTP_OK);
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); BufferedReader reader = new BufferedReader(
new InputStreamReader(conn.getInputStream()));
String line = reader.readLine(); String line = reader.readLine();
reader.close(); reader.close();
Assert.assertTrue(line.contains("\"counters\":{")); Assert.assertTrue(line.contains("\"counters\":{"));
url = new URL(TestJettyHelper.getJettyURL(), url = new URL(TestJettyHelper.getJettyURL(),
MessageFormat.format("/webhdfs/v1/foo?user.name={0}&op=instrumentation", MessageFormat.format(
"/webhdfs/v1/foo?user.name={0}&op=instrumentation",
HadoopUsersConfTestHelper.getHadoopUsers()[0])); HadoopUsersConfTestHelper.getHadoopUsers()[0]));
conn = (HttpURLConnection) url.openConnection(); conn = (HttpURLConnection) url.openConnection();
Assert.assertEquals(conn.getResponseCode(), HttpURLConnection.HTTP_BAD_REQUEST); Assert.assertEquals(conn.getResponseCode(),
HttpURLConnection.HTTP_BAD_REQUEST);
} }
@Test @Test
@ -330,10 +345,12 @@ public void testHdfsAccess() throws Exception {
String user = HadoopUsersConfTestHelper.getHadoopUsers()[0]; String user = HadoopUsersConfTestHelper.getHadoopUsers()[0];
URL url = new URL(TestJettyHelper.getJettyURL(), URL url = new URL(TestJettyHelper.getJettyURL(),
MessageFormat.format("/webhdfs/v1/?user.name={0}&op=liststatus", user)); MessageFormat.format("/webhdfs/v1/?user.name={0}&op=liststatus",
user));
HttpURLConnection conn = (HttpURLConnection) url.openConnection(); HttpURLConnection conn = (HttpURLConnection) url.openConnection();
Assert.assertEquals(conn.getResponseCode(), HttpURLConnection.HTTP_OK); Assert.assertEquals(conn.getResponseCode(), HttpURLConnection.HTTP_OK);
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); BufferedReader reader = new BufferedReader(
new InputStreamReader(conn.getInputStream()));
reader.readLine(); reader.readLine();
reader.close(); reader.close();
} }
@ -369,10 +386,12 @@ public void testGlobFilter() throws Exception {
String user = HadoopUsersConfTestHelper.getHadoopUsers()[0]; String user = HadoopUsersConfTestHelper.getHadoopUsers()[0];
URL url = new URL(TestJettyHelper.getJettyURL(), URL url = new URL(TestJettyHelper.getJettyURL(),
MessageFormat.format("/webhdfs/v1/tmp?user.name={0}&op=liststatus&filter=f*", user)); MessageFormat.format(
"/webhdfs/v1/tmp?user.name={0}&op=liststatus&filter=f*", user));
HttpURLConnection conn = (HttpURLConnection) url.openConnection(); HttpURLConnection conn = (HttpURLConnection) url.openConnection();
Assert.assertEquals(conn.getResponseCode(), HttpURLConnection.HTTP_OK); Assert.assertEquals(conn.getResponseCode(), HttpURLConnection.HTTP_OK);
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); BufferedReader reader = new BufferedReader(
new InputStreamReader(conn.getInputStream()));
reader.readLine(); reader.readLine();
reader.close(); reader.close();
} }
@ -384,15 +403,14 @@ public void testGlobFilter() throws Exception {
* @param perms The permission field, if any (may be null) * @param perms The permission field, if any (may be null)
* @throws Exception * @throws Exception
*/ */
private void createWithHttp ( String filename, String perms ) private void createWithHttp(String filename, String perms) throws Exception {
throws Exception {
String user = HadoopUsersConfTestHelper.getHadoopUsers()[0]; String user = HadoopUsersConfTestHelper.getHadoopUsers()[0];
// Remove leading / from filename // Remove leading / from filename
if ( filename.charAt(0) == '/' ) { if (filename.charAt(0) == '/') {
filename = filename.substring(1); filename = filename.substring(1);
} }
String pathOps; String pathOps;
if ( perms == null ) { if (perms == null) {
pathOps = MessageFormat.format( pathOps = MessageFormat.format(
"/webhdfs/v1/{0}?user.name={1}&op=CREATE", "/webhdfs/v1/{0}?user.name={1}&op=CREATE",
filename, user); filename, user);
@ -422,7 +440,7 @@ private String getStatus(String filename, String command)
throws Exception { throws Exception {
String user = HadoopUsersConfTestHelper.getHadoopUsers()[0]; String user = HadoopUsersConfTestHelper.getHadoopUsers()[0];
// Remove leading / from filename // Remove leading / from filename
if ( filename.charAt(0) == '/' ) { if (filename.charAt(0) == '/') {
filename = filename.substring(1); filename = filename.substring(1);
} }
String pathOps = MessageFormat.format( String pathOps = MessageFormat.format(
@ -449,7 +467,7 @@ private void putCmd(String filename, String command,
String params) throws Exception { String params) throws Exception {
String user = HadoopUsersConfTestHelper.getHadoopUsers()[0]; String user = HadoopUsersConfTestHelper.getHadoopUsers()[0];
// Remove leading / from filename // Remove leading / from filename
if ( filename.charAt(0) == '/' ) { if (filename.charAt(0) == '/') {
filename = filename.substring(1); filename = filename.substring(1);
} }
String pathOps = MessageFormat.format( String pathOps = MessageFormat.format(
@ -471,7 +489,7 @@ private void putCmd(String filename, String command,
* @return The value of 'permission' in statusJson * @return The value of 'permission' in statusJson
* @throws Exception * @throws Exception
*/ */
private String getPerms ( String statusJson ) throws Exception { private String getPerms(String statusJson) throws Exception {
JSONParser parser = new JSONParser(); JSONParser parser = new JSONParser();
JSONObject jsonObject = (JSONObject) parser.parse(statusJson); JSONObject jsonObject = (JSONObject) parser.parse(statusJson);
JSONObject details = (JSONObject) jsonObject.get("FileStatus"); JSONObject details = (JSONObject) jsonObject.get("FileStatus");
@ -499,13 +517,13 @@ private String getPath(String statusJson) throws Exception {
* @return A List of Strings which are the elements of the ACL entries * @return A List of Strings which are the elements of the ACL entries
* @throws Exception * @throws Exception
*/ */
private List<String> getAclEntries ( String statusJson ) throws Exception { private List<String> getAclEntries(String statusJson) throws Exception {
List<String> entries = new ArrayList<String>(); List<String> entries = new ArrayList<String>();
JSONParser parser = new JSONParser(); JSONParser parser = new JSONParser();
JSONObject jsonObject = (JSONObject) parser.parse(statusJson); JSONObject jsonObject = (JSONObject) parser.parse(statusJson);
JSONObject details = (JSONObject) jsonObject.get("AclStatus"); JSONObject details = (JSONObject) jsonObject.get("AclStatus");
JSONArray jsonEntries = (JSONArray) details.get("entries"); JSONArray jsonEntries = (JSONArray) details.get("entries");
if ( jsonEntries != null ) { if (jsonEntries != null) {
for (Object e : jsonEntries) { for (Object e : jsonEntries) {
entries.add(e.toString()); entries.add(e.toString());
} }
@ -534,7 +552,7 @@ private Map<String, byte[]> getXAttrs(String statusJson) throws Exception {
return xAttrs; return xAttrs;
} }
/** Decode xattr value from string */ /** Decode xattr value from string. */
private byte[] decodeXAttrValue(String value) throws IOException { private byte[] decodeXAttrValue(String value) throws IOException {
if (value != null) { if (value != null) {
return XAttrCodec.decodeValue(value); return XAttrCodec.decodeValue(value);
@ -595,7 +613,7 @@ public void testXAttrs() throws Exception {
FileSystem fs = FileSystem.get(TestHdfsHelper.getHdfsConf()); FileSystem fs = FileSystem.get(TestHdfsHelper.getHdfsConf());
fs.mkdirs(new Path(dir)); fs.mkdirs(new Path(dir));
createWithHttp(path,null); createWithHttp(path, null);
String statusJson = getStatus(path, "GETXATTRS"); String statusJson = getStatus(path, "GETXATTRS");
Map<String, byte[]> xAttrs = getXAttrs(statusJson); Map<String, byte[]> xAttrs = getXAttrs(statusJson);
Assert.assertEquals(0, xAttrs.size()); Assert.assertEquals(0, xAttrs.size());
@ -623,8 +641,9 @@ public void testXAttrs() throws Exception {
Assert.assertEquals(0, xAttrs.size()); Assert.assertEquals(0, xAttrs.size());
} }
/** Params for setting an xAttr */ /** Params for setting an xAttr. */
public static String setXAttrParam(String name, byte[] value) throws IOException { public static String setXAttrParam(String name, byte[] value)
throws IOException {
return "xattr.name=" + name + "&xattr.value=" + XAttrCodec.encodeValue( return "xattr.name=" + name + "&xattr.value=" + XAttrCodec.encodeValue(
value, XAttrCodec.HEX) + "&encoding=hex&flag=create"; value, XAttrCodec.HEX) + "&encoding=hex&flag=create";
} }
@ -791,7 +810,9 @@ public void testOpenOffsetLength() throws Exception {
String user = HadoopUsersConfTestHelper.getHadoopUsers()[0]; String user = HadoopUsersConfTestHelper.getHadoopUsers()[0];
URL url = new URL(TestJettyHelper.getJettyURL(), URL url = new URL(TestJettyHelper.getJettyURL(),
MessageFormat.format("/webhdfs/v1/tmp/foo?user.name={0}&op=open&offset=1&length=2", user)); MessageFormat.format(
"/webhdfs/v1/tmp/foo?user.name={0}&op=open&offset=1&length=2",
user));
HttpURLConnection conn = (HttpURLConnection) url.openConnection(); HttpURLConnection conn = (HttpURLConnection) url.openConnection();
Assert.assertEquals(HttpURLConnection.HTTP_OK, conn.getResponseCode()); Assert.assertEquals(HttpURLConnection.HTTP_OK, conn.getResponseCode());
InputStream is = conn.getInputStream(); InputStream is = conn.getInputStream();
@ -814,7 +835,8 @@ public void testPutNoOperation() throws Exception {
conn.setDoInput(true); conn.setDoInput(true);
conn.setDoOutput(true); conn.setDoOutput(true);
conn.setRequestMethod("PUT"); conn.setRequestMethod("PUT");
Assert.assertEquals(conn.getResponseCode(), HttpURLConnection.HTTP_BAD_REQUEST); Assert.assertEquals(conn.getResponseCode(),
HttpURLConnection.HTTP_BAD_REQUEST);
} }
@Test @Test

View File

@ -110,7 +110,7 @@ private void createHttpFSServer() throws Exception {
// HDFS configuration // HDFS configuration
File hadoopConfDir = new File(new File(homeDir, "conf"), "hadoop-conf"); File hadoopConfDir = new File(new File(homeDir, "conf"), "hadoop-conf");
if ( !hadoopConfDir.mkdirs() ) { if (!hadoopConfDir.mkdirs()) {
throw new IOException(); throw new IOException();
} }
@ -146,7 +146,7 @@ private void createHttpFSServer() throws Exception {
ClassLoader cl = Thread.currentThread().getContextClassLoader(); ClassLoader cl = Thread.currentThread().getContextClassLoader();
URL url = cl.getResource("webapp"); URL url = cl.getResource("webapp");
if ( url == null ) { if (url == null) {
throw new IOException(); throw new IOException();
} }
WebAppContext context = new WebAppContext(url.getPath(), "/webhdfs"); WebAppContext context = new WebAppContext(url.getPath(), "/webhdfs");
@ -168,7 +168,7 @@ private void getStatus(String filename, String command, boolean expectOK)
throws Exception { throws Exception {
String user = HadoopUsersConfTestHelper.getHadoopUsers()[0]; String user = HadoopUsersConfTestHelper.getHadoopUsers()[0];
// Remove leading / from filename // Remove leading / from filename
if ( filename.charAt(0) == '/' ) { if (filename.charAt(0) == '/') {
filename = filename.substring(1); filename = filename.substring(1);
} }
String pathOps = MessageFormat.format( String pathOps = MessageFormat.format(
@ -179,7 +179,7 @@ private void getStatus(String filename, String command, boolean expectOK)
conn.connect(); conn.connect();
int resp = conn.getResponseCode(); int resp = conn.getResponseCode();
BufferedReader reader; BufferedReader reader;
if ( expectOK ) { if (expectOK) {
Assert.assertEquals(HttpURLConnection.HTTP_OK, resp); Assert.assertEquals(HttpURLConnection.HTTP_OK, resp);
reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String res = reader.readLine(); String res = reader.readLine();
@ -204,7 +204,7 @@ private void putCmd(String filename, String command,
String params, boolean expectOK) throws Exception { String params, boolean expectOK) throws Exception {
String user = HadoopUsersConfTestHelper.getHadoopUsers()[0]; String user = HadoopUsersConfTestHelper.getHadoopUsers()[0];
// Remove leading / from filename // Remove leading / from filename
if ( filename.charAt(0) == '/' ) { if (filename.charAt(0) == '/') {
filename = filename.substring(1); filename = filename.substring(1);
} }
String pathOps = MessageFormat.format( String pathOps = MessageFormat.format(
@ -216,7 +216,7 @@ private void putCmd(String filename, String command,
conn.setRequestMethod("PUT"); conn.setRequestMethod("PUT");
conn.connect(); conn.connect();
int resp = conn.getResponseCode(); int resp = conn.getResponseCode();
if ( expectOK ) { if (expectOK) {
Assert.assertEquals(HttpURLConnection.HTTP_OK, resp); Assert.assertEquals(HttpURLConnection.HTTP_OK, resp);
} else { } else {
Assert.assertEquals(HttpURLConnection.HTTP_INTERNAL_ERROR, resp); Assert.assertEquals(HttpURLConnection.HTTP_INTERNAL_ERROR, resp);
@ -229,6 +229,7 @@ private void putCmd(String filename, String command,
} }
/** /**
* Test without ACLs.
* Ensure that * Ensure that
* <ol> * <ol>
* <li>GETFILESTATUS and LISTSTATUS work happily</li> * <li>GETFILESTATUS and LISTSTATUS work happily</li>

View File

@ -111,7 +111,7 @@ private void createHttpFSServer() throws Exception {
// HDFS configuration // HDFS configuration
File hadoopConfDir = new File(new File(homeDir, "conf"), "hadoop-conf"); File hadoopConfDir = new File(new File(homeDir, "conf"), "hadoop-conf");
if ( !hadoopConfDir.mkdirs() ) { if (!hadoopConfDir.mkdirs()) {
throw new IOException(); throw new IOException();
} }
@ -147,7 +147,7 @@ private void createHttpFSServer() throws Exception {
ClassLoader cl = Thread.currentThread().getContextClassLoader(); ClassLoader cl = Thread.currentThread().getContextClassLoader();
URL url = cl.getResource("webapp"); URL url = cl.getResource("webapp");
if ( url == null ) { if (url == null) {
throw new IOException(); throw new IOException();
} }
WebAppContext context = new WebAppContext(url.getPath(), "/webhdfs"); WebAppContext context = new WebAppContext(url.getPath(), "/webhdfs");
@ -168,7 +168,7 @@ private void getStatus(String filename, String command)
throws Exception { throws Exception {
String user = HadoopUsersConfTestHelper.getHadoopUsers()[0]; String user = HadoopUsersConfTestHelper.getHadoopUsers()[0];
// Remove leading / from filename // Remove leading / from filename
if ( filename.charAt(0) == '/' ) { if (filename.charAt(0) == '/') {
filename = filename.substring(1); filename = filename.substring(1);
} }
String pathOps = MessageFormat.format( String pathOps = MessageFormat.format(
@ -197,7 +197,7 @@ private void putCmd(String filename, String command,
String params) throws Exception { String params) throws Exception {
String user = HadoopUsersConfTestHelper.getHadoopUsers()[0]; String user = HadoopUsersConfTestHelper.getHadoopUsers()[0];
// Remove leading / from filename // Remove leading / from filename
if ( filename.charAt(0) == '/' ) { if (filename.charAt(0) == '/') {
filename = filename.substring(1); filename = filename.substring(1);
} }
String pathOps = MessageFormat.format( String pathOps = MessageFormat.format(