|
@@ -18,6 +18,7 @@
|
|
|
|
|
|
package org.apache.hadoop.yarn.server.resourcemanager.webapp;
|
|
|
|
|
|
+import static org.apache.hadoop.yarn.webapp.WebServicesTestUtils.assertResponseStatusCode;
|
|
|
import static org.junit.Assert.assertEquals;
|
|
|
import static org.junit.Assert.assertTrue;
|
|
|
import static org.junit.Assume.assumeTrue;
|
|
@@ -87,6 +88,7 @@ import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.LocalResourceInf
|
|
|
import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.LogAggregationContextInfo;
|
|
|
import org.apache.hadoop.yarn.util.ConverterUtils;
|
|
|
import org.apache.hadoop.yarn.webapp.GenericExceptionHandler;
|
|
|
+import org.apache.hadoop.yarn.webapp.GuiceServletConfig;
|
|
|
import org.apache.hadoop.yarn.webapp.JerseyTestBase;
|
|
|
import org.apache.hadoop.yarn.webapp.WebServicesTestUtils;
|
|
|
import org.codehaus.jettison.json.JSONException;
|
|
@@ -107,7 +109,6 @@ import org.xml.sax.SAXException;
|
|
|
import com.google.inject.Guice;
|
|
|
import com.google.inject.Injector;
|
|
|
import com.google.inject.Singleton;
|
|
|
-import com.google.inject.servlet.GuiceServletContextListener;
|
|
|
import com.google.inject.servlet.ServletModule;
|
|
|
import com.sun.jersey.api.client.Client;
|
|
|
import com.sun.jersey.api.client.ClientResponse;
|
|
@@ -126,7 +127,6 @@ public class TestRMWebServicesAppsModification extends JerseyTestBase {
|
|
|
|
|
|
private static final int CONTAINER_MB = 1024;
|
|
|
|
|
|
- private static Injector injector;
|
|
|
private String webserviceUserName = "testuser";
|
|
|
|
|
|
private boolean setAuthFilter = false;
|
|
@@ -136,14 +136,6 @@ public class TestRMWebServicesAppsModification extends JerseyTestBase {
|
|
|
private static final String FS_ALLOC_FILE = new File(TEST_DIR,
|
|
|
"test-fs-queues.xml").getAbsolutePath();
|
|
|
|
|
|
- public static class GuiceServletConfig extends GuiceServletContextListener {
|
|
|
-
|
|
|
- @Override
|
|
|
- protected Injector getInjector() {
|
|
|
- return injector;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
/*
|
|
|
* Helper class to allow testing of RM web services which require
|
|
|
* authorization Add this class as a filter in the Guice injector for the
|
|
@@ -298,19 +290,19 @@ public class TestRMWebServicesAppsModification extends JerseyTestBase {
|
|
|
case 0:
|
|
|
default:
|
|
|
// No Auth Capacity Scheduler
|
|
|
- injector = getNoAuthInjectorCap();
|
|
|
+ GuiceServletConfig.setInjector(getNoAuthInjectorCap());
|
|
|
break;
|
|
|
case 1:
|
|
|
// Simple Auth Capacity Scheduler
|
|
|
- injector = getSimpleAuthInjectorCap();
|
|
|
+ GuiceServletConfig.setInjector(getSimpleAuthInjectorCap());
|
|
|
break;
|
|
|
case 2:
|
|
|
// No Auth Fair Scheduler
|
|
|
- injector = getNoAuthInjectorFair();
|
|
|
+ GuiceServletConfig.setInjector(getNoAuthInjectorFair());
|
|
|
break;
|
|
|
case 3:
|
|
|
// Simple Auth Fair Scheduler
|
|
|
- injector = getSimpleAuthInjectorFair();
|
|
|
+ GuiceServletConfig.setInjector(getSimpleAuthInjectorFair());
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
@@ -349,7 +341,7 @@ public class TestRMWebServicesAppsModification extends JerseyTestBase {
|
|
|
this
|
|
|
.constructWebResource("apps", app.getApplicationId().toString(),
|
|
|
"state").accept(mediaType).get(ClientResponse.class);
|
|
|
- assertEquals(Status.OK, response.getClientResponseStatus());
|
|
|
+ assertResponseStatusCode(Status.OK, response.getStatusInfo());
|
|
|
if (mediaType.equals(MediaType.APPLICATION_JSON)) {
|
|
|
verifyAppStateJson(response, RMAppState.ACCEPTED);
|
|
|
} else if (mediaType.equals(MediaType.APPLICATION_XML)) {
|
|
@@ -388,10 +380,11 @@ public class TestRMWebServicesAppsModification extends JerseyTestBase {
|
|
|
.put(ClientResponse.class);
|
|
|
|
|
|
if (!isAuthenticationEnabled()) {
|
|
|
- assertEquals(Status.UNAUTHORIZED, response.getClientResponseStatus());
|
|
|
+ assertResponseStatusCode(Status.UNAUTHORIZED,
|
|
|
+ response.getStatusInfo());
|
|
|
continue;
|
|
|
}
|
|
|
- assertEquals(Status.ACCEPTED, response.getClientResponseStatus());
|
|
|
+ assertResponseStatusCode(Status.ACCEPTED, response.getStatusInfo());
|
|
|
if (mediaType.equals(MediaType.APPLICATION_JSON)) {
|
|
|
verifyAppStateJson(response, RMAppState.FINAL_SAVING,
|
|
|
RMAppState.KILLED, RMAppState.KILLING, RMAppState.ACCEPTED);
|
|
@@ -408,7 +401,7 @@ public class TestRMWebServicesAppsModification extends JerseyTestBase {
|
|
|
tmp = tmp.queryParam("user.name", webserviceUserName);
|
|
|
}
|
|
|
response = tmp.get(ClientResponse.class);
|
|
|
- assertEquals(Status.OK, response.getClientResponseStatus());
|
|
|
+ assertResponseStatusCode(Status.OK, response.getStatusInfo());
|
|
|
assertTrue(locationHeaderValue.endsWith("/ws/v1/cluster/apps/"
|
|
|
+ app.getApplicationId().toString() + "/state"));
|
|
|
|
|
@@ -419,9 +412,13 @@ public class TestRMWebServicesAppsModification extends JerseyTestBase {
|
|
|
.constructWebResource("apps",
|
|
|
app.getApplicationId().toString(), "state").accept(mediaType)
|
|
|
.entity(entity, contentType).put(ClientResponse.class);
|
|
|
- assertTrue((response.getClientResponseStatus() == Status.ACCEPTED)
|
|
|
- || (response.getClientResponseStatus() == Status.OK));
|
|
|
- if (response.getClientResponseStatus() == Status.OK) {
|
|
|
+ assertTrue(
|
|
|
+ (response.getStatusInfo().getStatusCode()
|
|
|
+ == Status.ACCEPTED.getStatusCode())
|
|
|
+ || (response.getStatusInfo().getStatusCode()
|
|
|
+ == Status.OK.getStatusCode()));
|
|
|
+ if (response.getStatusInfo().getStatusCode()
|
|
|
+ == Status.OK.getStatusCode()) {
|
|
|
assertEquals(RMAppState.KILLED, app.getState());
|
|
|
if (mediaType.equals(MediaType.APPLICATION_JSON)) {
|
|
|
verifyAppStateJson(response, RMAppState.KILLED);
|
|
@@ -470,11 +467,12 @@ public class TestRMWebServicesAppsModification extends JerseyTestBase {
|
|
|
.put(ClientResponse.class);
|
|
|
|
|
|
if (!isAuthenticationEnabled()) {
|
|
|
- assertEquals(Status.UNAUTHORIZED,
|
|
|
- response.getClientResponseStatus());
|
|
|
+ assertResponseStatusCode(Status.UNAUTHORIZED,
|
|
|
+ response.getStatusInfo());
|
|
|
continue;
|
|
|
}
|
|
|
- assertEquals(Status.BAD_REQUEST, response.getClientResponseStatus());
|
|
|
+ assertResponseStatusCode(Status.BAD_REQUEST,
|
|
|
+ response.getStatusInfo());
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -588,13 +586,16 @@ public class TestRMWebServicesAppsModification extends JerseyTestBase {
|
|
|
.accept(MediaType.APPLICATION_XML)
|
|
|
.entity(info, MediaType.APPLICATION_XML).put(ClientResponse.class);
|
|
|
if (!isAuthenticationEnabled()) {
|
|
|
- assertEquals(Status.UNAUTHORIZED, response.getClientResponseStatus());
|
|
|
+ assertResponseStatusCode(Status.UNAUTHORIZED,
|
|
|
+ response.getStatusInfo());
|
|
|
continue;
|
|
|
}
|
|
|
if (i == 0) {
|
|
|
- assertEquals(Status.NOT_FOUND, response.getClientResponseStatus());
|
|
|
+ assertResponseStatusCode(Status.NOT_FOUND,
|
|
|
+ response.getStatusInfo());
|
|
|
} else {
|
|
|
- assertEquals(Status.BAD_REQUEST, response.getClientResponseStatus());
|
|
|
+ assertResponseStatusCode(Status.BAD_REQUEST,
|
|
|
+ response.getStatusInfo());
|
|
|
}
|
|
|
}
|
|
|
rm.stop();
|
|
@@ -641,9 +642,11 @@ public class TestRMWebServicesAppsModification extends JerseyTestBase {
|
|
|
public void validateResponseStatus(ClientResponse response,
|
|
|
Status expectedUnauthorizedMode, Status expectedAuthorizedMode) {
|
|
|
if (!isAuthenticationEnabled()) {
|
|
|
- assertEquals(expectedUnauthorizedMode, response.getClientResponseStatus());
|
|
|
+ assertResponseStatusCode(expectedUnauthorizedMode,
|
|
|
+ response.getStatusInfo());
|
|
|
} else {
|
|
|
- assertEquals(expectedAuthorizedMode, response.getClientResponseStatus());
|
|
|
+ assertResponseStatusCode(expectedAuthorizedMode,
|
|
|
+ response.getStatusInfo());
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -845,10 +848,10 @@ public class TestRMWebServicesAppsModification extends JerseyTestBase {
|
|
|
.entity(appInfo, contentMedia).post(ClientResponse.class);
|
|
|
|
|
|
if (!this.isAuthenticationEnabled()) {
|
|
|
- assertEquals(Status.UNAUTHORIZED, response.getClientResponseStatus());
|
|
|
+ assertResponseStatusCode(Status.UNAUTHORIZED, response.getStatusInfo());
|
|
|
return;
|
|
|
}
|
|
|
- assertEquals(Status.ACCEPTED, response.getClientResponseStatus());
|
|
|
+ assertResponseStatusCode(Status.ACCEPTED, response.getStatusInfo());
|
|
|
assertTrue(!response.getHeaders().getFirst(HttpHeaders.LOCATION).isEmpty());
|
|
|
String locURL = response.getHeaders().getFirst(HttpHeaders.LOCATION);
|
|
|
assertTrue(locURL.contains("/apps/application"));
|
|
@@ -857,7 +860,7 @@ public class TestRMWebServicesAppsModification extends JerseyTestBase {
|
|
|
WebResource res = resource().uri(new URI(locURL));
|
|
|
res = res.queryParam("user.name", webserviceUserName);
|
|
|
response = res.get(ClientResponse.class);
|
|
|
- assertEquals(Status.OK, response.getClientResponseStatus());
|
|
|
+ assertResponseStatusCode(Status.OK, response.getStatusInfo());
|
|
|
|
|
|
RMApp app =
|
|
|
rm.getRMContext().getRMApps()
|
|
@@ -916,7 +919,7 @@ public class TestRMWebServicesAppsModification extends JerseyTestBase {
|
|
|
response =
|
|
|
this.constructWebResource("apps", appId).accept(acceptMedia)
|
|
|
.get(ClientResponse.class);
|
|
|
- assertEquals(Status.OK, response.getClientResponseStatus());
|
|
|
+ assertResponseStatusCode(Status.OK, response.getStatusInfo());
|
|
|
}
|
|
|
|
|
|
public void testAppSubmitErrors(String acceptMedia, String contentMedia)
|
|
@@ -1004,7 +1007,7 @@ public class TestRMWebServicesAppsModification extends JerseyTestBase {
|
|
|
ClientResponse response =
|
|
|
this.constructWebResource(urlPath).accept(MediaType.APPLICATION_XML)
|
|
|
.entity(body, MediaType.APPLICATION_XML).post(ClientResponse.class);
|
|
|
- assertEquals(Status.BAD_REQUEST, response.getClientResponseStatus());
|
|
|
+ assertResponseStatusCode(Status.BAD_REQUEST, response.getStatusInfo());
|
|
|
body = "{\"a\" : \"b\"}";
|
|
|
response =
|
|
|
this.constructWebResource(urlPath).accept(MediaType.APPLICATION_XML)
|
|
@@ -1029,7 +1032,7 @@ public class TestRMWebServicesAppsModification extends JerseyTestBase {
|
|
|
this
|
|
|
.constructWebResource("apps", app.getApplicationId().toString(),
|
|
|
"queue").accept(contentType).get(ClientResponse.class);
|
|
|
- assertEquals(Status.OK, response.getClientResponseStatus());
|
|
|
+ assertResponseStatusCode(Status.OK, response.getStatusInfo());
|
|
|
String expectedQueue = "default";
|
|
|
if(!isCapacityScheduler) {
|
|
|
expectedQueue = "root." + webserviceUserName;
|
|
@@ -1094,10 +1097,11 @@ public class TestRMWebServicesAppsModification extends JerseyTestBase {
|
|
|
.put(ClientResponse.class);
|
|
|
|
|
|
if (!isAuthenticationEnabled()) {
|
|
|
- assertEquals(Status.UNAUTHORIZED, response.getClientResponseStatus());
|
|
|
+ assertResponseStatusCode(Status.UNAUTHORIZED,
|
|
|
+ response.getStatusInfo());
|
|
|
continue;
|
|
|
}
|
|
|
- assertEquals(Status.OK, response.getClientResponseStatus());
|
|
|
+ assertResponseStatusCode(Status.OK, response.getStatusInfo());
|
|
|
if (mediaType.equals(MediaType.APPLICATION_JSON)) {
|
|
|
verifyAppPriorityJson(response, modifiedPriority);
|
|
|
} else {
|
|
@@ -1108,7 +1112,7 @@ public class TestRMWebServicesAppsModification extends JerseyTestBase {
|
|
|
.constructWebResource("apps", app.getApplicationId().toString(),
|
|
|
"priority")
|
|
|
.accept(mediaType).get(ClientResponse.class);
|
|
|
- assertEquals(Status.OK, response.getClientResponseStatus());
|
|
|
+ assertResponseStatusCode(Status.OK, response.getStatusInfo());
|
|
|
if (mediaType.equals(MediaType.APPLICATION_JSON)) {
|
|
|
verifyAppPriorityJson(response, modifiedPriority);
|
|
|
} else {
|
|
@@ -1123,7 +1127,7 @@ public class TestRMWebServicesAppsModification extends JerseyTestBase {
|
|
|
"priority")
|
|
|
.entity(entity, contentType).accept(mediaType)
|
|
|
.put(ClientResponse.class);
|
|
|
- assertEquals(Status.FORBIDDEN, response.getClientResponseStatus());
|
|
|
+ assertResponseStatusCode(Status.FORBIDDEN, response.getStatusInfo());
|
|
|
}
|
|
|
}
|
|
|
rm.stop();
|
|
@@ -1173,10 +1177,11 @@ public class TestRMWebServicesAppsModification extends JerseyTestBase {
|
|
|
.put(ClientResponse.class);
|
|
|
|
|
|
if (!isAuthenticationEnabled()) {
|
|
|
- assertEquals(Status.UNAUTHORIZED, response.getClientResponseStatus());
|
|
|
+ assertResponseStatusCode(Status.UNAUTHORIZED,
|
|
|
+ response.getStatusInfo());
|
|
|
continue;
|
|
|
}
|
|
|
- assertEquals(Status.OK, response.getClientResponseStatus());
|
|
|
+ assertResponseStatusCode(Status.OK, response.getStatusInfo());
|
|
|
String expectedQueue = "test";
|
|
|
if(!isCapacityScheduler) {
|
|
|
expectedQueue = "root.test";
|
|
@@ -1196,7 +1201,7 @@ public class TestRMWebServicesAppsModification extends JerseyTestBase {
|
|
|
.constructWebResource("apps", app.getApplicationId().toString(),
|
|
|
"queue").entity(entity, contentType).accept(mediaType)
|
|
|
.put(ClientResponse.class);
|
|
|
- assertEquals(Status.FORBIDDEN, response.getClientResponseStatus());
|
|
|
+ assertResponseStatusCode(Status.FORBIDDEN, response.getStatusInfo());
|
|
|
if(isCapacityScheduler) {
|
|
|
Assert.assertEquals("default", app.getQueue());
|
|
|
}
|