|
@@ -19,11 +19,11 @@
|
|
|
|
|
|
package org.apache.ambari.server.api.handlers;
|
|
|
|
|
|
-import org.apache.ambari.server.api.predicate.InvalidQueryException;
|
|
|
import org.apache.ambari.server.api.query.Query;
|
|
|
import org.apache.ambari.server.api.resources.ResourceDefinition;
|
|
|
import org.apache.ambari.server.api.resources.ResourceInstance;
|
|
|
import org.apache.ambari.server.api.resources.ResourceInstanceFactory;
|
|
|
+import org.apache.ambari.server.api.services.NamedPropertySet;
|
|
|
import org.apache.ambari.server.api.services.ResultStatus;
|
|
|
import org.apache.ambari.server.api.services.persistence.PersistenceManager;
|
|
|
import org.apache.ambari.server.api.services.Request;
|
|
@@ -71,25 +71,27 @@ public class QueryCreateHandlerTest {
|
|
|
RequestHandler readHandler = createStrictMock(RequestHandler.class);
|
|
|
ResultStatus resultStatus = createNiceMock(ResultStatus.class);
|
|
|
|
|
|
- String httpBody = "{" +
|
|
|
- "\"components\" : [" +
|
|
|
- "{\"ServiceComponentInfo\" : {" +
|
|
|
- " \"component_name\" : \"SECONDARY_NAMENODE\"" +
|
|
|
- " }" +
|
|
|
- "}," +
|
|
|
- "{\"ServiceComponentInfo\" : {" +
|
|
|
- " \"component_name\" : \"HDFS_CLIENT\"" +
|
|
|
- " }" +
|
|
|
- "}" +
|
|
|
- "] }";
|
|
|
+ // test request body
|
|
|
+ // {
|
|
|
+ // "components" : [
|
|
|
+ // { "ServiceComponentInfo" : {
|
|
|
+ // "component_name" : "SECONDARY_NAMENODE"
|
|
|
+ // }
|
|
|
+ // },
|
|
|
+ // { "ServiceComponentInfo" : {
|
|
|
+ // "component_name" : "HDFS_CLIENT"
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // ]
|
|
|
+ // }
|
|
|
|
|
|
Map<Resource.Type, String> mapIds = new HashMap<Resource.Type, String>();
|
|
|
|
|
|
- Set<Map<String, Object>> setRequestProps = new HashSet<Map<String, Object>>();
|
|
|
- setRequestProps.add(Collections.<String, Object>singletonMap(
|
|
|
- PropertyHelper.getPropertyId("ServiceComponentInfo", "component_name"), "SECONDARY_NAMENODE"));
|
|
|
- setRequestProps.add(Collections.<String, Object>singletonMap(
|
|
|
- PropertyHelper.getPropertyId("ServiceComponentInfo", "component_name"), "HDFS_CLIENT"));
|
|
|
+ Set<NamedPropertySet> setRequestProps = new HashSet<NamedPropertySet>();
|
|
|
+ setRequestProps.add(new NamedPropertySet("components", Collections.<String, Object>singletonMap(
|
|
|
+ PropertyHelper.getPropertyId("ServiceComponentInfo", "component_name"), "SECONDARY_NAMENODE")));
|
|
|
+ setRequestProps.add(new NamedPropertySet("components", Collections.<String, Object>singletonMap(
|
|
|
+ PropertyHelper.getPropertyId("ServiceComponentInfo", "component_name"), "HDFS_CLIENT")));
|
|
|
|
|
|
Set<Map<String, Object>> setCreateProps = new HashSet<Map<String, Object>>();
|
|
|
Map<String, Object> map1 = new HashMap<String, Object>();
|
|
@@ -127,7 +129,6 @@ public class QueryCreateHandlerTest {
|
|
|
expect(result.getResultTree()).andReturn(resultTree);
|
|
|
|
|
|
expect(request.getResource()).andReturn(resourceInstance).anyTimes();
|
|
|
- expect(request.getHttpBody()).andReturn(httpBody).anyTimes();
|
|
|
expect(request.getHttpBodyProperties()).andReturn(setRequestProps).anyTimes();
|
|
|
|
|
|
expect(resourceInstance.getResourceDefinition()).andReturn(resourceDefinition).anyTimes();
|
|
@@ -190,6 +191,365 @@ public class QueryCreateHandlerTest {
|
|
|
readHandler, resultStatus);
|
|
|
}
|
|
|
|
|
|
+ @Test
|
|
|
+ public void tesHandleRequest_NoSubResourceNameSpecified() {
|
|
|
+ Request request = createNiceMock(Request.class);
|
|
|
+ ResourceInstance resourceInstance = createNiceMock(ResourceInstance.class);
|
|
|
+ ResourceDefinition resourceDefinition = createNiceMock(ResourceDefinition.class);
|
|
|
+ Query query = createNiceMock(Query.class);
|
|
|
+ Predicate predicate = createNiceMock(Predicate.class);
|
|
|
+ Result result = createNiceMock(Result.class);
|
|
|
+ ResourceInstance subResource = createNiceMock(ResourceInstance.class);
|
|
|
+ ResourceDefinition subResourceDefinition = createNiceMock(ResourceDefinition.class);
|
|
|
+ ClusterController controller = createNiceMock(ClusterController.class);
|
|
|
+ Schema serviceSchema = createNiceMock(Schema.class);
|
|
|
+ Schema componentSchema = createNiceMock(Schema.class);
|
|
|
+ String resourceKeyProperty = "resourceKeyProperty";
|
|
|
+ Resource resource1 = createNiceMock(Resource.class);
|
|
|
+ Resource resource2 = createNiceMock(Resource.class);
|
|
|
+ PersistenceManager pm = createNiceMock(PersistenceManager.class);
|
|
|
+ ResourceInstance createResource = createNiceMock(ResourceInstance.class);
|
|
|
+ RequestStatus status = createNiceMock(RequestStatus.class);
|
|
|
+ Resource statusResource1 = createNiceMock(Resource.class);
|
|
|
+ Resource statusResource2 = createNiceMock(Resource.class);
|
|
|
+ RequestHandler readHandler = createStrictMock(RequestHandler.class);
|
|
|
+ ResultStatus queryResultStatus = createNiceMock(ResultStatus.class);
|
|
|
+
|
|
|
+ // test request body. Missing sub-resource name.
|
|
|
+ // {
|
|
|
+ // { "ServiceComponentInfo" : {
|
|
|
+ // "component_name" : "SECONDARY_NAMENODE"
|
|
|
+ // }
|
|
|
+ // },
|
|
|
+ // { "ServiceComponentInfo" : {
|
|
|
+ // "component_name" : "HDFS_CLIENT"
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+
|
|
|
+ Map<Resource.Type, String> mapIds = new HashMap<Resource.Type, String>();
|
|
|
+
|
|
|
+ Set<NamedPropertySet> setRequestProps = new HashSet<NamedPropertySet>();
|
|
|
+ setRequestProps.add(new NamedPropertySet("", Collections.<String, Object>singletonMap(
|
|
|
+ PropertyHelper.getPropertyId("ServiceComponentInfo", "component_name"), "SECONDARY_NAMENODE")));
|
|
|
+ setRequestProps.add(new NamedPropertySet("", Collections.<String, Object>singletonMap(
|
|
|
+ PropertyHelper.getPropertyId("ServiceComponentInfo", "component_name"), "HDFS_CLIENT")));
|
|
|
+
|
|
|
+ TreeNode<Resource> resultTree = new TreeNodeImpl<Resource>(null, null, "result");
|
|
|
+ resultTree.addChild(resource1, "resource1");
|
|
|
+ resultTree.addChild(resource2, "resource2");
|
|
|
+
|
|
|
+ //expectations
|
|
|
+ expect(readHandler.handleRequest(request)).andReturn(result);
|
|
|
+ expect(result.getStatus()).andReturn(queryResultStatus).anyTimes();
|
|
|
+ expect(queryResultStatus.isErrorState()).andReturn(false);
|
|
|
+ expect(result.getResultTree()).andReturn(resultTree);
|
|
|
+
|
|
|
+ expect(request.getResource()).andReturn(resourceInstance).anyTimes();
|
|
|
+ expect(request.getHttpBodyProperties()).andReturn(setRequestProps).anyTimes();
|
|
|
+
|
|
|
+ expect(resourceInstance.getResourceDefinition()).andReturn(resourceDefinition).anyTimes();
|
|
|
+ expect(resourceInstance.getIds()).andReturn(mapIds).anyTimes();
|
|
|
+
|
|
|
+ expect(resourceDefinition.getType()).andReturn(Resource.Type.Service).anyTimes();
|
|
|
+ expect(controller.getSchema(Resource.Type.Service)).andReturn(serviceSchema).anyTimes();
|
|
|
+ expect(result.getResultTree()).andReturn(resultTree).anyTimes();
|
|
|
+ expect(resource1.getPropertyValue(resourceKeyProperty)).andReturn("id1").anyTimes();
|
|
|
+ expect(resource2.getPropertyValue(resourceKeyProperty)).andReturn("id2").anyTimes();
|
|
|
+
|
|
|
+ replay(request, resourceInstance, resourceDefinition, query, predicate, result, subResource,
|
|
|
+ subResourceDefinition, controller, serviceSchema, componentSchema, resource1, resource2,
|
|
|
+ pm, createResource, status, statusResource1, statusResource2,
|
|
|
+ readHandler, queryResultStatus);
|
|
|
+
|
|
|
+ //test
|
|
|
+ Result testResult = new TestQueryCreateHandler(null, controller, pm, readHandler).
|
|
|
+ handleRequest(request);
|
|
|
+
|
|
|
+ ResultStatus resultStatus = testResult.getStatus();
|
|
|
+ assertEquals(ResultStatus.STATUS.BAD_REQUEST, resultStatus.getStatus());
|
|
|
+ assertEquals("Invalid Request: A sub-resource name must be supplied.", resultStatus.getMessage());
|
|
|
+
|
|
|
+ verify(request, resourceInstance, resourceDefinition, query, predicate, result, subResource,
|
|
|
+ subResourceDefinition, controller, serviceSchema, componentSchema, resource1, resource2,
|
|
|
+ pm, createResource, status, statusResource1, statusResource2,
|
|
|
+ readHandler, queryResultStatus);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void tesHandleRequest_InvalidSubResSpecified() {
|
|
|
+ Request request = createNiceMock(Request.class);
|
|
|
+ ResourceInstance resourceInstance = createNiceMock(ResourceInstance.class);
|
|
|
+ ResourceDefinition resourceDefinition = createNiceMock(ResourceDefinition.class);
|
|
|
+ Query query = createNiceMock(Query.class);
|
|
|
+ Predicate predicate = createNiceMock(Predicate.class);
|
|
|
+ Result result = createNiceMock(Result.class);
|
|
|
+ ResourceInstance subResource = createNiceMock(ResourceInstance.class);
|
|
|
+ ResourceDefinition subResourceDefinition = createNiceMock(ResourceDefinition.class);
|
|
|
+ ClusterController controller = createNiceMock(ClusterController.class);
|
|
|
+ Schema serviceSchema = createNiceMock(Schema.class);
|
|
|
+ Schema componentSchema = createNiceMock(Schema.class);
|
|
|
+ String resourceKeyProperty = "resourceKeyProperty";
|
|
|
+ Resource resource1 = createNiceMock(Resource.class);
|
|
|
+ Resource resource2 = createNiceMock(Resource.class);
|
|
|
+ PersistenceManager pm = createNiceMock(PersistenceManager.class);
|
|
|
+ ResourceInstance createResource = createNiceMock(ResourceInstance.class);
|
|
|
+ RequestStatus status = createNiceMock(RequestStatus.class);
|
|
|
+ Resource statusResource1 = createNiceMock(Resource.class);
|
|
|
+ Resource statusResource2 = createNiceMock(Resource.class);
|
|
|
+ RequestHandler readHandler = createStrictMock(RequestHandler.class);
|
|
|
+ ResultStatus queryResultStatus = createNiceMock(ResultStatus.class);
|
|
|
+
|
|
|
+ // test request body
|
|
|
+ // {
|
|
|
+ // "INVALID" : [
|
|
|
+ // { "ServiceComponentInfo" : {
|
|
|
+ // "component_name" : "SECONDARY_NAMENODE"
|
|
|
+ // }
|
|
|
+ // },
|
|
|
+ // { "ServiceComponentInfo" : {
|
|
|
+ // "component_name" : "HDFS_CLIENT"
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // ]
|
|
|
+ // }
|
|
|
+
|
|
|
+ Map<Resource.Type, String> mapIds = new HashMap<Resource.Type, String>();
|
|
|
+
|
|
|
+ Set<NamedPropertySet> setRequestProps = new HashSet<NamedPropertySet>();
|
|
|
+ setRequestProps.add(new NamedPropertySet("INVALID", Collections.<String, Object>singletonMap(
|
|
|
+ PropertyHelper.getPropertyId("ServiceComponentInfo", "component_name"), "SECONDARY_NAMENODE")));
|
|
|
+ setRequestProps.add(new NamedPropertySet("INVALID", Collections.<String, Object>singletonMap(
|
|
|
+ PropertyHelper.getPropertyId("ServiceComponentInfo", "component_name"), "HDFS_CLIENT")));
|
|
|
+
|
|
|
+ Map<String, ResourceInstance> mapSubResources = new HashMap<String, ResourceInstance>();
|
|
|
+ mapSubResources.put("components", subResource);
|
|
|
+
|
|
|
+ TreeNode<Resource> resultTree = new TreeNodeImpl<Resource>(null, null, "result");
|
|
|
+ resultTree.addChild(resource1, "resource1");
|
|
|
+ resultTree.addChild(resource2, "resource2");
|
|
|
+
|
|
|
+ //expectations
|
|
|
+ expect(readHandler.handleRequest(request)).andReturn(result);
|
|
|
+ expect(result.getStatus()).andReturn(queryResultStatus).anyTimes();
|
|
|
+ expect(queryResultStatus.isErrorState()).andReturn(false);
|
|
|
+ expect(result.getResultTree()).andReturn(resultTree);
|
|
|
+
|
|
|
+ expect(request.getResource()).andReturn(resourceInstance).anyTimes();
|
|
|
+ expect(request.getHttpBodyProperties()).andReturn(setRequestProps).anyTimes();
|
|
|
+
|
|
|
+ expect(resourceInstance.getResourceDefinition()).andReturn(resourceDefinition).anyTimes();
|
|
|
+ expect(resourceInstance.getIds()).andReturn(mapIds).anyTimes();
|
|
|
+ expect(resourceInstance.getSubResources()).andReturn(mapSubResources).anyTimes();
|
|
|
+
|
|
|
+ expect(resourceDefinition.getType()).andReturn(Resource.Type.Service).anyTimes();
|
|
|
+ expect(controller.getSchema(Resource.Type.Service)).andReturn(serviceSchema).anyTimes();
|
|
|
+ expect(result.getResultTree()).andReturn(resultTree).anyTimes();
|
|
|
+ expect(resource1.getPropertyValue(resourceKeyProperty)).andReturn("id1").anyTimes();
|
|
|
+ expect(resource2.getPropertyValue(resourceKeyProperty)).andReturn("id2").anyTimes();
|
|
|
+
|
|
|
+ replay(request, resourceInstance, resourceDefinition, query, predicate, result, subResource,
|
|
|
+ subResourceDefinition, controller, serviceSchema, componentSchema, resource1, resource2,
|
|
|
+ pm, createResource, status, statusResource1, statusResource2,
|
|
|
+ readHandler, queryResultStatus);
|
|
|
+
|
|
|
+ //test
|
|
|
+ Result testResult = new TestQueryCreateHandler(null, controller, pm, readHandler).
|
|
|
+ handleRequest(request);
|
|
|
+
|
|
|
+ ResultStatus resultStatus = testResult.getStatus();
|
|
|
+ assertEquals(ResultStatus.STATUS.BAD_REQUEST, resultStatus.getStatus());
|
|
|
+ assertEquals("Invalid Request: The specified sub-resource name is not valid: 'INVALID'.", resultStatus.getMessage());
|
|
|
+
|
|
|
+ verify(request, resourceInstance, resourceDefinition, query, predicate, result, subResource,
|
|
|
+ subResourceDefinition, controller, serviceSchema, componentSchema, resource1, resource2,
|
|
|
+ pm, createResource, status, statusResource1, statusResource2,
|
|
|
+ readHandler, queryResultStatus);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void tesHandleRequest_NoSubResourcesSpecified() {
|
|
|
+ Request request = createNiceMock(Request.class);
|
|
|
+ ResourceInstance resourceInstance = createNiceMock(ResourceInstance.class);
|
|
|
+ ResourceDefinition resourceDefinition = createNiceMock(ResourceDefinition.class);
|
|
|
+ Query query = createNiceMock(Query.class);
|
|
|
+ Predicate predicate = createNiceMock(Predicate.class);
|
|
|
+ Result result = createNiceMock(Result.class);
|
|
|
+ ResourceInstance subResource = createNiceMock(ResourceInstance.class);
|
|
|
+ ResourceDefinition subResourceDefinition = createNiceMock(ResourceDefinition.class);
|
|
|
+ ClusterController controller = createNiceMock(ClusterController.class);
|
|
|
+ Schema serviceSchema = createNiceMock(Schema.class);
|
|
|
+ Schema componentSchema = createNiceMock(Schema.class);
|
|
|
+ String resourceKeyProperty = "resourceKeyProperty";
|
|
|
+ Resource resource1 = createNiceMock(Resource.class);
|
|
|
+ Resource resource2 = createNiceMock(Resource.class);
|
|
|
+ PersistenceManager pm = createNiceMock(PersistenceManager.class);
|
|
|
+ ResourceInstance createResource = createNiceMock(ResourceInstance.class);
|
|
|
+ RequestStatus status = createNiceMock(RequestStatus.class);
|
|
|
+ Resource statusResource1 = createNiceMock(Resource.class);
|
|
|
+ Resource statusResource2 = createNiceMock(Resource.class);
|
|
|
+ RequestHandler readHandler = createStrictMock(RequestHandler.class);
|
|
|
+ ResultStatus queryResultStatus = createNiceMock(ResultStatus.class);
|
|
|
+
|
|
|
+ Map<Resource.Type, String> mapIds = new HashMap<Resource.Type, String>();
|
|
|
+
|
|
|
+ Set<NamedPropertySet> setRequestProps = new HashSet<NamedPropertySet>();
|
|
|
+ // no body specified so no props
|
|
|
+
|
|
|
+ TreeNode<Resource> resultTree = new TreeNodeImpl<Resource>(null, null, "result");
|
|
|
+ resultTree.addChild(resource1, "resource1");
|
|
|
+ resultTree.addChild(resource2, "resource2");
|
|
|
+
|
|
|
+ //expectations
|
|
|
+ expect(readHandler.handleRequest(request)).andReturn(result);
|
|
|
+ expect(result.getStatus()).andReturn(queryResultStatus).anyTimes();
|
|
|
+ expect(queryResultStatus.isErrorState()).andReturn(false);
|
|
|
+ expect(result.getResultTree()).andReturn(resultTree);
|
|
|
+
|
|
|
+ expect(request.getResource()).andReturn(resourceInstance).anyTimes();
|
|
|
+ expect(request.getHttpBodyProperties()).andReturn(setRequestProps).anyTimes();
|
|
|
+
|
|
|
+ expect(resourceInstance.getResourceDefinition()).andReturn(resourceDefinition).anyTimes();
|
|
|
+ expect(resourceInstance.getIds()).andReturn(mapIds).anyTimes();
|
|
|
+
|
|
|
+ expect(resourceDefinition.getType()).andReturn(Resource.Type.Service).anyTimes();
|
|
|
+ expect(controller.getSchema(Resource.Type.Service)).andReturn(serviceSchema).anyTimes();
|
|
|
+ expect(result.getResultTree()).andReturn(resultTree).anyTimes();
|
|
|
+ expect(resource1.getPropertyValue(resourceKeyProperty)).andReturn("id1").anyTimes();
|
|
|
+ expect(resource2.getPropertyValue(resourceKeyProperty)).andReturn("id2").anyTimes();
|
|
|
+
|
|
|
+ replay(request, resourceInstance, resourceDefinition, query, predicate, result, subResource,
|
|
|
+ subResourceDefinition, controller, serviceSchema, componentSchema, resource1, resource2,
|
|
|
+ pm, createResource, status, statusResource1, statusResource2,
|
|
|
+ readHandler, queryResultStatus);
|
|
|
+
|
|
|
+ //test
|
|
|
+ Result testResult = new TestQueryCreateHandler(null, controller, pm, readHandler).
|
|
|
+ handleRequest(request);
|
|
|
+
|
|
|
+ ResultStatus resultStatus = testResult.getStatus();
|
|
|
+ assertEquals(ResultStatus.STATUS.BAD_REQUEST, resultStatus.getStatus());
|
|
|
+ assertEquals("Invalid Request: A minimum of one sub-resource must be specified for creation.", resultStatus.getMessage());
|
|
|
+
|
|
|
+ verify(request, resourceInstance, resourceDefinition, query, predicate, result, subResource,
|
|
|
+ subResourceDefinition, controller, serviceSchema, componentSchema, resource1, resource2,
|
|
|
+ pm, createResource, status, statusResource1, statusResource2,
|
|
|
+ readHandler, queryResultStatus);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ //todo: this is currently not supported. We may wish to add this support in the future.
|
|
|
+ @Test
|
|
|
+ public void testHandleRequest_MultipleSubResources() throws Exception {
|
|
|
+ Request request = createNiceMock(Request.class);
|
|
|
+ ResourceInstance resourceInstance = createNiceMock(ResourceInstance.class);
|
|
|
+ ResourceDefinition resourceDefinition = createNiceMock(ResourceDefinition.class);
|
|
|
+ ResourceInstanceFactory resourceInstanceFactory = createNiceMock(ResourceInstanceFactory.class);
|
|
|
+ Query query = createNiceMock(Query.class);
|
|
|
+ Predicate predicate = createNiceMock(Predicate.class);
|
|
|
+ Result result = createNiceMock(Result.class);
|
|
|
+ ResourceInstance subResource1 = createNiceMock(ResourceInstance.class);
|
|
|
+ ResourceInstance subResource2 = createNiceMock(ResourceInstance.class);
|
|
|
+ ResourceDefinition subResourceDefinition1 = createNiceMock(ResourceDefinition.class);
|
|
|
+ ResourceDefinition subResourceDefinition2 = createNiceMock(ResourceDefinition.class);
|
|
|
+ ClusterController controller = createNiceMock(ClusterController.class);
|
|
|
+ Schema serviceSchema = createNiceMock(Schema.class);
|
|
|
+ Schema subResSchema1 = createNiceMock(Schema.class);
|
|
|
+ Schema subResSchema2 = createNiceMock(Schema.class);
|
|
|
+ String resourceKeyProperty = "resourceKeyProperty";
|
|
|
+ String createKeyProperty = "createKeyProperty";
|
|
|
+ Resource resource1 = createNiceMock(Resource.class);
|
|
|
+ Resource resource2 = createNiceMock(Resource.class);
|
|
|
+ PersistenceManager pm = createNiceMock(PersistenceManager.class);
|
|
|
+ ResourceInstance createResource = createNiceMock(ResourceInstance.class);
|
|
|
+ RequestStatus status = createNiceMock(RequestStatus.class);
|
|
|
+ Resource statusResource1 = createNiceMock(Resource.class);
|
|
|
+ Resource statusResource2 = createNiceMock(Resource.class);
|
|
|
+ RequestHandler readHandler = createStrictMock(RequestHandler.class);
|
|
|
+ ResultStatus queryResultStatus = createNiceMock(ResultStatus.class);
|
|
|
+
|
|
|
+ // test request body. Multiple valid sub-resource types
|
|
|
+ // {
|
|
|
+ // "foo" : [
|
|
|
+ // { "prop" : "val" }
|
|
|
+ // ],
|
|
|
+ // "bar" : [
|
|
|
+ // { "prop" : "val" }
|
|
|
+ // ]
|
|
|
+ // }
|
|
|
+
|
|
|
+ Map<Resource.Type, String> mapIds = new HashMap<Resource.Type, String>();
|
|
|
+
|
|
|
+ Set<NamedPropertySet> setRequestProps = new HashSet<NamedPropertySet>();
|
|
|
+ setRequestProps.add(new NamedPropertySet("foo", Collections.<String, Object>singletonMap(
|
|
|
+ PropertyHelper.getPropertyId("ServiceComponentInfo", "component_name"), "SECONDARY_NAMENODE")));
|
|
|
+ setRequestProps.add(new NamedPropertySet("bar", Collections.<String, Object>singletonMap(
|
|
|
+ PropertyHelper.getPropertyId("ServiceComponentInfo", "component_name"), "HDFS_CLIENT")));
|
|
|
+
|
|
|
+ Map<String, ResourceInstance> mapSubResources = new HashMap<String, ResourceInstance>();
|
|
|
+ mapSubResources.put("foo", subResource1);
|
|
|
+ mapSubResources.put("bar", subResource2);
|
|
|
+
|
|
|
+ TreeNode<Resource> resultTree = new TreeNodeImpl<Resource>(null, null, "result");
|
|
|
+ resultTree.addChild(resource1, "resource1");
|
|
|
+ resultTree.addChild(resource2, "resource2");
|
|
|
+
|
|
|
+ //expectations
|
|
|
+ expect(readHandler.handleRequest(request)).andReturn(result);
|
|
|
+ expect(result.getStatus()).andReturn(queryResultStatus).anyTimes();
|
|
|
+ expect(queryResultStatus.isErrorState()).andReturn(false);
|
|
|
+ expect(result.getResultTree()).andReturn(resultTree);
|
|
|
+
|
|
|
+ expect(request.getResource()).andReturn(resourceInstance).anyTimes();
|
|
|
+ expect(request.getHttpBodyProperties()).andReturn(setRequestProps).anyTimes();
|
|
|
+
|
|
|
+ expect(resourceInstance.getResourceDefinition()).andReturn(resourceDefinition).anyTimes();
|
|
|
+ expect(resourceInstance.getIds()).andReturn(mapIds).anyTimes();
|
|
|
+ expect(resourceInstance.getSubResources()).andReturn(mapSubResources).anyTimes();
|
|
|
+
|
|
|
+ expect(resourceDefinition.getType()).andReturn(Resource.Type.Service).anyTimes();
|
|
|
+
|
|
|
+ expect(subResource1.getResourceDefinition()).andReturn(subResourceDefinition1).anyTimes();
|
|
|
+ expect(subResourceDefinition1.getType()).andReturn(Resource.Type.Component).anyTimes();
|
|
|
+ expect(subResource2.getResourceDefinition()).andReturn(subResourceDefinition2).anyTimes();
|
|
|
+ expect(subResourceDefinition2.getType()).andReturn(Resource.Type.HostComponent).anyTimes();
|
|
|
+
|
|
|
+ expect(controller.getSchema(Resource.Type.Service)).andReturn(serviceSchema).anyTimes();
|
|
|
+ expect(controller.getSchema(Resource.Type.Component)).andReturn(subResSchema1).anyTimes();
|
|
|
+ expect(controller.getSchema(Resource.Type.HostComponent)).andReturn(subResSchema2).anyTimes();
|
|
|
+
|
|
|
+ expect(serviceSchema.getKeyPropertyId(Resource.Type.Service)).andReturn(resourceKeyProperty).anyTimes();
|
|
|
+ expect(subResSchema1.getKeyPropertyId(Resource.Type.Service)).andReturn(createKeyProperty).anyTimes();
|
|
|
+ expect(subResSchema2.getKeyPropertyId(Resource.Type.Service)).andReturn(createKeyProperty).anyTimes();
|
|
|
+
|
|
|
+ expect(result.getResultTree()).andReturn(resultTree).anyTimes();
|
|
|
+ expect(resource1.getPropertyValue(resourceKeyProperty)).andReturn("id1").anyTimes();
|
|
|
+ expect(resource2.getPropertyValue(resourceKeyProperty)).andReturn("id2").anyTimes();
|
|
|
+
|
|
|
+
|
|
|
+ replay(request, resourceInstance, resourceDefinition, query, predicate, result, subResource1, subResource2,
|
|
|
+ subResourceDefinition1, subResourceDefinition2, controller, serviceSchema, subResSchema1, subResSchema2,
|
|
|
+ resource1, resource2, pm, resourceInstanceFactory, createResource, status, statusResource1, statusResource2,
|
|
|
+ readHandler, queryResultStatus);
|
|
|
+
|
|
|
+ //test
|
|
|
+ Result testResult = new TestQueryCreateHandler(resourceInstanceFactory, controller, pm, readHandler).
|
|
|
+ handleRequest(request);
|
|
|
+
|
|
|
+ ResultStatus resultStatus = testResult.getStatus();
|
|
|
+ assertEquals(ResultStatus.STATUS.BAD_REQUEST, resultStatus.getStatus());
|
|
|
+ assertEquals("Invalid Request: Multiple sub-resource types may not be created in the same request.",
|
|
|
+ resultStatus.getMessage());
|
|
|
+
|
|
|
+
|
|
|
+ verify(request, resourceInstance, resourceDefinition, query, predicate, result, subResource1, subResource2,
|
|
|
+ subResourceDefinition1, subResourceDefinition2, controller, serviceSchema, subResSchema1, subResSchema2,
|
|
|
+ resource1, resource2, pm, resourceInstanceFactory, createResource, status, statusResource1, statusResource2,
|
|
|
+ readHandler, queryResultStatus);
|
|
|
+ }
|
|
|
+
|
|
|
static class TestQueryCreateHandler extends QueryCreateHandler {
|
|
|
private ResourceInstanceFactory m_resourceFactory;
|
|
|
private ClusterController m_controller;
|
|
@@ -224,29 +584,4 @@ public class QueryCreateHandlerTest {
|
|
|
return m_testReadHandler;
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testHandleRequest__InvalidQueryException() throws Exception {
|
|
|
- Request request = createStrictMock(Request.class);
|
|
|
- ResourceInstance resource = createStrictMock(ResourceInstance.class);
|
|
|
- Query query = createMock(Query.class);
|
|
|
- InvalidQueryException exception = new InvalidQueryException("test");
|
|
|
-
|
|
|
- expect(request.getResource()).andReturn(resource);
|
|
|
- expect(resource.getQuery()).andReturn(query);
|
|
|
-
|
|
|
- expect(request.getFields()).andReturn(Collections.<String, TemporalInfo>emptyMap());
|
|
|
-
|
|
|
- expect(request.getQueryPredicate()).andThrow(exception);
|
|
|
- replay(request, resource, query);
|
|
|
-
|
|
|
- //test
|
|
|
- QueryCreateHandler handler = new QueryCreateHandler();
|
|
|
- Result result = handler.handleRequest(request);
|
|
|
-
|
|
|
- assertEquals(ResultStatus.STATUS.BAD_REQUEST, result.getStatus().getStatus());
|
|
|
- assertTrue(result.getStatus().getMessage().contains(exception.getMessage()));
|
|
|
- verify(request, resource, query);
|
|
|
- }
|
|
|
-
|
|
|
}
|