You are viewing a plain text version of this content. The canonical link for it is here.
Posted to mapreduce-commits@hadoop.apache.org by ss...@apache.org on 2012/10/19 20:59:07 UTC
svn commit: r1400227 [2/5] - in
/hadoop/common/branches/MR-3902/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app2/src/test/java/org/apache/hadoop/mapreduce/v2/app2:
./ job/impl/ webapp/
Modified: hadoop/common/branches/MR-3902/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app2/src/test/java/org/apache/hadoop/mapreduce/v2/app2/webapp/TestAMWebApp.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/MR-3902/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app2/src/test/java/org/apache/hadoop/mapreduce/v2/app2/webapp/TestAMWebApp.java?rev=1400227&r1=1400226&r2=1400227&view=diff
==============================================================================
--- hadoop/common/branches/MR-3902/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app2/src/test/java/org/apache/hadoop/mapreduce/v2/app2/webapp/TestAMWebApp.java (original)
+++ hadoop/common/branches/MR-3902/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app2/src/test/java/org/apache/hadoop/mapreduce/v2/app2/webapp/TestAMWebApp.java Fri Oct 19 18:59:06 2012
@@ -1,220 +1,220 @@
-///**
-//* Licensed to the Apache Software Foundation (ASF) under one
-//* or more contributor license agreements. See the NOTICE file
-//* distributed with this work for additional information
-//* regarding copyright ownership. The ASF licenses this file
-//* to you under the Apache License, Version 2.0 (the
-//* "License"); you may not use this file except in compliance
-//* with the License. You may obtain a copy of the License at
-//*
-//* http://www.apache.org/licenses/LICENSE-2.0
-//*
-//* Unless required by applicable law or agreed to in writing, software
-//* distributed under the License is distributed on an "AS IS" BASIS,
-//* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-//* See the License for the specific language governing permissions and
-//* limitations under the License.
-//*/
-//
-//package org.apache.hadoop.mapreduce.v2.app2.webapp;
-//
-//import static org.apache.hadoop.mapreduce.v2.app2.webapp.AMParams.APP_ID;
-//import static org.junit.Assert.assertEquals;
-//
-//import java.util.HashMap;
-//import java.util.Map;
-//import java.util.Map.Entry;
-//
-//import org.apache.hadoop.mapreduce.v2.api.records.JobId;
-//import org.apache.hadoop.mapreduce.v2.api.records.TaskId;
-//import org.apache.hadoop.mapreduce.v2.app2.AppContext;
-//import org.apache.hadoop.mapreduce.v2.app2.MockJobs;
-//import org.apache.hadoop.mapreduce.v2.app2.job.Job;
-//import org.apache.hadoop.mapreduce.v2.app2.job.Task;
-//import org.apache.hadoop.mapreduce.v2.app2.job.TaskAttempt;
-//import org.apache.hadoop.mapreduce.v2.util.MRApps;
-//import org.apache.hadoop.yarn.Clock;
-//import org.apache.hadoop.yarn.ClusterInfo;
-//import org.apache.hadoop.yarn.api.records.ApplicationAttemptId;
-//import org.apache.hadoop.yarn.api.records.ApplicationId;
-//import org.apache.hadoop.yarn.event.EventHandler;
-//import org.apache.hadoop.yarn.webapp.WebApps;
-//import org.apache.hadoop.yarn.webapp.test.WebAppTests;
-//import org.junit.Test;
-//
-//import com.google.inject.Injector;
-//
-//public class TestAMWebApp {
-//
-// static class TestAppContext implements AppContext {
-// final ApplicationAttemptId appAttemptID;
-// final ApplicationId appID;
-// final String user = MockJobs.newUserName();
-// final Map<JobId, Job> jobs;
-// final long startTime = System.currentTimeMillis();
-//
-// TestAppContext(int appid, int numJobs, int numTasks, int numAttempts) {
-// appID = MockJobs.newAppID(appid);
-// appAttemptID = MockJobs.newAppAttemptID(appID, 0);
-// jobs = MockJobs.newJobs(appID, numJobs, numTasks, numAttempts);
-// }
-//
-// TestAppContext() {
-// this(0, 1, 1, 1);
-// }
-//
-// @Override
-// public ApplicationAttemptId getApplicationAttemptId() {
-// return appAttemptID;
-// }
-//
-// @Override
-// public ApplicationId getApplicationID() {
-// return appID;
-// }
-//
-// @Override
-// public CharSequence getUser() {
-// return user;
-// }
-//
-// @Override
-// public Job getJob(JobId jobID) {
-// return jobs.get(jobID);
-// }
-//
-// @Override
-// public Map<JobId, Job> getAllJobs() {
-// return jobs; // OK
-// }
-//
-// @SuppressWarnings("rawtypes")
-// @Override
-// public EventHandler getEventHandler() {
-// return null;
-// }
-//
-// @Override
-// public Clock getClock() {
-// return null;
-// }
-//
-// @Override
-// public String getApplicationName() {
-// return "TestApp";
-// }
-//
-// @Override
-// public long getStartTime() {
-// return startTime;
-// }
-//
-// @Override
-// public ClusterInfo getClusterInfo() {
-// return null;
-// }
-// }
-//
-// @Test public void testAppControllerIndex() {
-// TestAppContext ctx = new TestAppContext();
-// Injector injector = WebAppTests.createMockInjector(AppContext.class, ctx);
-// AppController controller = injector.getInstance(AppController.class);
-// controller.index();
-// assertEquals(ctx.appID.toString(), controller.get(APP_ID,""));
-// }
-//
-// @Test public void testAppView() {
-// WebAppTests.testPage(AppView.class, AppContext.class, new TestAppContext());
-// }
-//
-//
-//
-// @Test public void testJobView() {
-// AppContext appContext = new TestAppContext();
-// Map<String, String> params = getJobParams(appContext);
-// WebAppTests.testPage(JobPage.class, AppContext.class, appContext, params);
-// }
-//
-// @Test public void testTasksView() {
-// AppContext appContext = new TestAppContext();
-// Map<String, String> params = getTaskParams(appContext);
-// WebAppTests.testPage(TasksPage.class, AppContext.class, appContext, params);
-// }
-//
-// @Test public void testTaskView() {
-// AppContext appContext = new TestAppContext();
-// Map<String, String> params = getTaskParams(appContext);
-// WebAppTests.testPage(TaskPage.class, AppContext.class, appContext, params);
-// }
-//
-// public static Map<String, String> getJobParams(AppContext appContext) {
-// JobId jobId = appContext.getAllJobs().entrySet().iterator().next().getKey();
-// Map<String, String> params = new HashMap<String, String>();
-// params.put(AMParams.JOB_ID, MRApps.toString(jobId));
-// return params;
-// }
-//
-// public static Map<String, String> getTaskParams(AppContext appContext) {
-// JobId jobId = appContext.getAllJobs().entrySet().iterator().next().getKey();
-// Entry<TaskId, Task> e = appContext.getJob(jobId).getTasks().entrySet().iterator().next();
-// e.getValue().getType();
-// Map<String, String> params = new HashMap<String, String>();
-// params.put(AMParams.JOB_ID, MRApps.toString(jobId));
-// params.put(AMParams.TASK_ID, MRApps.toString(e.getKey()));
-// params.put(AMParams.TASK_TYPE, MRApps.taskSymbol(e.getValue().getType()));
-// return params;
-// }
-//
-// @Test public void testConfView() {
-// WebAppTests.testPage(JobConfPage.class, AppContext.class,
-// new TestAppContext());
-// }
-//
-// @Test public void testCountersView() {
-// AppContext appContext = new TestAppContext();
-// Map<String, String> params = getJobParams(appContext);
-// WebAppTests.testPage(CountersPage.class, AppContext.class,
-// appContext, params);
-// }
-//
-// @Test public void testSingleCounterView() {
-// AppContext appContext = new TestAppContext();
-// Map<String, String> params = getJobParams(appContext);
-// params.put(AMParams.COUNTER_GROUP,
-// "org.apache.hadoop.mapreduce.FileSystemCounter");
-// params.put(AMParams.COUNTER_NAME, "HDFS_WRITE_OPS");
-// WebAppTests.testPage(SingleCounterPage.class, AppContext.class,
-// appContext, params);
-// }
-//
-// @Test public void testTaskCountersView() {
-// AppContext appContext = new TestAppContext();
-// Map<String, String> params = getTaskParams(appContext);
-// WebAppTests.testPage(CountersPage.class, AppContext.class,
-// appContext, params);
-// }
-//
-// @Test public void testSingleTaskCounterView() {
-// AppContext appContext = new TestAppContext(0, 1, 1, 2);
-// Map<String, String> params = getTaskParams(appContext);
-// params.put(AMParams.COUNTER_GROUP,
-// "org.apache.hadoop.mapreduce.FileSystemCounter");
-// params.put(AMParams.COUNTER_NAME, "HDFS_WRITE_OPS");
-//
-// // remove counters from one task attempt
-// // to test handling of missing counters
-// TaskId taskID = MRApps.toTaskID(params.get(AMParams.TASK_ID));
-// Job job = appContext.getJob(taskID.getJobId());
-// Task task = job.getTask(taskID);
-// TaskAttempt attempt = task.getAttempts().values().iterator().next();
-// attempt.getReport().setCounters(null);
-//
-// WebAppTests.testPage(SingleCounterPage.class, AppContext.class,
-// appContext, params);
-// }
-//
-// public static void main(String[] args) {
-// WebApps.$for("yarn", AppContext.class, new TestAppContext(0, 8, 88, 4)).
-// at(58888).inDevMode().start(new AMWebApp()).joinThread();
-// }
-//}
+/**
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements. See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership. The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License. You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package org.apache.hadoop.mapreduce.v2.app2.webapp;
+
+import static org.apache.hadoop.mapreduce.v2.app2.webapp.AMParams.APP_ID;
+import static org.junit.Assert.assertEquals;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.apache.hadoop.mapreduce.v2.api.records.JobId;
+import org.apache.hadoop.mapreduce.v2.api.records.TaskId;
+import org.apache.hadoop.mapreduce.v2.app2.AppContext;
+import org.apache.hadoop.mapreduce.v2.app2.MockJobs;
+import org.apache.hadoop.mapreduce.v2.app2.job.Job;
+import org.apache.hadoop.mapreduce.v2.app2.job.Task;
+import org.apache.hadoop.mapreduce.v2.app2.job.TaskAttempt;
+import org.apache.hadoop.mapreduce.v2.util.MRApps;
+import org.apache.hadoop.yarn.Clock;
+import org.apache.hadoop.yarn.ClusterInfo;
+import org.apache.hadoop.yarn.api.records.ApplicationAttemptId;
+import org.apache.hadoop.yarn.api.records.ApplicationId;
+import org.apache.hadoop.yarn.event.EventHandler;
+import org.apache.hadoop.yarn.webapp.WebApps;
+import org.apache.hadoop.yarn.webapp.test.WebAppTests;
+import org.junit.Test;
+
+import com.google.inject.Injector;
+
+public class TestAMWebApp {
+
+ static class TestAppContext implements AppContext {
+ final ApplicationAttemptId appAttemptID;
+ final ApplicationId appID;
+ final String user = MockJobs.newUserName();
+ final Map<JobId, Job> jobs;
+ final long startTime = System.currentTimeMillis();
+
+ TestAppContext(int appid, int numJobs, int numTasks, int numAttempts) {
+ appID = MockJobs.newAppID(appid);
+ appAttemptID = MockJobs.newAppAttemptID(appID, 0);
+ jobs = MockJobs.newJobs(appID, numJobs, numTasks, numAttempts);
+ }
+
+ TestAppContext() {
+ this(0, 1, 1, 1);
+ }
+
+ @Override
+ public ApplicationAttemptId getApplicationAttemptId() {
+ return appAttemptID;
+ }
+
+ @Override
+ public ApplicationId getApplicationID() {
+ return appID;
+ }
+
+ @Override
+ public CharSequence getUser() {
+ return user;
+ }
+
+ @Override
+ public Job getJob(JobId jobID) {
+ return jobs.get(jobID);
+ }
+
+ @Override
+ public Map<JobId, Job> getAllJobs() {
+ return jobs; // OK
+ }
+
+ @SuppressWarnings("rawtypes")
+ @Override
+ public EventHandler getEventHandler() {
+ return null;
+ }
+
+ @Override
+ public Clock getClock() {
+ return null;
+ }
+
+ @Override
+ public String getApplicationName() {
+ return "TestApp";
+ }
+
+ @Override
+ public long getStartTime() {
+ return startTime;
+ }
+
+ @Override
+ public ClusterInfo getClusterInfo() {
+ return null;
+ }
+ }
+
+ @Test public void testAppControllerIndex() {
+ TestAppContext ctx = new TestAppContext();
+ Injector injector = WebAppTests.createMockInjector(AppContext.class, ctx);
+ AppController controller = injector.getInstance(AppController.class);
+ controller.index();
+ assertEquals(ctx.appID.toString(), controller.get(APP_ID,""));
+ }
+
+ @Test public void testAppView() {
+ WebAppTests.testPage(AppView.class, AppContext.class, new TestAppContext());
+ }
+
+
+
+ @Test public void testJobView() {
+ AppContext appContext = new TestAppContext();
+ Map<String, String> params = getJobParams(appContext);
+ WebAppTests.testPage(JobPage.class, AppContext.class, appContext, params);
+ }
+
+ @Test public void testTasksView() {
+ AppContext appContext = new TestAppContext();
+ Map<String, String> params = getTaskParams(appContext);
+ WebAppTests.testPage(TasksPage.class, AppContext.class, appContext, params);
+ }
+
+ @Test public void testTaskView() {
+ AppContext appContext = new TestAppContext();
+ Map<String, String> params = getTaskParams(appContext);
+ WebAppTests.testPage(TaskPage.class, AppContext.class, appContext, params);
+ }
+
+ public static Map<String, String> getJobParams(AppContext appContext) {
+ JobId jobId = appContext.getAllJobs().entrySet().iterator().next().getKey();
+ Map<String, String> params = new HashMap<String, String>();
+ params.put(AMParams.JOB_ID, MRApps.toString(jobId));
+ return params;
+ }
+
+ public static Map<String, String> getTaskParams(AppContext appContext) {
+ JobId jobId = appContext.getAllJobs().entrySet().iterator().next().getKey();
+ Entry<TaskId, Task> e = appContext.getJob(jobId).getTasks().entrySet().iterator().next();
+ e.getValue().getType();
+ Map<String, String> params = new HashMap<String, String>();
+ params.put(AMParams.JOB_ID, MRApps.toString(jobId));
+ params.put(AMParams.TASK_ID, MRApps.toString(e.getKey()));
+ params.put(AMParams.TASK_TYPE, MRApps.taskSymbol(e.getValue().getType()));
+ return params;
+ }
+
+ @Test public void testConfView() {
+ WebAppTests.testPage(JobConfPage.class, AppContext.class,
+ new TestAppContext());
+ }
+
+ @Test public void testCountersView() {
+ AppContext appContext = new TestAppContext();
+ Map<String, String> params = getJobParams(appContext);
+ WebAppTests.testPage(CountersPage.class, AppContext.class,
+ appContext, params);
+ }
+
+ @Test public void testSingleCounterView() {
+ AppContext appContext = new TestAppContext();
+ Map<String, String> params = getJobParams(appContext);
+ params.put(AMParams.COUNTER_GROUP,
+ "org.apache.hadoop.mapreduce.FileSystemCounter");
+ params.put(AMParams.COUNTER_NAME, "HDFS_WRITE_OPS");
+ WebAppTests.testPage(SingleCounterPage.class, AppContext.class,
+ appContext, params);
+ }
+
+ @Test public void testTaskCountersView() {
+ AppContext appContext = new TestAppContext();
+ Map<String, String> params = getTaskParams(appContext);
+ WebAppTests.testPage(CountersPage.class, AppContext.class,
+ appContext, params);
+ }
+
+ @Test public void testSingleTaskCounterView() {
+ AppContext appContext = new TestAppContext(0, 1, 1, 2);
+ Map<String, String> params = getTaskParams(appContext);
+ params.put(AMParams.COUNTER_GROUP,
+ "org.apache.hadoop.mapreduce.FileSystemCounter");
+ params.put(AMParams.COUNTER_NAME, "HDFS_WRITE_OPS");
+
+ // remove counters from one task attempt
+ // to test handling of missing counters
+ TaskId taskID = MRApps.toTaskID(params.get(AMParams.TASK_ID));
+ Job job = appContext.getJob(taskID.getJobId());
+ Task task = job.getTask(taskID);
+ TaskAttempt attempt = task.getAttempts().values().iterator().next();
+ attempt.getReport().setCounters(null);
+
+ WebAppTests.testPage(SingleCounterPage.class, AppContext.class,
+ appContext, params);
+ }
+
+ public static void main(String[] args) {
+ WebApps.$for("yarn", AppContext.class, new TestAppContext(0, 8, 88, 4)).
+ at(58888).inDevMode().start(new AMWebApp()).joinThread();
+ }
+}
Modified: hadoop/common/branches/MR-3902/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app2/src/test/java/org/apache/hadoop/mapreduce/v2/app2/webapp/TestAMWebServices.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/MR-3902/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app2/src/test/java/org/apache/hadoop/mapreduce/v2/app2/webapp/TestAMWebServices.java?rev=1400227&r1=1400226&r2=1400227&view=diff
==============================================================================
--- hadoop/common/branches/MR-3902/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app2/src/test/java/org/apache/hadoop/mapreduce/v2/app2/webapp/TestAMWebServices.java (original)
+++ hadoop/common/branches/MR-3902/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app2/src/test/java/org/apache/hadoop/mapreduce/v2/app2/webapp/TestAMWebServices.java Fri Oct 19 18:59:06 2012
@@ -1,365 +1,365 @@
-///**
-// * Licensed to the Apache Software Foundation (ASF) under one
-// * or more contributor license agreements. See the NOTICE file
-// * distributed with this work for additional information
-// * regarding copyright ownership. The ASF licenses this file
-// * to you under the Apache License, Version 2.0 (the
-// * "License"); you may not use this file except in compliance
-// * with the License. You may obtain a copy of the License at
-// *
-// * http://www.apache.org/licenses/LICENSE-2.0
-// *
-// * Unless required by applicable law or agreed to in writing, software
-// * distributed under the License is distributed on an "AS IS" BASIS,
-// * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// * See the License for the specific language governing permissions and
-// * limitations under the License.
-// */
-//
-//package org.apache.hadoop.mapreduce.v2.app2.webapp;
-//
-//import static org.junit.Assert.assertEquals;
-//import static org.junit.Assert.assertTrue;
-//import static org.junit.Assert.fail;
-//
-//import java.io.StringReader;
-//import java.util.Map;
-//
-//import javax.ws.rs.core.MediaType;
-//import javax.xml.parsers.DocumentBuilder;
-//import javax.xml.parsers.DocumentBuilderFactory;
-//
-//import org.apache.hadoop.conf.Configuration;
-//import org.apache.hadoop.mapreduce.v2.api.records.JobId;
-//import org.apache.hadoop.mapreduce.v2.app2.AppContext;
-//import org.apache.hadoop.mapreduce.v2.app2.MockJobs;
-//import org.apache.hadoop.mapreduce.v2.app2.job.Job;
-//import org.apache.hadoop.yarn.Clock;
-//import org.apache.hadoop.yarn.ClusterInfo;
-//import org.apache.hadoop.yarn.api.records.ApplicationAttemptId;
-//import org.apache.hadoop.yarn.api.records.ApplicationId;
-//import org.apache.hadoop.yarn.event.EventHandler;
-//import org.apache.hadoop.yarn.webapp.GenericExceptionHandler;
-//import org.apache.hadoop.yarn.webapp.WebServicesTestUtils;
-//import org.codehaus.jettison.json.JSONException;
-//import org.codehaus.jettison.json.JSONObject;
-//import org.junit.Before;
-//import org.junit.Test;
-//import org.w3c.dom.Document;
-//import org.w3c.dom.Element;
-//import org.w3c.dom.NodeList;
-//import org.xml.sax.InputSource;
-//
-//import com.google.inject.Guice;
-//import com.google.inject.Injector;
-//import com.google.inject.servlet.GuiceServletContextListener;
-//import com.google.inject.servlet.ServletModule;
-//import com.sun.jersey.api.client.ClientResponse;
-//import com.sun.jersey.api.client.ClientResponse.Status;
-//import com.sun.jersey.api.client.UniformInterfaceException;
-//import com.sun.jersey.api.client.WebResource;
-//import com.sun.jersey.guice.spi.container.servlet.GuiceContainer;
-//import com.sun.jersey.test.framework.JerseyTest;
-//import com.sun.jersey.test.framework.WebAppDescriptor;
-//
-///**
-// * Test the MapReduce Application master info web services api's. Also test
-// * non-existent urls.
-// *
-// * /ws/v1/mapreduce
-// * /ws/v1/mapreduce/info
-// */
-//public class TestAMWebServices extends JerseyTest {
-//
-// private static Configuration conf = new Configuration();
-// private static TestAppContext appContext;
-//
-// static class TestAppContext implements AppContext {
-// final ApplicationAttemptId appAttemptID;
-// final ApplicationId appID;
-// final String user = MockJobs.newUserName();
-// final Map<JobId, Job> jobs;
-// final long startTime = System.currentTimeMillis();
-//
-// TestAppContext(int appid, int numJobs, int numTasks, int numAttempts) {
-// appID = MockJobs.newAppID(appid);
-// appAttemptID = MockJobs.newAppAttemptID(appID, 0);
-// jobs = MockJobs.newJobs(appID, numJobs, numTasks, numAttempts);
-// }
-//
-// TestAppContext() {
-// this(0, 1, 1, 1);
-// }
-//
-// @Override
-// public ApplicationAttemptId getApplicationAttemptId() {
-// return appAttemptID;
-// }
-//
-// @Override
-// public ApplicationId getApplicationID() {
-// return appID;
-// }
-//
-// @Override
-// public CharSequence getUser() {
-// return user;
-// }
-//
-// @Override
-// public Job getJob(JobId jobID) {
-// return jobs.get(jobID);
-// }
-//
-// @Override
-// public Map<JobId, Job> getAllJobs() {
-// return jobs; // OK
-// }
-//
-// @SuppressWarnings("rawtypes")
-// @Override
-// public EventHandler getEventHandler() {
-// return null;
-// }
-//
-// @Override
-// public Clock getClock() {
-// return null;
-// }
-//
-// @Override
-// public String getApplicationName() {
-// return "TestApp";
-// }
-//
-// @Override
-// public long getStartTime() {
-// return startTime;
-// }
-//
-// @Override
-// public ClusterInfo getClusterInfo() {
-// return null;
-// }
-// }
-//
-// private Injector injector = Guice.createInjector(new ServletModule() {
-// @Override
-// protected void configureServlets() {
-//
-// appContext = new TestAppContext();
-// bind(JAXBContextResolver.class);
-// bind(AMWebServices.class);
-// bind(GenericExceptionHandler.class);
-// bind(AppContext.class).toInstance(appContext);
-// bind(Configuration.class).toInstance(conf);
-//
-// serve("/*").with(GuiceContainer.class);
-// }
-// });
-//
-// public class GuiceServletConfig extends GuiceServletContextListener {
-//
-// @Override
-// protected Injector getInjector() {
-// return injector;
-// }
-// }
-//
-// @Before
-// @Override
-// public void setUp() throws Exception {
-// super.setUp();
-// }
-//
-// public TestAMWebServices() {
-// super(new WebAppDescriptor.Builder(
-// "org.apache.hadoop.mapreduce.v2.app2.webapp")
-// .contextListenerClass(GuiceServletConfig.class)
-// .filterClass(com.google.inject.servlet.GuiceFilter.class)
-// .contextPath("jersey-guice-filter").servletPath("/").build());
-// }
-//
-// @Test
-// public void testAM() throws JSONException, Exception {
-// WebResource r = resource();
-// ClientResponse response = r.path("ws").path("v1").path("mapreduce")
-// .accept(MediaType.APPLICATION_JSON).get(ClientResponse.class);
-// assertEquals(MediaType.APPLICATION_JSON_TYPE, response.getType());
-// JSONObject json = response.getEntity(JSONObject.class);
-// assertEquals("incorrect number of elements", 1, json.length());
-// verifyAMInfo(json.getJSONObject("info"), appContext);
-// }
-//
-// @Test
-// public void testAMSlash() throws JSONException, Exception {
-// WebResource r = resource();
-// ClientResponse response = r.path("ws").path("v1").path("mapreduce/")
-// .accept(MediaType.APPLICATION_JSON).get(ClientResponse.class);
-// assertEquals(MediaType.APPLICATION_JSON_TYPE, response.getType());
-// JSONObject json = response.getEntity(JSONObject.class);
-// assertEquals("incorrect number of elements", 1, json.length());
-// verifyAMInfo(json.getJSONObject("info"), appContext);
-// }
-//
-// @Test
-// public void testAMDefault() throws JSONException, Exception {
-// WebResource r = resource();
-// ClientResponse response = r.path("ws").path("v1").path("mapreduce/")
-// .get(ClientResponse.class);
-// assertEquals(MediaType.APPLICATION_JSON_TYPE, response.getType());
-// JSONObject json = response.getEntity(JSONObject.class);
-// assertEquals("incorrect number of elements", 1, json.length());
-// verifyAMInfo(json.getJSONObject("info"), appContext);
-// }
-//
-// @Test
-// public void testAMXML() throws JSONException, Exception {
-// WebResource r = resource();
-// ClientResponse response = r.path("ws").path("v1").path("mapreduce")
-// .accept(MediaType.APPLICATION_XML).get(ClientResponse.class);
-// assertEquals(MediaType.APPLICATION_XML_TYPE, response.getType());
-// String xml = response.getEntity(String.class);
-// verifyAMInfoXML(xml, appContext);
-// }
-//
-// @Test
-// public void testInfo() throws JSONException, Exception {
-// WebResource r = resource();
-// ClientResponse response = r.path("ws").path("v1").path("mapreduce")
-// .path("info").accept(MediaType.APPLICATION_JSON)
-// .get(ClientResponse.class);
-// assertEquals(MediaType.APPLICATION_JSON_TYPE, response.getType());
-// JSONObject json = response.getEntity(JSONObject.class);
-// assertEquals("incorrect number of elements", 1, json.length());
-// verifyAMInfo(json.getJSONObject("info"), appContext);
-// }
-//
-// @Test
-// public void testInfoSlash() throws JSONException, Exception {
-// WebResource r = resource();
-// ClientResponse response = r.path("ws").path("v1").path("mapreduce")
-// .path("info/").accept(MediaType.APPLICATION_JSON)
-// .get(ClientResponse.class);
-// assertEquals(MediaType.APPLICATION_JSON_TYPE, response.getType());
-// JSONObject json = response.getEntity(JSONObject.class);
-// assertEquals("incorrect number of elements", 1, json.length());
-// verifyAMInfo(json.getJSONObject("info"), appContext);
-// }
-//
-// @Test
-// public void testInfoDefault() throws JSONException, Exception {
-// WebResource r = resource();
-// ClientResponse response = r.path("ws").path("v1").path("mapreduce")
-// .path("info/").get(ClientResponse.class);
-// assertEquals(MediaType.APPLICATION_JSON_TYPE, response.getType());
-// JSONObject json = response.getEntity(JSONObject.class);
-// assertEquals("incorrect number of elements", 1, json.length());
-// verifyAMInfo(json.getJSONObject("info"), appContext);
-// }
-//
-// @Test
-// public void testInfoXML() throws JSONException, Exception {
-// WebResource r = resource();
-// ClientResponse response = r.path("ws").path("v1").path("mapreduce")
-// .path("info/").accept(MediaType.APPLICATION_XML)
-// .get(ClientResponse.class);
-// assertEquals(MediaType.APPLICATION_XML_TYPE, response.getType());
-// String xml = response.getEntity(String.class);
-// verifyAMInfoXML(xml, appContext);
-// }
-//
-// @Test
-// public void testInvalidUri() throws JSONException, Exception {
-// WebResource r = resource();
-// String responseStr = "";
-// try {
-// responseStr = r.path("ws").path("v1").path("mapreduce").path("bogus")
-// .accept(MediaType.APPLICATION_JSON).get(String.class);
-// fail("should have thrown exception on invalid uri");
-// } catch (UniformInterfaceException ue) {
-// ClientResponse response = ue.getResponse();
-// assertEquals(Status.NOT_FOUND, response.getClientResponseStatus());
-// WebServicesTestUtils.checkStringMatch(
-// "error string exists and shouldn't", "", responseStr);
-// }
-// }
-//
-// @Test
-// public void testInvalidUri2() throws JSONException, Exception {
-// WebResource r = resource();
-// String responseStr = "";
-// try {
-// responseStr = r.path("ws").path("v1").path("invalid")
-// .accept(MediaType.APPLICATION_JSON).get(String.class);
-// fail("should have thrown exception on invalid uri");
-// } catch (UniformInterfaceException ue) {
-// ClientResponse response = ue.getResponse();
-// assertEquals(Status.NOT_FOUND, response.getClientResponseStatus());
-// WebServicesTestUtils.checkStringMatch(
-// "error string exists and shouldn't", "", responseStr);
-// }
-// }
-//
-// @Test
-// public void testInvalidAccept() throws JSONException, Exception {
-// WebResource r = resource();
-// String responseStr = "";
-// try {
-// responseStr = r.path("ws").path("v1").path("mapreduce")
-// .accept(MediaType.TEXT_PLAIN).get(String.class);
-// fail("should have thrown exception on invalid uri");
-// } catch (UniformInterfaceException ue) {
-// ClientResponse response = ue.getResponse();
-// assertEquals(Status.INTERNAL_SERVER_ERROR,
-// response.getClientResponseStatus());
-// WebServicesTestUtils.checkStringMatch(
-// "error string exists and shouldn't", "", responseStr);
-// }
-// }
-//
-// public void verifyAMInfo(JSONObject info, TestAppContext ctx)
-// throws JSONException {
-// assertEquals("incorrect number of elements", 5, info.length());
-//
-// verifyAMInfoGeneric(ctx, info.getString("appId"), info.getString("user"),
-// info.getString("name"), info.getLong("startedOn"),
-// info.getLong("elapsedTime"));
-// }
-//
-// public void verifyAMInfoXML(String xml, TestAppContext ctx)
-// throws JSONException, Exception {
-// DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
-// DocumentBuilder db = dbf.newDocumentBuilder();
-// InputSource is = new InputSource();
-// is.setCharacterStream(new StringReader(xml));
-// Document dom = db.parse(is);
-// NodeList nodes = dom.getElementsByTagName("info");
-// assertEquals("incorrect number of elements", 1, nodes.getLength());
-//
-// for (int i = 0; i < nodes.getLength(); i++) {
-// Element element = (Element) nodes.item(i);
-// verifyAMInfoGeneric(ctx,
-// WebServicesTestUtils.getXmlString(element, "appId"),
-// WebServicesTestUtils.getXmlString(element, "user"),
-// WebServicesTestUtils.getXmlString(element, "name"),
-// WebServicesTestUtils.getXmlLong(element, "startedOn"),
-// WebServicesTestUtils.getXmlLong(element, "elapsedTime"));
-// }
-// }
-//
-// public void verifyAMInfoGeneric(TestAppContext ctx, String id, String user,
-// String name, long startedOn, long elapsedTime) {
-//
-// WebServicesTestUtils.checkStringMatch("id", ctx.getApplicationID()
-// .toString(), id);
-// WebServicesTestUtils.checkStringMatch("user", ctx.getUser().toString(),
-// user);
-// WebServicesTestUtils.checkStringMatch("name", ctx.getApplicationName(),
-// name);
-//
-// assertEquals("startedOn incorrect", ctx.getStartTime(), startedOn);
-// assertTrue("elapsedTime not greater then 0", (elapsedTime > 0));
-//
-// }
-//}
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.mapreduce.v2.app2.webapp;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.StringReader;
+import java.util.Map;
+
+import javax.ws.rs.core.MediaType;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.mapreduce.v2.api.records.JobId;
+import org.apache.hadoop.mapreduce.v2.app2.AppContext;
+import org.apache.hadoop.mapreduce.v2.app2.MockJobs;
+import org.apache.hadoop.mapreduce.v2.app2.job.Job;
+import org.apache.hadoop.yarn.Clock;
+import org.apache.hadoop.yarn.ClusterInfo;
+import org.apache.hadoop.yarn.api.records.ApplicationAttemptId;
+import org.apache.hadoop.yarn.api.records.ApplicationId;
+import org.apache.hadoop.yarn.event.EventHandler;
+import org.apache.hadoop.yarn.webapp.GenericExceptionHandler;
+import org.apache.hadoop.yarn.webapp.WebServicesTestUtils;
+import org.codehaus.jettison.json.JSONException;
+import org.codehaus.jettison.json.JSONObject;
+import org.junit.Before;
+import org.junit.Test;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+import org.xml.sax.InputSource;
+
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+import com.google.inject.servlet.GuiceServletContextListener;
+import com.google.inject.servlet.ServletModule;
+import com.sun.jersey.api.client.ClientResponse;
+import com.sun.jersey.api.client.ClientResponse.Status;
+import com.sun.jersey.api.client.UniformInterfaceException;
+import com.sun.jersey.api.client.WebResource;
+import com.sun.jersey.guice.spi.container.servlet.GuiceContainer;
+import com.sun.jersey.test.framework.JerseyTest;
+import com.sun.jersey.test.framework.WebAppDescriptor;
+
+/**
+ * Test the MapReduce Application master info web services api's. Also test
+ * non-existent urls.
+ *
+ * /ws/v1/mapreduce
+ * /ws/v1/mapreduce/info
+ */
+public class TestAMWebServices extends JerseyTest {
+
+ private static Configuration conf = new Configuration();
+ private static TestAppContext appContext;
+
+ static class TestAppContext implements AppContext {
+ final ApplicationAttemptId appAttemptID;
+ final ApplicationId appID;
+ final String user = MockJobs.newUserName();
+ final Map<JobId, Job> jobs;
+ final long startTime = System.currentTimeMillis();
+
+ TestAppContext(int appid, int numJobs, int numTasks, int numAttempts) {
+ appID = MockJobs.newAppID(appid);
+ appAttemptID = MockJobs.newAppAttemptID(appID, 0);
+ jobs = MockJobs.newJobs(appID, numJobs, numTasks, numAttempts);
+ }
+
+ TestAppContext() {
+ this(0, 1, 1, 1);
+ }
+
+ @Override
+ public ApplicationAttemptId getApplicationAttemptId() {
+ return appAttemptID;
+ }
+
+ @Override
+ public ApplicationId getApplicationID() {
+ return appID;
+ }
+
+ @Override
+ public CharSequence getUser() {
+ return user;
+ }
+
+ @Override
+ public Job getJob(JobId jobID) {
+ return jobs.get(jobID);
+ }
+
+ @Override
+ public Map<JobId, Job> getAllJobs() {
+ return jobs; // OK
+ }
+
+ @SuppressWarnings("rawtypes")
+ @Override
+ public EventHandler getEventHandler() {
+ return null;
+ }
+
+ @Override
+ public Clock getClock() {
+ return null;
+ }
+
+ @Override
+ public String getApplicationName() {
+ return "TestApp";
+ }
+
+ @Override
+ public long getStartTime() {
+ return startTime;
+ }
+
+ @Override
+ public ClusterInfo getClusterInfo() {
+ return null;
+ }
+ }
+
+ private Injector injector = Guice.createInjector(new ServletModule() {
+ @Override
+ protected void configureServlets() {
+
+ appContext = new TestAppContext();
+ bind(JAXBContextResolver.class);
+ bind(AMWebServices.class);
+ bind(GenericExceptionHandler.class);
+ bind(AppContext.class).toInstance(appContext);
+ bind(Configuration.class).toInstance(conf);
+
+ serve("/*").with(GuiceContainer.class);
+ }
+ });
+
+ public class GuiceServletConfig extends GuiceServletContextListener {
+
+ @Override
+ protected Injector getInjector() {
+ return injector;
+ }
+ }
+
+ @Before
+ @Override
+ public void setUp() throws Exception {
+ super.setUp();
+ }
+
+ public TestAMWebServices() {
+ super(new WebAppDescriptor.Builder(
+ "org.apache.hadoop.mapreduce.v2.app2.webapp")
+ .contextListenerClass(GuiceServletConfig.class)
+ .filterClass(com.google.inject.servlet.GuiceFilter.class)
+ .contextPath("jersey-guice-filter").servletPath("/").build());
+ }
+
+ @Test
+ public void testAM() throws JSONException, Exception {
+ WebResource r = resource();
+ ClientResponse response = r.path("ws").path("v1").path("mapreduce")
+ .accept(MediaType.APPLICATION_JSON).get(ClientResponse.class);
+ assertEquals(MediaType.APPLICATION_JSON_TYPE, response.getType());
+ JSONObject json = response.getEntity(JSONObject.class);
+ assertEquals("incorrect number of elements", 1, json.length());
+ verifyAMInfo(json.getJSONObject("info"), appContext);
+ }
+
+ @Test
+ public void testAMSlash() throws JSONException, Exception {
+ WebResource r = resource();
+ ClientResponse response = r.path("ws").path("v1").path("mapreduce/")
+ .accept(MediaType.APPLICATION_JSON).get(ClientResponse.class);
+ assertEquals(MediaType.APPLICATION_JSON_TYPE, response.getType());
+ JSONObject json = response.getEntity(JSONObject.class);
+ assertEquals("incorrect number of elements", 1, json.length());
+ verifyAMInfo(json.getJSONObject("info"), appContext);
+ }
+
+ @Test
+ public void testAMDefault() throws JSONException, Exception {
+ WebResource r = resource();
+ ClientResponse response = r.path("ws").path("v1").path("mapreduce/")
+ .get(ClientResponse.class);
+ assertEquals(MediaType.APPLICATION_JSON_TYPE, response.getType());
+ JSONObject json = response.getEntity(JSONObject.class);
+ assertEquals("incorrect number of elements", 1, json.length());
+ verifyAMInfo(json.getJSONObject("info"), appContext);
+ }
+
+ @Test
+ public void testAMXML() throws JSONException, Exception {
+ WebResource r = resource();
+ ClientResponse response = r.path("ws").path("v1").path("mapreduce")
+ .accept(MediaType.APPLICATION_XML).get(ClientResponse.class);
+ assertEquals(MediaType.APPLICATION_XML_TYPE, response.getType());
+ String xml = response.getEntity(String.class);
+ verifyAMInfoXML(xml, appContext);
+ }
+
+ @Test
+ public void testInfo() throws JSONException, Exception {
+ WebResource r = resource();
+ ClientResponse response = r.path("ws").path("v1").path("mapreduce")
+ .path("info").accept(MediaType.APPLICATION_JSON)
+ .get(ClientResponse.class);
+ assertEquals(MediaType.APPLICATION_JSON_TYPE, response.getType());
+ JSONObject json = response.getEntity(JSONObject.class);
+ assertEquals("incorrect number of elements", 1, json.length());
+ verifyAMInfo(json.getJSONObject("info"), appContext);
+ }
+
+ @Test
+ public void testInfoSlash() throws JSONException, Exception {
+ WebResource r = resource();
+ ClientResponse response = r.path("ws").path("v1").path("mapreduce")
+ .path("info/").accept(MediaType.APPLICATION_JSON)
+ .get(ClientResponse.class);
+ assertEquals(MediaType.APPLICATION_JSON_TYPE, response.getType());
+ JSONObject json = response.getEntity(JSONObject.class);
+ assertEquals("incorrect number of elements", 1, json.length());
+ verifyAMInfo(json.getJSONObject("info"), appContext);
+ }
+
+ @Test
+ public void testInfoDefault() throws JSONException, Exception {
+ WebResource r = resource();
+ ClientResponse response = r.path("ws").path("v1").path("mapreduce")
+ .path("info/").get(ClientResponse.class);
+ assertEquals(MediaType.APPLICATION_JSON_TYPE, response.getType());
+ JSONObject json = response.getEntity(JSONObject.class);
+ assertEquals("incorrect number of elements", 1, json.length());
+ verifyAMInfo(json.getJSONObject("info"), appContext);
+ }
+
+ @Test
+ public void testInfoXML() throws JSONException, Exception {
+ WebResource r = resource();
+ ClientResponse response = r.path("ws").path("v1").path("mapreduce")
+ .path("info/").accept(MediaType.APPLICATION_XML)
+ .get(ClientResponse.class);
+ assertEquals(MediaType.APPLICATION_XML_TYPE, response.getType());
+ String xml = response.getEntity(String.class);
+ verifyAMInfoXML(xml, appContext);
+ }
+
+ @Test
+ public void testInvalidUri() throws JSONException, Exception {
+ WebResource r = resource();
+ String responseStr = "";
+ try {
+ responseStr = r.path("ws").path("v1").path("mapreduce").path("bogus")
+ .accept(MediaType.APPLICATION_JSON).get(String.class);
+ fail("should have thrown exception on invalid uri");
+ } catch (UniformInterfaceException ue) {
+ ClientResponse response = ue.getResponse();
+ assertEquals(Status.NOT_FOUND, response.getClientResponseStatus());
+ WebServicesTestUtils.checkStringMatch(
+ "error string exists and shouldn't", "", responseStr);
+ }
+ }
+
+ @Test
+ public void testInvalidUri2() throws JSONException, Exception {
+ WebResource r = resource();
+ String responseStr = "";
+ try {
+ responseStr = r.path("ws").path("v1").path("invalid")
+ .accept(MediaType.APPLICATION_JSON).get(String.class);
+ fail("should have thrown exception on invalid uri");
+ } catch (UniformInterfaceException ue) {
+ ClientResponse response = ue.getResponse();
+ assertEquals(Status.NOT_FOUND, response.getClientResponseStatus());
+ WebServicesTestUtils.checkStringMatch(
+ "error string exists and shouldn't", "", responseStr);
+ }
+ }
+
+ @Test
+ public void testInvalidAccept() throws JSONException, Exception {
+ WebResource r = resource();
+ String responseStr = "";
+ try {
+ responseStr = r.path("ws").path("v1").path("mapreduce")
+ .accept(MediaType.TEXT_PLAIN).get(String.class);
+ fail("should have thrown exception on invalid uri");
+ } catch (UniformInterfaceException ue) {
+ ClientResponse response = ue.getResponse();
+ assertEquals(Status.INTERNAL_SERVER_ERROR,
+ response.getClientResponseStatus());
+ WebServicesTestUtils.checkStringMatch(
+ "error string exists and shouldn't", "", responseStr);
+ }
+ }
+
+ public void verifyAMInfo(JSONObject info, TestAppContext ctx)
+ throws JSONException {
+ assertEquals("incorrect number of elements", 5, info.length());
+
+ verifyAMInfoGeneric(ctx, info.getString("appId"), info.getString("user"),
+ info.getString("name"), info.getLong("startedOn"),
+ info.getLong("elapsedTime"));
+ }
+
+ public void verifyAMInfoXML(String xml, TestAppContext ctx)
+ throws JSONException, Exception {
+ DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+ DocumentBuilder db = dbf.newDocumentBuilder();
+ InputSource is = new InputSource();
+ is.setCharacterStream(new StringReader(xml));
+ Document dom = db.parse(is);
+ NodeList nodes = dom.getElementsByTagName("info");
+ assertEquals("incorrect number of elements", 1, nodes.getLength());
+
+ for (int i = 0; i < nodes.getLength(); i++) {
+ Element element = (Element) nodes.item(i);
+ verifyAMInfoGeneric(ctx,
+ WebServicesTestUtils.getXmlString(element, "appId"),
+ WebServicesTestUtils.getXmlString(element, "user"),
+ WebServicesTestUtils.getXmlString(element, "name"),
+ WebServicesTestUtils.getXmlLong(element, "startedOn"),
+ WebServicesTestUtils.getXmlLong(element, "elapsedTime"));
+ }
+ }
+
+ public void verifyAMInfoGeneric(TestAppContext ctx, String id, String user,
+ String name, long startedOn, long elapsedTime) {
+
+ WebServicesTestUtils.checkStringMatch("id", ctx.getApplicationID()
+ .toString(), id);
+ WebServicesTestUtils.checkStringMatch("user", ctx.getUser().toString(),
+ user);
+ WebServicesTestUtils.checkStringMatch("name", ctx.getApplicationName(),
+ name);
+
+ assertEquals("startedOn incorrect", ctx.getStartTime(), startedOn);
+ assertTrue("elapsedTime not greater then 0", (elapsedTime > 0));
+
+ }
+}