|
@@ -0,0 +1,615 @@
|
|
|
+package org.apache.ambari.server.api.query;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 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.
|
|
|
+ */
|
|
|
+
|
|
|
+import org.apache.ambari.server.api.resources.ResourceDefinition;
|
|
|
+import org.apache.ambari.server.api.util.TreeNode;
|
|
|
+import org.apache.ambari.server.api.util.TreeNodeImpl;
|
|
|
+import org.apache.ambari.server.controller.predicate.AndPredicate;
|
|
|
+import org.apache.ambari.server.controller.spi.*;
|
|
|
+import org.apache.ambari.server.controller.utilities.PredicateBuilder;
|
|
|
+import org.apache.ambari.server.api.resources.ResourceInstance;
|
|
|
+import org.apache.ambari.server.api.services.Result;
|
|
|
+import org.apache.ambari.server.controller.utilities.PropertyHelper;
|
|
|
+import org.junit.After;
|
|
|
+import org.junit.Test;
|
|
|
+
|
|
|
+import java.util.*;
|
|
|
+
|
|
|
+import static org.easymock.EasyMock.*;
|
|
|
+
|
|
|
+import static org.easymock.EasyMock.eq;
|
|
|
+import static org.junit.Assert.assertEquals;
|
|
|
+import static org.junit.Assert.assertSame;
|
|
|
+import static org.junit.Assert.assertTrue;
|
|
|
+
|
|
|
+
|
|
|
+//todo: add assertions for temporal info
|
|
|
+public class QueryImplTest {
|
|
|
+
|
|
|
+ ClusterController m_controller = createNiceMock(ClusterController.class);
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testExecute__Component_instance_noSpecifiedProps() throws Exception {
|
|
|
+ Result result = createNiceMock(Result.class);
|
|
|
+ ResourceInstance componentResourceInstance = createNiceMock(ResourceInstance.class);
|
|
|
+ ResourceDefinition componentResourceDefinition = createNiceMock(ResourceDefinition.class);
|
|
|
+ ResourceInstance hostResourceInstance = createNiceMock(ResourceInstance.class);
|
|
|
+ ResourceDefinition hostResourceDefinition = createNiceMock(ResourceDefinition.class);
|
|
|
+ Schema componentSchema = createNiceMock(Schema.class);
|
|
|
+ Resource componentResource = createNiceMock(Resource.class);
|
|
|
+ String componentPropertyId = "componentId";
|
|
|
+ Query hostComponentQuery = createStrictMock(Query.class);
|
|
|
+ Result hostComponentQueryResult = createNiceMock(Result.class);
|
|
|
+
|
|
|
+ TreeNode<Resource> tree = new TreeNodeImpl<Resource>(null, null, null);
|
|
|
+ TreeNode<Resource> hostComponentResultNode = new TreeNodeImpl<Resource>(null, null, null);
|
|
|
+ List<Resource> listResources = Collections.singletonList(componentResource);
|
|
|
+
|
|
|
+ Map<Resource.Type, String> mapResourceIds = new HashMap<Resource.Type, String>();
|
|
|
+ mapResourceIds.put(Resource.Type.Cluster, "clusterName");
|
|
|
+ mapResourceIds.put(Resource.Type.Service, "serviceName");
|
|
|
+ mapResourceIds.put(Resource.Type.Component, "componentName");
|
|
|
+
|
|
|
+ Map<String, ResourceInstance> mapChildren = new HashMap<String, ResourceInstance>();
|
|
|
+ mapChildren.put("host_components", hostResourceInstance);
|
|
|
+
|
|
|
+ PredicateBuilder pb = new PredicateBuilder();
|
|
|
+ Predicate predicate = pb.property("clusterId").equals("clusterName").and().
|
|
|
+ property("serviceId").equals("serviceName").and().
|
|
|
+ property("componentId").equals("componentName").toPredicate();
|
|
|
+
|
|
|
+ // expectations
|
|
|
+ expect(componentResourceInstance.getResourceDefinition()).andReturn(componentResourceDefinition).anyTimes();
|
|
|
+ expect(componentResourceInstance.getSubResources()).andReturn(mapChildren).anyTimes();
|
|
|
+ expect(componentResourceInstance.getIds()).andReturn(mapResourceIds).anyTimes();
|
|
|
+
|
|
|
+ expect(componentResourceDefinition.getType()).andReturn(Resource.Type.Component).anyTimes();
|
|
|
+
|
|
|
+ expect(componentResource.getType()).andReturn(Resource.Type.Component).anyTimes();
|
|
|
+ expect(componentResource.getPropertyValue(componentPropertyId)).andReturn("keyVal");
|
|
|
+
|
|
|
+ expect(m_controller.getSchema(Resource.Type.Component)).andReturn(componentSchema).anyTimes();
|
|
|
+
|
|
|
+ expect(componentSchema.getKeyPropertyId(Resource.Type.Cluster)).andReturn("clusterId");
|
|
|
+ expect(componentSchema.getKeyPropertyId(Resource.Type.Service)).andReturn("serviceId");
|
|
|
+ expect(componentSchema.getKeyPropertyId(Resource.Type.Component)).andReturn(componentPropertyId).atLeastOnce();
|
|
|
+
|
|
|
+ expect(m_controller.getResources(eq(Resource.Type.Component), eq(PropertyHelper.getReadRequest(Collections.<String>emptySet())),
|
|
|
+ eq(predicate))).andReturn(listResources);
|
|
|
+
|
|
|
+ expect(result.getResultTree()).andReturn(tree).anyTimes();
|
|
|
+
|
|
|
+ Map<Resource.Type, String> mapResourceIdsSet = new HashMap<Resource.Type, String>(mapResourceIds);
|
|
|
+ mapResourceIdsSet.put(Resource.Type.Component, "keyVal");
|
|
|
+ hostResourceInstance.setIds(mapResourceIdsSet);
|
|
|
+ expect(hostResourceInstance.getResourceDefinition()).andReturn(hostResourceDefinition).anyTimes();
|
|
|
+ expect(hostResourceInstance.getQuery()).andReturn(hostComponentQuery).anyTimes();
|
|
|
+
|
|
|
+ expect(hostResourceDefinition.getType()).andReturn(Resource.Type.Host);
|
|
|
+ expect(hostComponentQuery.execute()).andReturn(hostComponentQueryResult);
|
|
|
+ expect(hostComponentQueryResult.getResultTree()).andReturn(hostComponentResultNode);
|
|
|
+
|
|
|
+ replay(m_controller, result, componentResourceInstance, componentResourceDefinition, hostResourceInstance, componentSchema, componentResource,
|
|
|
+ hostComponentQuery, hostComponentQueryResult);
|
|
|
+
|
|
|
+ QueryImpl query = new TestQuery(componentResourceInstance, result);
|
|
|
+ query.execute();
|
|
|
+
|
|
|
+ verify(m_controller, result, componentResourceInstance, componentResourceDefinition, hostResourceInstance, componentSchema, componentResource,
|
|
|
+ hostComponentQuery, hostComponentQueryResult);
|
|
|
+
|
|
|
+ assertEquals(1, tree.getChildren().size());
|
|
|
+ TreeNode<Resource> componentNode = tree.getChild("Component:1");
|
|
|
+ assertEquals("Component:1", componentNode.getName());
|
|
|
+ assertEquals(componentResource, componentNode.getObject());
|
|
|
+ assertEquals(1, componentNode.getChildren().size());
|
|
|
+ assertSame(hostComponentResultNode, componentNode.getChild("host_components"));
|
|
|
+ assertEquals("false", hostComponentResultNode.getProperty("isCollection"));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testExecute__Component_collection_noSpecifiedProps() throws Exception {
|
|
|
+ Result result = createNiceMock(Result.class);
|
|
|
+ ResourceInstance componentResourceInstance = createNiceMock(ResourceInstance.class);
|
|
|
+ ResourceDefinition componentResourceDefinition = createNiceMock(ResourceDefinition.class);
|
|
|
+ Schema componentSchema = createNiceMock(Schema.class);
|
|
|
+ Resource componentResource = createNiceMock(Resource.class);
|
|
|
+ String componentPropertyId = "componentId";
|
|
|
+ String servicePropertyId = "serviceId";
|
|
|
+ String clusterPropertyId = "clusterId";
|
|
|
+
|
|
|
+ Set<String> setPropertyIds = new HashSet<String>();
|
|
|
+ setPropertyIds.add(clusterPropertyId);
|
|
|
+ setPropertyIds.add(servicePropertyId);
|
|
|
+ setPropertyIds.add(componentPropertyId);
|
|
|
+
|
|
|
+ TreeNode<Resource> tree = new TreeNodeImpl<Resource>(null, null, null);
|
|
|
+ List<Resource> listResources = Collections.singletonList(componentResource);
|
|
|
+
|
|
|
+ Map<Resource.Type, String> mapResourceIds = new HashMap<Resource.Type, String>();
|
|
|
+ mapResourceIds.put(Resource.Type.Cluster, "clusterName");
|
|
|
+ mapResourceIds.put(Resource.Type.Service, "serviceName");
|
|
|
+ mapResourceIds.put(Resource.Type.Component, null);
|
|
|
+
|
|
|
+ PredicateBuilder pb = new PredicateBuilder();
|
|
|
+ Predicate predicate = pb.property("clusterId").equals("clusterName").and().
|
|
|
+ property("serviceId").equals("serviceName").toPredicate();
|
|
|
+
|
|
|
+ // expectations
|
|
|
+ expect(componentResource.getType()).andReturn(Resource.Type.Component).anyTimes();
|
|
|
+
|
|
|
+ expect(componentResourceInstance.getIds()).andReturn(mapResourceIds).anyTimes();
|
|
|
+ expect(componentResourceInstance.getResourceDefinition()).andReturn(componentResourceDefinition).anyTimes();
|
|
|
+
|
|
|
+ expect(componentResourceDefinition.getType()).andReturn(Resource.Type.Component).anyTimes();
|
|
|
+
|
|
|
+ expect(m_controller.getSchema(Resource.Type.Component)).andReturn(componentSchema).anyTimes();
|
|
|
+
|
|
|
+ expect(componentSchema.getKeyPropertyId(Resource.Type.Component)).andReturn(componentPropertyId).anyTimes();
|
|
|
+ expect(componentSchema.getKeyPropertyId(Resource.Type.Cluster)).andReturn("clusterId").anyTimes();
|
|
|
+ expect(componentSchema.getKeyPropertyId(Resource.Type.Service)).andReturn("serviceId").anyTimes();
|
|
|
+
|
|
|
+ expect(result.getResultTree()).andReturn(tree).anyTimes();
|
|
|
+
|
|
|
+ expect(m_controller.getResources(eq(Resource.Type.Component), eq(PropertyHelper.getReadRequest(setPropertyIds)),
|
|
|
+ eq(predicate))).andReturn(listResources);
|
|
|
+
|
|
|
+ expect(componentResourceInstance.getSubResources()).andReturn(Collections.<String, ResourceInstance>emptyMap()).anyTimes();
|
|
|
+
|
|
|
+ replay(m_controller, result,componentResourceInstance, componentResourceDefinition, componentSchema, componentResource);
|
|
|
+
|
|
|
+ QueryImpl query = new TestQuery(componentResourceInstance, result);
|
|
|
+ query.execute();
|
|
|
+
|
|
|
+ verify(m_controller, result, componentResourceInstance, componentResourceDefinition, componentSchema, componentResource);
|
|
|
+
|
|
|
+ assertEquals("true", tree.getProperty("isCollection"));
|
|
|
+ assertEquals(1, tree.getChildren().size());
|
|
|
+ TreeNode<Resource> componentNode = tree.getChild("Component:1");
|
|
|
+ assertSame(componentResource, componentNode.getObject());
|
|
|
+ assertEquals(0, componentNode.getChildren().size());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testExecute__collection_nullInternalPredicate_nullUserPredicate() throws Exception {
|
|
|
+ Result result = createNiceMock(Result.class);
|
|
|
+ ResourceInstance clusterResourceInstance = createNiceMock(ResourceInstance.class);
|
|
|
+ ResourceDefinition clusterResourceDefinition = createNiceMock(ResourceDefinition.class);
|
|
|
+ Schema clusterSchema = createNiceMock(Schema.class);
|
|
|
+ Resource clusterResource = createNiceMock(Resource.class);
|
|
|
+ String clusterPropertyId = "clusterId";
|
|
|
+
|
|
|
+ TreeNode<Resource> tree = new TreeNodeImpl<Resource>(null, null, null);
|
|
|
+ List<Resource> listResources = Collections.singletonList(clusterResource);
|
|
|
+
|
|
|
+ Map<Resource.Type, String> mapResourceIds = new HashMap<Resource.Type, String>();
|
|
|
+
|
|
|
+ // expectations
|
|
|
+ expect(clusterResource.getType()).andReturn(Resource.Type.Cluster).anyTimes();
|
|
|
+
|
|
|
+ expect(clusterResourceInstance.getIds()).andReturn(mapResourceIds).anyTimes();
|
|
|
+ expect(clusterResourceInstance.getResourceDefinition()).andReturn(clusterResourceDefinition).anyTimes();
|
|
|
+
|
|
|
+ expect(clusterResourceDefinition.getType()).andReturn(Resource.Type.Component).anyTimes();
|
|
|
+
|
|
|
+ expect(m_controller.getSchema(Resource.Type.Component)).andReturn(clusterSchema).atLeastOnce();
|
|
|
+
|
|
|
+ expect(clusterSchema.getKeyPropertyId(Resource.Type.Component)).andReturn(clusterPropertyId).atLeastOnce();
|
|
|
+
|
|
|
+ expect(result.getResultTree()).andReturn(tree).atLeastOnce();
|
|
|
+
|
|
|
+ expect(m_controller.getResources(eq(Resource.Type.Component), eq(PropertyHelper.getReadRequest(Collections.singleton(clusterPropertyId))),
|
|
|
+ (Predicate) isNull())).andReturn(listResources);
|
|
|
+
|
|
|
+
|
|
|
+ expect(clusterResourceInstance.getSubResources()).andReturn(Collections.<String, ResourceInstance>emptyMap()).anyTimes();
|
|
|
+
|
|
|
+ replay(m_controller, result, clusterResourceInstance, clusterResourceDefinition, clusterSchema, clusterResource);
|
|
|
+
|
|
|
+ QueryImpl query = new TestQuery(clusterResourceInstance, result);
|
|
|
+ query.execute();
|
|
|
+
|
|
|
+ verify(m_controller, result, clusterResourceInstance, clusterResourceDefinition, clusterSchema, clusterResource);
|
|
|
+
|
|
|
+ assertEquals("true", tree.getProperty("isCollection"));
|
|
|
+ assertEquals(1, tree.getChildren().size());
|
|
|
+ TreeNode<Resource> clusterNode = tree.getChild("Cluster:1");
|
|
|
+ assertSame(clusterResource, clusterNode.getObject());
|
|
|
+ assertEquals(0, clusterNode.getChildren().size());
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testExecute__collection_nullInternalPredicate_nonNullUserPredicate() throws Exception {
|
|
|
+ Result result = createNiceMock(Result.class);
|
|
|
+ ResourceInstance clusterResourceInstance = createNiceMock(ResourceInstance.class);
|
|
|
+ ResourceDefinition clusterResourceDefinition = createNiceMock(ResourceDefinition.class);
|
|
|
+ Schema clusterSchema = createNiceMock(Schema.class);
|
|
|
+ Resource clusterResource = createNiceMock(Resource.class);
|
|
|
+ String clusterPropertyId = "clusterId";
|
|
|
+ Predicate userPredicate = createNiceMock(Predicate.class);
|
|
|
+
|
|
|
+ TreeNode<Resource> tree = new TreeNodeImpl<Resource>(null, null, null);
|
|
|
+ List<Resource> listResources = Collections.singletonList(clusterResource);
|
|
|
+
|
|
|
+ Map<Resource.Type, String> mapResourceIds = new HashMap<Resource.Type, String>();
|
|
|
+
|
|
|
+ // expectations
|
|
|
+ expect(clusterResource.getType()).andReturn(Resource.Type.Cluster).anyTimes();
|
|
|
+
|
|
|
+ expect(clusterResourceInstance.getIds()).andReturn(mapResourceIds).anyTimes();
|
|
|
+ expect(clusterResourceInstance.getResourceDefinition()).andReturn(clusterResourceDefinition).anyTimes();
|
|
|
+
|
|
|
+ expect(clusterResourceDefinition.getType()).andReturn(Resource.Type.Component).atLeastOnce();
|
|
|
+
|
|
|
+ expect(m_controller.getSchema(Resource.Type.Component)).andReturn(clusterSchema).anyTimes();
|
|
|
+ expect(clusterSchema.getKeyPropertyId(Resource.Type.Component)).andReturn(clusterPropertyId).anyTimes();
|
|
|
+
|
|
|
+ expect(result.getResultTree()).andReturn(tree).anyTimes();
|
|
|
+
|
|
|
+ expect(m_controller.getResources(eq(Resource.Type.Component), eq(PropertyHelper.getReadRequest(Collections.singleton(clusterPropertyId))),
|
|
|
+ eq(userPredicate))).andReturn(listResources);
|
|
|
+
|
|
|
+ expect(clusterResourceInstance.getSubResources()).andReturn(Collections.<String, ResourceInstance>emptyMap()).anyTimes();
|
|
|
+
|
|
|
+ replay(m_controller, result,clusterResourceInstance, clusterResourceDefinition, clusterSchema, clusterResource, userPredicate);
|
|
|
+
|
|
|
+ QueryImpl query = new TestQuery(clusterResourceInstance, result);
|
|
|
+ query.setUserPredicate(userPredicate);
|
|
|
+ query.execute();
|
|
|
+
|
|
|
+ verify(m_controller, result, clusterResourceInstance, clusterResourceDefinition, clusterSchema, clusterResource, userPredicate);
|
|
|
+
|
|
|
+ assertEquals("true", tree.getProperty("isCollection"));
|
|
|
+ assertEquals(1, tree.getChildren().size());
|
|
|
+ TreeNode<Resource> clusterNode = tree.getChild("Cluster:1");
|
|
|
+ assertSame(clusterResource, clusterNode.getObject());
|
|
|
+ assertEquals(0, clusterNode.getChildren().size());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testExecute__collection_nonNullInternalPredicate_nonNullUserPredicate() throws Exception {
|
|
|
+ Result result = createNiceMock(Result.class);
|
|
|
+ ResourceInstance componentResourceInstance = createNiceMock(ResourceInstance.class);
|
|
|
+ ResourceDefinition componentResourceDefinition = createNiceMock(ResourceDefinition.class);
|
|
|
+ Schema componentSchema = createNiceMock(Schema.class);
|
|
|
+ Resource componentResource = createNiceMock(Resource.class);
|
|
|
+ String componentPropertyId = "componentId";
|
|
|
+ String servicePropertyId = "serviceId";
|
|
|
+ String clusterPropertyId = "clusterId";
|
|
|
+
|
|
|
+ Set<String> setPropertyIds = new HashSet<String>();
|
|
|
+ setPropertyIds.add(clusterPropertyId);
|
|
|
+ setPropertyIds.add(servicePropertyId);
|
|
|
+ setPropertyIds.add(componentPropertyId);
|
|
|
+
|
|
|
+ TreeNode<Resource> tree = new TreeNodeImpl<Resource>(null, null, null);
|
|
|
+ List<Resource> listResources = Collections.singletonList(componentResource);
|
|
|
+
|
|
|
+ Map<Resource.Type, String> mapResourceIds = new HashMap<Resource.Type, String>();
|
|
|
+ mapResourceIds.put(Resource.Type.Cluster, "clusterName");
|
|
|
+ mapResourceIds.put(Resource.Type.Service, "serviceName");
|
|
|
+ mapResourceIds.put(Resource.Type.Component, null);
|
|
|
+
|
|
|
+ PredicateBuilder pb = new PredicateBuilder();
|
|
|
+ Predicate internalPredicate = pb.property("clusterId").equals("clusterName").and().
|
|
|
+ property("serviceId").equals("serviceName").toPredicate();
|
|
|
+
|
|
|
+ pb = new PredicateBuilder();
|
|
|
+ Predicate userPredicate = pb.property("foo").equals("bar").toPredicate();
|
|
|
+ // combine internal predicate and user predicate
|
|
|
+ //todo: for now, need to cast to BasePredicate
|
|
|
+ Predicate predicate = new AndPredicate(internalPredicate, userPredicate);
|
|
|
+
|
|
|
+ // expectations
|
|
|
+ expect(componentResource.getType()).andReturn(Resource.Type.Component).anyTimes();
|
|
|
+
|
|
|
+ expect(componentResourceInstance.getIds()).andReturn(mapResourceIds).anyTimes();
|
|
|
+ expect(componentResourceInstance.getResourceDefinition()).andReturn(componentResourceDefinition).anyTimes();
|
|
|
+
|
|
|
+ expect(componentResourceDefinition.getType()).andReturn(Resource.Type.Component).anyTimes();
|
|
|
+
|
|
|
+ expect(m_controller.getSchema(Resource.Type.Component)).andReturn(componentSchema).anyTimes();
|
|
|
+ expect(componentSchema.getKeyPropertyId(Resource.Type.Component)).andReturn(componentPropertyId).atLeastOnce();
|
|
|
+ expect(componentSchema.getKeyPropertyId(Resource.Type.Cluster)).andReturn("clusterId").anyTimes();
|
|
|
+ expect(componentSchema.getKeyPropertyId(Resource.Type.Service)).andReturn("serviceId").anyTimes();
|
|
|
+
|
|
|
+ expect(result.getResultTree()).andReturn(tree).anyTimes();
|
|
|
+
|
|
|
+ expect(m_controller.getResources(eq(Resource.Type.Component), eq(PropertyHelper.getReadRequest(setPropertyIds)),
|
|
|
+ eq(predicate))).andReturn(listResources);
|
|
|
+
|
|
|
+ expect(componentResourceInstance.getSubResources()).andReturn(Collections.<String, ResourceInstance>emptyMap()).anyTimes();
|
|
|
+
|
|
|
+ replay(m_controller, result, componentResourceInstance, componentResourceDefinition, componentSchema, componentResource);
|
|
|
+
|
|
|
+ QueryImpl query = new TestQuery(componentResourceInstance, result);
|
|
|
+ query.setUserPredicate(userPredicate);
|
|
|
+ query.execute();
|
|
|
+
|
|
|
+ verify(m_controller, result, componentResourceInstance, componentResourceDefinition, componentSchema, componentResource);
|
|
|
+
|
|
|
+ assertEquals("true", tree.getProperty("isCollection"));
|
|
|
+ assertEquals(1, tree.getChildren().size());
|
|
|
+ TreeNode<Resource> componentNode = tree.getChild("Component:1");
|
|
|
+ assertSame(componentResource, componentNode.getObject());
|
|
|
+ assertEquals(0, componentNode.getChildren().size());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testAddProperty__localProperty() throws Exception {
|
|
|
+ ResourceInstance resource = createNiceMock(ResourceInstance.class);
|
|
|
+ ResourceDefinition resourceDefinition = createNiceMock(ResourceDefinition.class);
|
|
|
+ Schema schema = createNiceMock(Schema.class);
|
|
|
+
|
|
|
+ //expectations
|
|
|
+ expect(resource.getResourceDefinition()).andReturn(resourceDefinition).anyTimes();
|
|
|
+ expect(resource.getSubResources()).andReturn(Collections.<String, ResourceInstance>emptyMap()).anyTimes();
|
|
|
+
|
|
|
+ expect(resourceDefinition.getType()).andReturn(Resource.Type.Service).anyTimes();
|
|
|
+
|
|
|
+ expect(m_controller.getSchema(Resource.Type.Service)).andReturn(schema).anyTimes();
|
|
|
+
|
|
|
+ replay(m_controller, resource, resourceDefinition, schema);
|
|
|
+
|
|
|
+ Query query = new TestQuery(resource, null);
|
|
|
+ query.addProperty("category", "property", null);
|
|
|
+
|
|
|
+ assertEquals(1, query.getProperties().size());
|
|
|
+ assertTrue(query.getProperties().contains("category/property"));
|
|
|
+
|
|
|
+ query.addProperty(null, "property2", null);
|
|
|
+
|
|
|
+ assertEquals(2, query.getProperties().size());
|
|
|
+ assertTrue(query.getProperties().contains("property2"));
|
|
|
+
|
|
|
+ verify(m_controller, resource, resourceDefinition, schema);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testAddProperty__allProperties() throws Exception {
|
|
|
+ ResourceInstance resource = createNiceMock(ResourceInstance.class);
|
|
|
+ ResourceDefinition resourceDefinition = createNiceMock(ResourceDefinition.class);
|
|
|
+ Schema schema = createNiceMock(Schema.class);
|
|
|
+
|
|
|
+ //expectations
|
|
|
+ expect(resource.getResourceDefinition()).andReturn(resourceDefinition).anyTimes();
|
|
|
+ expect(resource.getSubResources()).andReturn(Collections.<String, ResourceInstance>emptyMap()).anyTimes();
|
|
|
+
|
|
|
+ expect(resourceDefinition.getType()).andReturn(Resource.Type.Service).anyTimes();
|
|
|
+
|
|
|
+ expect(m_controller.getSchema(Resource.Type.Service)).andReturn(schema).anyTimes();
|
|
|
+
|
|
|
+ replay(m_controller, resource, resourceDefinition, schema);
|
|
|
+
|
|
|
+ Query query = new TestQuery(resource, null);
|
|
|
+ query.addProperty(null, "*", null);
|
|
|
+
|
|
|
+ assertEquals(0, query.getProperties().size());
|
|
|
+
|
|
|
+ verify(m_controller, resource, resourceDefinition, schema);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testAddProperty__allCategoryProperties() throws Exception {
|
|
|
+ ResourceInstance resource = createNiceMock(ResourceInstance.class);
|
|
|
+ ResourceDefinition resourceDefinition = createNiceMock(ResourceDefinition.class);
|
|
|
+ Schema schema = createNiceMock(Schema.class);
|
|
|
+
|
|
|
+ //expectations
|
|
|
+ expect(resource.getResourceDefinition()).andReturn(resourceDefinition).anyTimes();
|
|
|
+ expect(resource.getSubResources()).andReturn(Collections.<String, ResourceInstance>emptyMap()).anyTimes();
|
|
|
+
|
|
|
+ expect(resourceDefinition.getType()).andReturn(Resource.Type.Service).anyTimes();
|
|
|
+
|
|
|
+ expect(m_controller.getSchema(Resource.Type.Service)).andReturn(schema).anyTimes();
|
|
|
+
|
|
|
+ replay(m_controller, resource, resourceDefinition, schema);
|
|
|
+
|
|
|
+ Query query = new TestQuery(resource, null);
|
|
|
+ query.addProperty("category", "*", null);
|
|
|
+
|
|
|
+ assertEquals(1, query.getProperties().size());
|
|
|
+ assertTrue(query.getProperties().contains("category"));
|
|
|
+
|
|
|
+ verify(m_controller, resource, resourceDefinition, schema);
|
|
|
+ }
|
|
|
+
|
|
|
+ // this is the case where service can't differentiate category and property name
|
|
|
+ // the category name is give as the property name
|
|
|
+ @Test
|
|
|
+ public void testAddProperty__localCategory_asPropertyName() throws Exception {
|
|
|
+ ResourceInstance resource = createNiceMock(ResourceInstance.class);
|
|
|
+ ResourceDefinition resourceDefinition = createNiceMock(ResourceDefinition.class);
|
|
|
+ Schema schema = createNiceMock(Schema.class);
|
|
|
+
|
|
|
+ //expectations
|
|
|
+ expect(resource.getResourceDefinition()).andReturn(resourceDefinition).anyTimes();
|
|
|
+
|
|
|
+ expect(resourceDefinition.getType()).andReturn(Resource.Type.Service).anyTimes();
|
|
|
+
|
|
|
+ expect(m_controller.getSchema(Resource.Type.Service)).andReturn(schema).anyTimes();
|
|
|
+ expect(resource.getSubResources()).andReturn(Collections.<String, ResourceInstance>emptyMap()).anyTimes();
|
|
|
+
|
|
|
+ replay(m_controller, resource, resourceDefinition, schema);
|
|
|
+
|
|
|
+ Query query = new TestQuery(resource, null);
|
|
|
+ query.addProperty(null, "category", null);
|
|
|
+
|
|
|
+ Set<String> setProperties = query.getProperties();
|
|
|
+ assertEquals(1, setProperties.size());
|
|
|
+ assertTrue(setProperties.contains("category"));
|
|
|
+
|
|
|
+ verify(m_controller, resource, resourceDefinition, schema);
|
|
|
+ }
|
|
|
+
|
|
|
+ // This is the case where the service can determine that only a category was provided because it contained
|
|
|
+ // a trailing '/'
|
|
|
+ @Test
|
|
|
+ public void testAddProperty__localCategory_categoryNameOnly() throws Exception {
|
|
|
+ ResourceInstance resource = createNiceMock(ResourceInstance.class);
|
|
|
+ ResourceDefinition resourceDefinition = createNiceMock(ResourceDefinition.class);
|
|
|
+ Schema schema = createNiceMock(Schema.class);
|
|
|
+
|
|
|
+ //expectations
|
|
|
+ expect(resource.getResourceDefinition()).andReturn(resourceDefinition).anyTimes();
|
|
|
+
|
|
|
+ expect(resourceDefinition.getType()).andReturn(Resource.Type.Service).anyTimes();
|
|
|
+
|
|
|
+ expect(m_controller.getSchema(Resource.Type.Service)).andReturn(schema).anyTimes();
|
|
|
+ expect(resource.getSubResources()).andReturn(Collections.<String, ResourceInstance>emptyMap()).anyTimes();
|
|
|
+
|
|
|
+ replay(m_controller, resource, resourceDefinition, schema);
|
|
|
+
|
|
|
+ Query query = new TestQuery(resource, null);
|
|
|
+ query.addProperty("category/", "", null);
|
|
|
+
|
|
|
+ Set<String> setProperties = query.getProperties();
|
|
|
+ assertEquals(1, setProperties.size());
|
|
|
+ assertTrue(setProperties.contains("category"));
|
|
|
+
|
|
|
+ verify(m_controller, resource, resourceDefinition, schema);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testAddProperty__localSubCategory() throws Exception {
|
|
|
+ ResourceInstance resource = createNiceMock(ResourceInstance.class);
|
|
|
+ ResourceDefinition resourceDefinition = createNiceMock(ResourceDefinition.class);
|
|
|
+ Schema schema = createNiceMock(Schema.class);
|
|
|
+
|
|
|
+ //expectations
|
|
|
+ expect(resource.getResourceDefinition()).andReturn(resourceDefinition).anyTimes();
|
|
|
+
|
|
|
+ expect(resourceDefinition.getType()).andReturn(Resource.Type.Service).anyTimes();
|
|
|
+
|
|
|
+ expect(m_controller.getSchema(Resource.Type.Service)).andReturn(schema).anyTimes();
|
|
|
+
|
|
|
+ expect(resource.getSubResources()).andReturn(Collections.<String, ResourceInstance>emptyMap()).anyTimes();
|
|
|
+
|
|
|
+ replay(m_controller, resource, resourceDefinition, schema);
|
|
|
+
|
|
|
+ Query query = new TestQuery(resource, null);
|
|
|
+ query.addProperty("category", "nestedCategory", null);
|
|
|
+
|
|
|
+ Set<String> setProperties = query.getProperties();
|
|
|
+ assertEquals(1, setProperties.size());
|
|
|
+ assertTrue(setProperties.contains("category/nestedCategory"));
|
|
|
+
|
|
|
+ verify(m_controller, resource, resourceDefinition, schema);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testAddProperty__localCategorySubPropsOnly() throws Exception {
|
|
|
+ ResourceInstance resource = createNiceMock(ResourceInstance.class);
|
|
|
+ ResourceDefinition resourceDefinition = createNiceMock(ResourceDefinition.class);
|
|
|
+ Schema schema = createNiceMock(Schema.class);
|
|
|
+
|
|
|
+ //expectations
|
|
|
+ expect(resource.getResourceDefinition()).andReturn(resourceDefinition).anyTimes();
|
|
|
+
|
|
|
+ expect(resourceDefinition.getType()).andReturn(Resource.Type.Service).anyTimes();
|
|
|
+
|
|
|
+ expect(m_controller.getSchema(Resource.Type.Service)).andReturn(schema).anyTimes();
|
|
|
+ expect(resource.getSubResources()).andReturn(Collections.<String, ResourceInstance>emptyMap()).anyTimes();
|
|
|
+
|
|
|
+ replay(m_controller, resource, resourceDefinition, schema);
|
|
|
+
|
|
|
+ Query query = new TestQuery(resource, null);
|
|
|
+ query.addProperty(null, "category", null);
|
|
|
+
|
|
|
+ Set<String> setProperties = query.getProperties();
|
|
|
+ assertEquals(1, setProperties.size());
|
|
|
+ assertTrue(setProperties.contains("category"));
|
|
|
+
|
|
|
+ verify(m_controller, resource, resourceDefinition, schema);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testAddProperty__subProperty() throws Exception {
|
|
|
+ ResourceInstance resource = createNiceMock(ResourceInstance.class);
|
|
|
+ ResourceDefinition resourceDefinition = createNiceMock(ResourceDefinition.class);
|
|
|
+ ResourceInstance subResource = createNiceMock(ResourceInstance.class);
|
|
|
+ Schema schema = createNiceMock(Schema.class);
|
|
|
+
|
|
|
+ Map<Resource.Type, String> mapResourceIds = new HashMap<Resource.Type, String>();
|
|
|
+ mapResourceIds.put(Resource.Type.Service, "serviceName");
|
|
|
+ mapResourceIds.put(Resource.Type.Component, "componentName");
|
|
|
+
|
|
|
+ //expectations
|
|
|
+ expect(resource.getResourceDefinition()).andReturn(resourceDefinition).anyTimes();
|
|
|
+
|
|
|
+ expect(resourceDefinition.getType()).andReturn(Resource.Type.Service).anyTimes();
|
|
|
+
|
|
|
+ expect(m_controller.getSchema(Resource.Type.Service)).andReturn(schema).anyTimes();
|
|
|
+
|
|
|
+ expect(schema.getKeyPropertyId(Resource.Type.Service)).andReturn("serviceName").anyTimes();
|
|
|
+ expect(schema.getKeyPropertyId(Resource.Type.Component)).andReturn("componentName").anyTimes();
|
|
|
+
|
|
|
+ expect(resource.getSubResources()).andReturn(Collections.singletonMap("components", subResource)).anyTimes();
|
|
|
+ expect(resource.getIds()).andReturn(mapResourceIds).anyTimes();
|
|
|
+
|
|
|
+ //todo: ensure that sub-resource was added.
|
|
|
+
|
|
|
+ replay(m_controller, resource, resourceDefinition, subResource, schema);
|
|
|
+
|
|
|
+ Query query = new TestQuery(resource, null);
|
|
|
+ query.addProperty(null, "components", null);
|
|
|
+
|
|
|
+ // verify that only the key properties of the parent resource have been added to the query
|
|
|
+ Set<String> properties = query.getProperties();
|
|
|
+ assertEquals(2, properties.size());
|
|
|
+ assertTrue(properties.contains("serviceName"));
|
|
|
+ assertTrue(properties.contains("componentName"));
|
|
|
+
|
|
|
+ verify(m_controller, resource, resourceDefinition, subResource, schema);
|
|
|
+ }
|
|
|
+
|
|
|
+ //todo: sub-resource with property and with sub-path
|
|
|
+
|
|
|
+// @Test
|
|
|
+// public void testAddProperty__invalidProperty() {
|
|
|
+//
|
|
|
+// }
|
|
|
+
|
|
|
+ private class TestQuery extends QueryImpl {
|
|
|
+
|
|
|
+ private Result m_result;
|
|
|
+
|
|
|
+ public TestQuery(ResourceInstance ResourceInstance, Result result) {
|
|
|
+ super(ResourceInstance);
|
|
|
+ m_result = result;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ ClusterController getClusterController() {
|
|
|
+ return m_controller;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ Result createResult() {
|
|
|
+ return m_result;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @After
|
|
|
+ public void resetGlobalMocks() {
|
|
|
+ reset(m_controller);
|
|
|
+ }
|
|
|
+}
|