SLIDER-719 initial jersey tests standalone
Project: http://git-wip-us.apache.org/repos/asf/incubator-slider/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-slider/commit/72e47903 Tree: http://git-wip-us.apache.org/repos/asf/incubator-slider/tree/72e47903 Diff: http://git-wip-us.apache.org/repos/asf/incubator-slider/diff/72e47903 Branch: refs/heads/develop Commit: 72e47903eca51ca54b9e53b05816eea32ebe08ca Parents: 54f1f12 Author: Steve Loughran <[email protected]> Authored: Tue Jan 20 17:04:49 2015 +0000 Committer: Steve Loughran <[email protected]> Committed: Tue Jan 20 17:04:49 2015 +0000 ---------------------------------------------------------------------- .../agent/rest/JerseyTestDelegates.groovy | 116 +++++++++++++------ .../slider/agent/rest/TestStandaloneREST.groovy | 34 ++++-- 2 files changed, 105 insertions(+), 45 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/72e47903/slider-core/src/test/groovy/org/apache/slider/agent/rest/JerseyTestDelegates.groovy ---------------------------------------------------------------------- diff --git a/slider-core/src/test/groovy/org/apache/slider/agent/rest/JerseyTestDelegates.groovy b/slider-core/src/test/groovy/org/apache/slider/agent/rest/JerseyTestDelegates.groovy index 32ca2cc..a06be23 100644 --- a/slider-core/src/test/groovy/org/apache/slider/agent/rest/JerseyTestDelegates.groovy +++ b/slider-core/src/test/groovy/org/apache/slider/agent/rest/JerseyTestDelegates.groovy @@ -20,6 +20,7 @@ package org.apache.slider.agent.rest import com.sun.jersey.api.client.Client import com.sun.jersey.api.client.WebResource +import com.sun.jersey.api.client.UniformInterfaceException import groovy.transform.CompileStatic import groovy.util.logging.Slf4j import org.apache.hadoop.yarn.webapp.NotFoundException @@ -65,20 +66,42 @@ class JerseyTestDelegates extends SliderTestUtils { JerseyTestDelegates(String appmaster, Client jersey) { this.appmaster = appmaster - application = appendToURL(appmaster, RestPaths.SLIDER_PATH_APPLICATION) + this.application = appendToURL(appmaster, RestPaths.SLIDER_PATH_APPLICATION) this.jersey = jersey } /** * <T> T get(Class<T> c) - * Get operation against the EM + * Get operation against a path under the Application + * @param subpath path + * @return + */ + public <T> T jGetApplicationResource(String subpath, Class<T> c) { + assert c + def appPath = appendToURL(SLIDER_PATH_APPLICATION, subpath) + WebResource webResource = buildResource(appPath) + (T)webResource.get(c) + } + + /** + * <T> T get(Class<T> c) + * Get operation against a path under the AM * @param path path * @return */ - public <T> T jerseyGet(String path, Class<T> c) { + public <T> T jGetAMResource(String path, Class<T> c) { assert c WebResource webResource = buildResource(path) - webResource.get(c) + (T)webResource.get(c) + } + + /** + * Get operation against a path under the AM + * @param path path + * @return the string value + */ + public String jerseyGet(String path) { + return jGetAMResource(path, String.class) } /** @@ -88,7 +111,7 @@ class JerseyTestDelegates extends SliderTestUtils { */ public WebResource buildResource(String path) { assert path - String fullpath = appendToURL(application, path) + String fullpath = appendToURL(appmaster, path) WebResource webResource = jersey.resource(fullpath) webResource.type(MediaType.APPLICATION_JSON) log.info("HTTP operation against $fullpath"); @@ -96,27 +119,39 @@ class JerseyTestDelegates extends SliderTestUtils { } public void testJerseyGetConftree() throws Throwable { - jerseyGet(LIVE_RESOURCES, ConfTree.class); + jGetApplicationResource(LIVE_RESOURCES, ConfTree.class); } public void testCodahaleOperations() throws Throwable { describe "Codahale operations" - jerseyGet(appmaster) - jerseyGet(appmaster, SYSTEM_THREADS) - jerseyGet(appmaster, SYSTEM_HEALTHCHECK) - jerseyGet(appmaster, SYSTEM_PING) - jerseyGet(appmaster, SYSTEM_METRICS_JSON) + jerseyGet("/") + jerseyGet(SYSTEM_THREADS) + jerseyGet(SYSTEM_HEALTHCHECK) + jerseyGet(SYSTEM_PING) + jerseyGet(SYSTEM_METRICS_JSON) } public void logCodahaleMetrics() { // query Coda Hale metrics - log.info jerseyGet(appmaster, SYSTEM_HEALTHCHECK) - log.info jerseyGet(appmaster, SYSTEM_METRICS) + log.info jerseyGet(SYSTEM_HEALTHCHECK) + log.info jerseyGet(SYSTEM_METRICS) } - public void testLiveResources() throws Throwable { + public <T> T fetchJType( + String subpath, Class<T> clazz) { + (T)jGetApplicationResource(subpath, clazz) + } + + public ConfTreeOperations jGetConfigTree( + String path) { + ConfTree ctree = jGetApplicationResource(path, ConfTree) + ConfTreeOperations tree = new ConfTreeOperations(ctree) + return tree + } + + public void testLiveResources() throws Throwable { describe "Live Resources" - ConfTreeOperations tree = fetchConfigTree(appmaster, LIVE_RESOURCES) + ConfTreeOperations tree = jGetConfigTree(LIVE_RESOURCES) log.info tree.toString() def liveAM = tree.getComponent(COMPONENT_AM) @@ -135,7 +170,7 @@ class JerseyTestDelegates extends SliderTestUtils { describe "Application REST ${LIVE_CONTAINERS}" Map<String, SerializedContainerInformation> containers = - fetchType(HashMap, appmaster, LIVE_CONTAINERS) + jGetApplicationResource(LIVE_CONTAINERS, HashMap) assert containers.size() == 1 log.info "${containers}" SerializedContainerInformation amContainerInfo = @@ -155,16 +190,20 @@ class JerseyTestDelegates extends SliderTestUtils { describe "containers" SerializedContainerInformation retrievedContainerInfo = - fetchType(SerializedContainerInformation, appmaster, - LIVE_CONTAINERS + "/${amContainerId}") + fetchJType( + LIVE_CONTAINERS + "/${amContainerId}", + SerializedContainerInformation + ) assert retrievedContainerInfo.containerId == amContainerId // fetch missing try { - def result = fetchType(SerializedContainerInformation, appmaster, - LIVE_CONTAINERS + "/unknown") + def result = fetchJType( + LIVE_CONTAINERS + "/unknown", + SerializedContainerInformation + ) fail("expected an error, got $result") - } catch (NotFoundException e) { + } catch (UniformInterfaceException e) { // expected } @@ -172,7 +211,7 @@ class JerseyTestDelegates extends SliderTestUtils { describe "components" Map<String, SerializedComponentInformation> components = - fetchType(HashMap, appmaster, LIVE_COMPONENTS) + fetchJType(LIVE_COMPONENTS, HashMap) // two components assert components.size() == 1 log.info "${components}" @@ -180,10 +219,10 @@ class JerseyTestDelegates extends SliderTestUtils { SerializedComponentInformation amComponentInfo = (SerializedComponentInformation) components[COMPONENT_AM] - SerializedComponentInformation amFullInfo = fetchType( - SerializedComponentInformation, - appmaster, - LIVE_COMPONENTS + "/${COMPONENT_AM}") + SerializedComponentInformation amFullInfo = fetchJType( + LIVE_COMPONENTS + "/${COMPONENT_AM}", + SerializedComponentInformation + ) assert amFullInfo.containers.size() == 1 assert amFullInfo.containers[0] == amContainerId @@ -202,14 +241,14 @@ class JerseyTestDelegates extends SliderTestUtils { MODEL, ApplicationResource.MODEL_ENTRIES) - def unresolvedConf = fetchType(AggregateConf, appmaster, MODEL_DESIRED) + def unresolvedConf = fetchJType(MODEL_DESIRED, AggregateConf) // log.info "Unresolved \n$unresolvedConf" def unresolvedAppConf = unresolvedConf.appConfOperations def sam = "slider-appmaster" assert unresolvedAppConf.getComponentOpt(sam, TEST_GLOBAL_OPTION, "") == "" - def resolvedConf = fetchType(AggregateConf, appmaster, MODEL_RESOLVED) + def resolvedConf = fetchJType(MODEL_RESOLVED, AggregateConf) // log.info "Resolved \n$resolvedConf" assert resolvedConf.appConfOperations.getComponentOpt( sam, TEST_GLOBAL_OPTION, "") == TEST_GLOBAL_OPTION_PRESENT @@ -240,7 +279,10 @@ class JerseyTestDelegates extends SliderTestUtils { // GET String ping = appendToURL(appmaster, SLIDER_PATH_APPLICATION, ACTION_PING) describe "ping to AM URL $appmaster, ping URL $ping" - def pinged = fetchType(PingResource, appmaster, ACTION_PING + "?body=hello") + def pinged = fetchJType( + ACTION_PING + "?body=hello", + PingResource + ) log.info "Ping GET: $pinged" URL pingUrl = new URL(ping) @@ -313,10 +355,9 @@ class JerseyTestDelegates extends SliderTestUtils { [url: ping], true, "AM failed to shut down") { - def pinged = fetchType( - PingResource, - appmaster, - ACTION_PING + "?body=hello") + def pinged = fetchJType(ACTION_PING + "?body=hello", + PingResource + ) fail("AM didn't shut down; Ping GET= $pinged") } @@ -340,4 +381,13 @@ class JerseyTestDelegates extends SliderTestUtils { } } + public void suite() { + + testRestletGetOperations(); + testCodahaleOperations() + testLiveResources() + testLiveContainers(); + + testRESTModel() + } } http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/72e47903/slider-core/src/test/groovy/org/apache/slider/agent/rest/TestStandaloneREST.groovy ---------------------------------------------------------------------- diff --git a/slider-core/src/test/groovy/org/apache/slider/agent/rest/TestStandaloneREST.groovy b/slider-core/src/test/groovy/org/apache/slider/agent/rest/TestStandaloneREST.groovy index fd676df..a53f546 100644 --- a/slider-core/src/test/groovy/org/apache/slider/agent/rest/TestStandaloneREST.groovy +++ b/slider-core/src/test/groovy/org/apache/slider/agent/rest/TestStandaloneREST.groovy @@ -59,36 +59,41 @@ class TestStandaloneREST extends AgentMiniClusterTestBase { addToTeardown(client); ApplicationReport report = waitForClusterLive(client) - def realappmaster = report.originalTrackingUrl + def directAM = report.originalTrackingUrl // set up url config to match initHttpTestSupport(launcher.configuration) execOperation(WEB_STARTUP_TIME) { - GET(realappmaster) + GET(directAM) } execOperation(WEB_STARTUP_TIME) { - def metrics = GET(realappmaster, SYSTEM_METRICS) + def metrics = GET(directAM, SYSTEM_METRICS) log.info metrics } - def appmaster = report.trackingUrl + def proxyAM = report.trackingUrl - GET(appmaster) + GET(proxyAM) - log.info GET(appmaster, SYSTEM_PING) - log.info GET(appmaster, SYSTEM_THREADS) - log.info GET(appmaster, SYSTEM_HEALTHCHECK) - log.info GET(appmaster, SYSTEM_METRICS_JSON) + log.info GET(proxyAM, SYSTEM_PING) + log.info GET(proxyAM, SYSTEM_THREADS) + log.info GET(proxyAM, SYSTEM_HEALTHCHECK) + log.info GET(proxyAM, SYSTEM_METRICS_JSON) def wsBackDoorRequired = conf.getBoolean( SliderXmlConfKeys.X_DEV_INSECURE_WS, true) + + + JerseyTestDelegates proxyJerseyTests = + new JerseyTestDelegates(proxyAM, createJerseyClient()) + proxyJerseyTests.suite() - RestTestDelegates proxied = new RestTestDelegates(appmaster) - RestTestDelegates direct = new RestTestDelegates(realappmaster) + RestTestDelegates proxied = new RestTestDelegates(proxyAM) + RestTestDelegates direct = new RestTestDelegates(directAM) direct.testRestletGetOperations(); proxied.testCodahaleOperations() @@ -96,7 +101,7 @@ class TestStandaloneREST extends AgentMiniClusterTestBase { describe "base entry lists" - assertPathServesList(appmaster, LIVE, ApplicationResource.LIVE_ENTRIES) + assertPathServesList(proxyAM, LIVE, ApplicationResource.LIVE_ENTRIES) // now some REST gets describe "Application REST ${LIVE_RESOURCES}" @@ -114,7 +119,12 @@ class TestStandaloneREST extends AgentMiniClusterTestBase { } direct.logCodahaleMetrics(); + + // this MUST be the final test direct.testStop(); + + + }
