Repository: ambari Updated Branches: refs/heads/trunk 8d91e7109 -> 6f61de093
AMBARI-15643. During cluster creation using Blueprints the cluster creation request has incorrect COMPLETED state instead of PENDING. (stoader) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/6f61de09 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/6f61de09 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/6f61de09 Branch: refs/heads/trunk Commit: 6f61de093943a75868925cb7f76cbceea6215ae9 Parents: 8d91e71 Author: Toader, Sebastian <[email protected]> Authored: Thu Mar 31 16:39:29 2016 +0200 Committer: Toader, Sebastian <[email protected]> Committed: Thu Mar 31 18:37:26 2016 +0200 ---------------------------------------------------------------------- .../internal/RequestResourceProvider.java | 2 +- .../internal/RequestResourceProviderTest.java | 335 ++++++++++++------- 2 files changed, 224 insertions(+), 113 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/6f61de09/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RequestResourceProvider.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RequestResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RequestResourceProvider.java index 2cebbb4..c1e9053 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RequestResourceProvider.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RequestResourceProvider.java @@ -677,7 +677,7 @@ public class RequestResourceProvider extends AbstractControllerResourceProvider LogicalRequest logicalRequest = topologyManager.getRequest(entity.getRequestId()); CalculatedStatus status = CalculatedStatus.statusFromStageSummary(summary, summary.keySet()); - if (summary.isEmpty() && (logicalRequest == null || logicalRequest.hasCompleted())) { + if (summary.isEmpty() && logicalRequest == null) { // summary might be empty due to delete host have cleared all HostRoleCommands // or due to hosts haven't registered yet with the cluster when the cluster is provisioned http://git-wip-us.apache.org/repos/asf/ambari/blob/6f61de09/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RequestResourceProviderTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RequestResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RequestResourceProviderTest.java index 22921fb..bbb55f3 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RequestResourceProviderTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RequestResourceProviderTest.java @@ -18,6 +18,20 @@ package org.apache.ambari.server.controller.internal; + +import java.lang.reflect.Field; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Set; + import org.apache.ambari.server.AmbariException; import org.apache.ambari.server.actionmanager.ActionManager; import org.apache.ambari.server.actionmanager.HostRoleCommand; @@ -25,6 +39,7 @@ import org.apache.ambari.server.actionmanager.HostRoleStatus; import org.apache.ambari.server.actionmanager.Stage; import org.apache.ambari.server.api.services.BaseRequest; import org.apache.ambari.server.controller.AmbariManagementController; +import org.apache.ambari.server.controller.AmbariServer; import org.apache.ambari.server.controller.ExecuteActionRequest; import org.apache.ambari.server.controller.RequestStatusResponse; import org.apache.ambari.server.controller.spi.NoSuchParentResourceException; @@ -44,8 +59,11 @@ import org.apache.ambari.server.security.TestAuthenticationFactory; import org.apache.ambari.server.security.authorization.AuthorizationException; import org.apache.ambari.server.state.Cluster; import org.apache.ambari.server.state.Clusters; +import org.apache.ambari.server.topology.ClusterTopology; +import org.apache.ambari.server.topology.HostGroupInfo; import org.apache.ambari.server.topology.LogicalRequest; import org.apache.ambari.server.topology.TopologyManager; +import org.apache.ambari.server.topology.TopologyRequest; import org.easymock.Capture; import org.easymock.EasyMock; import org.junit.After; @@ -58,18 +76,10 @@ import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; -import java.lang.reflect.Field; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.LinkedHashMap; -import java.util.LinkedHashSet; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.Set; + +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Lists; + import static org.apache.ambari.server.controller.internal.HostComponentResourceProvider.HOST_COMPONENT_STALE_CONFIGS_PROPERTY_ID; import static org.easymock.EasyMock.anyObject; import static org.easymock.EasyMock.capture; @@ -100,17 +110,19 @@ public class RequestResourceProviderTest { hrcDAO = createNiceMock(HostRoleCommandDAO.class); topologyManager = createNiceMock(TopologyManager.class); + reset(topologyManager); + //todo: add assertions for topology manager interactions expect(topologyManager.getStageSummaries(EasyMock.<Long>anyObject())).andReturn( - Collections.<Long, HostRoleCommandStatusSummaryDTO>emptyMap()).anyTimes(); + Collections.<Long, HostRoleCommandStatusSummaryDTO>emptyMap()).anyTimes(); expect(topologyManager.getRequests(EasyMock.<Collection<Long>>anyObject())).andReturn( - Collections.<LogicalRequest>emptyList()).anyTimes(); + Collections.<LogicalRequest>emptyList()).anyTimes(); replay(topologyManager); - // !!! don't mess with injectors for this test + // !!! don't mess with injectors for this test Field field = RequestResourceProvider.class.getDeclaredField("s_requestDAO"); field.setAccessible(true); field.set(null, requestDAO); @@ -141,10 +153,10 @@ public class RequestResourceProviderTest { replay(managementController, response); ResourceProvider provider = AbstractControllerResourceProvider.getResourceProvider( - type, - PropertyHelper.getPropertyIds(type), - PropertyHelper.getKeyPropertyIds(type), - managementController); + type, + PropertyHelper.getPropertyIds(type), + PropertyHelper.getKeyPropertyIds(type), + managementController); // add the property map to a set for the request. add more maps for multiple creates Set<Map<String, Object>> propertySet = new LinkedHashSet<Map<String, Object>>(); @@ -210,7 +222,7 @@ public class RequestResourceProviderTest { .toPredicate(); request = PropertyHelper.getReadRequest(new HashSet<String>(), - requestInfoProperties, null, null, null); + requestInfoProperties, null, null, null); expect(actionManager.getRequestsByStatus(null, BaseRequest.DEFAULT_PAGE_SIZE, false)) .andReturn(Collections.<Long> emptyList()); @@ -222,7 +234,7 @@ public class RequestResourceProviderTest { requestInfoProperties.put(BaseRequest.PAGE_SIZE_PROPERTY_KEY, "20"); request = PropertyHelper.getReadRequest(new HashSet<String>(), - requestInfoProperties, null, null, null); + requestInfoProperties, null, null, null); expect(actionManager.getRequestsByStatus(null, 20, false)) .andReturn(Collections.<Long> emptyList()); replay(actionManager); @@ -232,7 +244,7 @@ public class RequestResourceProviderTest { requestInfoProperties.put(BaseRequest.ASC_ORDER_PROPERTY_KEY, "true"); request = PropertyHelper.getReadRequest(new HashSet<String>(), - requestInfoProperties, null, null, null); + requestInfoProperties, null, null, null); expect(actionManager.getRequestsByStatus(null, 20, true)) .andReturn(Collections.<Long> emptyList()); replay(actionManager); @@ -265,10 +277,10 @@ public class RequestResourceProviderTest { replay(managementController, actionManager, requestDAO, hrcDAO, requestMock); ResourceProvider provider = AbstractControllerResourceProvider.getResourceProvider( - type, - PropertyHelper.getPropertyIds(type), - PropertyHelper.getKeyPropertyIds(type), - managementController); + type, + PropertyHelper.getPropertyIds(type), + PropertyHelper.getKeyPropertyIds(type), + managementController); Set<String> propertyIds = new HashSet<String>(); @@ -276,7 +288,7 @@ public class RequestResourceProviderTest { propertyIds.add(RequestResourceProvider.REQUEST_STATUS_PROPERTY_ID); Predicate predicate = new PredicateBuilder().property(RequestResourceProvider.REQUEST_ID_PROPERTY_ID).equals("100"). - toPredicate(); + toPredicate(); Request request = PropertyHelper.getReadRequest(propertyIds); Set<Resource> resources = provider.getResources(request, predicate); @@ -315,10 +327,10 @@ public class RequestResourceProviderTest { replay(managementController, actionManager, requestDAO, hrcDAO, requestMock); ResourceProvider provider = AbstractControllerResourceProvider.getResourceProvider( - type, - PropertyHelper.getPropertyIds(type), - PropertyHelper.getKeyPropertyIds(type), - managementController); + type, + PropertyHelper.getPropertyIds(type), + PropertyHelper.getKeyPropertyIds(type), + managementController); Set<String> propertyIds = new HashSet<String>(); @@ -328,7 +340,7 @@ public class RequestResourceProviderTest { Predicate predicate = new PredicateBuilder().property(RequestResourceProvider.REQUEST_ID_PROPERTY_ID).equals("100"). - toPredicate(); + toPredicate(); Request request = PropertyHelper.getReadRequest(propertyIds); Set<Resource> resources = provider.getResources(request, predicate); @@ -368,10 +380,10 @@ public class RequestResourceProviderTest { replay(managementController, actionManager, requestMock, requestDAO, hrcDAO); ResourceProvider provider = AbstractControllerResourceProvider.getResourceProvider( - type, - PropertyHelper.getPropertyIds(type), - PropertyHelper.getKeyPropertyIds(type), - managementController); + type, + PropertyHelper.getPropertyIds(type), + PropertyHelper.getKeyPropertyIds(type), + managementController); Set<String> propertyIds = new HashSet<String>(); @@ -381,7 +393,7 @@ public class RequestResourceProviderTest { Predicate predicate = new PredicateBuilder().property(RequestResourceProvider.REQUEST_ID_PROPERTY_ID).equals("100"). - toPredicate(); + toPredicate(); Request request = PropertyHelper.getReadRequest(propertyIds); Set<Resource> resources = provider.getResources(request, predicate); @@ -429,10 +441,10 @@ public class RequestResourceProviderTest { replay(managementController, actionManager, clusters, cluster, requestMock, requestDAO, hrcDAO); ResourceProvider provider = AbstractControllerResourceProvider.getResourceProvider( - type, - PropertyHelper.getPropertyIds(type), - PropertyHelper.getKeyPropertyIds(type), - managementController); + type, + PropertyHelper.getPropertyIds(type), + PropertyHelper.getKeyPropertyIds(type), + managementController); Set<String> propertyIds = new HashSet<String>(); @@ -440,9 +452,9 @@ public class RequestResourceProviderTest { propertyIds.add(RequestResourceProvider.REQUEST_STATUS_PROPERTY_ID); Predicate predicate = new PredicateBuilder(). - property(RequestResourceProvider.REQUEST_CLUSTER_NAME_PROPERTY_ID).equals("c1").and(). - property(RequestResourceProvider.REQUEST_ID_PROPERTY_ID).equals("100"). - toPredicate(); + property(RequestResourceProvider.REQUEST_CLUSTER_NAME_PROPERTY_ID).equals("c1").and(). + property(RequestResourceProvider.REQUEST_ID_PROPERTY_ID).equals("100"). + toPredicate(); Request request = PropertyHelper.getReadRequest(propertyIds); Set<Resource> resources = provider.getResources(request, predicate); @@ -454,9 +466,9 @@ public class RequestResourceProviderTest { // try again with a bad cluster name predicate = new PredicateBuilder(). - property(RequestResourceProvider.REQUEST_CLUSTER_NAME_PROPERTY_ID).equals("bad-cluster").and(). - property(RequestResourceProvider.REQUEST_ID_PROPERTY_ID).equals("100"). - toPredicate(); + property(RequestResourceProvider.REQUEST_CLUSTER_NAME_PROPERTY_ID).equals("bad-cluster").and(). + property(RequestResourceProvider.REQUEST_ID_PROPERTY_ID).equals("100"). + toPredicate(); try { provider.getResources(request, predicate); } catch (NoSuchParentResourceException e) { @@ -487,7 +499,7 @@ public class RequestResourceProviderTest { // set expectations expect(managementController.getActionManager()).andReturn(actionManager).anyTimes(); expect(requestDAO.findByPks(capture(requestIdsCapture), eq(true))). - andReturn(Arrays.asList(requestMock, requestMock1)).anyTimes(); + andReturn(Arrays.asList(requestMock, requestMock1)).anyTimes(); expect(hrcDAO.findAggregateCounts((Long) anyObject())).andReturn(new HashMap<Long, HostRoleCommandStatusSummaryDTO>(){{ put(1L, HostRoleCommandStatusSummaryDTO.create().inProgress(1)); }}).anyTimes(); @@ -506,8 +518,8 @@ public class RequestResourceProviderTest { propertyIds.add(RequestResourceProvider.REQUEST_ID_PROPERTY_ID); Predicate predicate = new PredicateBuilder().property(RequestResourceProvider.REQUEST_ID_PROPERTY_ID).equals("100"). - or().property(RequestResourceProvider.REQUEST_ID_PROPERTY_ID).equals("101"). - toPredicate(); + or().property(RequestResourceProvider.REQUEST_ID_PROPERTY_ID).equals("101"). + toPredicate(); Request request = PropertyHelper.getReadRequest(propertyIds); Set<Resource> resources = provider.getResources(request, predicate); @@ -550,10 +562,10 @@ public class RequestResourceProviderTest { replay(managementController, actionManager, requestMock0, requestMock1, requestDAO, hrcDAO); ResourceProvider provider = AbstractControllerResourceProvider.getResourceProvider( - type, - PropertyHelper.getPropertyIds(type), - PropertyHelper.getKeyPropertyIds(type), - managementController); + type, + PropertyHelper.getPropertyIds(type), + PropertyHelper.getKeyPropertyIds(type), + managementController); Set<String> propertyIds = new HashSet<String>(); @@ -565,7 +577,7 @@ public class RequestResourceProviderTest { propertyIds.add(RequestResourceProvider.REQUEST_PROGRESS_PERCENT_ID); Predicate predicate = new PredicateBuilder().property(RequestResourceProvider.REQUEST_ID_PROPERTY_ID).equals("100").or(). - property(RequestResourceProvider.REQUEST_ID_PROPERTY_ID).equals("101").toPredicate(); + property(RequestResourceProvider.REQUEST_ID_PROPERTY_ID).equals("101").toPredicate(); Request request = PropertyHelper.getReadRequest(propertyIds); Set<Resource> resources = provider.getResources(request, predicate); @@ -621,10 +633,10 @@ public class RequestResourceProviderTest { replay(managementController, actionManager, requestMock0, requestMock1, requestDAO, hrcDAO); ResourceProvider provider = AbstractControllerResourceProvider.getResourceProvider( - type, - PropertyHelper.getPropertyIds(type), - PropertyHelper.getKeyPropertyIds(type), - managementController); + type, + PropertyHelper.getPropertyIds(type), + PropertyHelper.getKeyPropertyIds(type), + managementController); Set<String> propertyIds = new HashSet<String>(); @@ -637,7 +649,7 @@ public class RequestResourceProviderTest { propertyIds.add(RequestResourceProvider.REQUEST_PROGRESS_PERCENT_ID); Predicate predicate = new PredicateBuilder().property(RequestResourceProvider.REQUEST_ID_PROPERTY_ID).equals("100").or(). - property(RequestResourceProvider.REQUEST_ID_PROPERTY_ID).equals("101").toPredicate(); + property(RequestResourceProvider.REQUEST_ID_PROPERTY_ID).equals("101").toPredicate(); Request request = PropertyHelper.getReadRequest(propertyIds); Set<Resource> resources = provider.getResources(request, predicate); @@ -702,10 +714,10 @@ public class RequestResourceProviderTest { replay(managementController, actionManager, requestMock0, requestMock1, requestDAO, hrcDAO); ResourceProvider provider = AbstractControllerResourceProvider.getResourceProvider( - type, - PropertyHelper.getPropertyIds(type), - PropertyHelper.getKeyPropertyIds(type), - managementController); + type, + PropertyHelper.getPropertyIds(type), + PropertyHelper.getKeyPropertyIds(type), + managementController); Set<String> propertyIds = new HashSet<String>(); @@ -719,7 +731,7 @@ public class RequestResourceProviderTest { propertyIds.add(RequestResourceProvider.REQUEST_PROGRESS_PERCENT_ID); Predicate predicate = new PredicateBuilder().property(RequestResourceProvider.REQUEST_ID_PROPERTY_ID).equals("100").or(). - property(RequestResourceProvider.REQUEST_ID_PROPERTY_ID).equals("101").toPredicate(); + property(RequestResourceProvider.REQUEST_ID_PROPERTY_ID).equals("101").toPredicate(); Request request = PropertyHelper.getReadRequest(propertyIds); Set<Resource> resources = provider.getResources(request, predicate); @@ -764,7 +776,7 @@ public class RequestResourceProviderTest { stages.add(stage); org.apache.ambari.server.actionmanager.Request requestMock = - createNiceMock(org.apache.ambari.server.actionmanager.Request.class); + createNiceMock(org.apache.ambari.server.actionmanager.Request.class); expect(requestMock.getCommands()).andReturn(hostRoleCommands).anyTimes(); expect(requestMock.getStages()).andReturn(stages).anyTimes(); @@ -775,7 +787,7 @@ public class RequestResourceProviderTest { // set expectations expect(managementController.getActionManager()).andReturn(actionManager).anyTimes(); expect(actionManager.getRequests(capture(requestIdsCapture))). - andReturn(Collections.singletonList(requestMock)).anyTimes(); + andReturn(Collections.singletonList(requestMock)).anyTimes(); expect(hostRoleCommand.getStatus()).andReturn(HostRoleStatus.IN_PROGRESS).anyTimes(); RequestStatusResponse response = createNiceMock(RequestStatusResponse.class); @@ -784,10 +796,10 @@ public class RequestResourceProviderTest { replay(managementController, actionManager, hostRoleCommand, clusters, requestMock, response, stage); ResourceProvider provider = AbstractControllerResourceProvider.getResourceProvider( - type, - PropertyHelper.getPropertyIds(type), - PropertyHelper.getKeyPropertyIds(type), - managementController); + type, + PropertyHelper.getPropertyIds(type), + PropertyHelper.getKeyPropertyIds(type), + managementController); // TEST CASE: Check update request validation (abort reason not specified) // add the property map to a set for the request. @@ -795,7 +807,7 @@ public class RequestResourceProviderTest { // create the request Request request = PropertyHelper.getUpdateRequest(properties, null); Predicate predicate = new PredicateBuilder().property(RequestResourceProvider.REQUEST_ID_PROPERTY_ID). - equals("100").toPredicate(); + equals("100").toPredicate(); try { provider.updateResources(request, predicate); @@ -822,7 +834,7 @@ public class RequestResourceProviderTest { try { provider.updateResources(request, predicate); Assert.fail("Expected an java.lang.IllegalArgumentException: COMPLETED is wrong value. " + - "The only allowed value for updating request status is ABORTED"); + "The only allowed value for updating request status is ABORTED"); } catch (IllegalArgumentException e) { // expected } @@ -836,16 +848,16 @@ public class RequestResourceProviderTest { replay(hostRoleCommand); request = PropertyHelper.getUpdateRequest(properties, null); if (status == HostRoleStatus.IN_PROGRESS || - status == HostRoleStatus.PENDING || - status == HostRoleStatus.HOLDING || - status == HostRoleStatus.HOLDING_FAILED || - status == HostRoleStatus.HOLDING_TIMEDOUT || - status == HostRoleStatus.COMPLETED || - status == HostRoleStatus.ABORTED || - status == HostRoleStatus.FAILED || - status == HostRoleStatus.TIMEDOUT || - status == HostRoleStatus.QUEUED || - status == HostRoleStatus.SKIPPED_FAILED) { // the only valid cases + status == HostRoleStatus.PENDING || + status == HostRoleStatus.HOLDING || + status == HostRoleStatus.HOLDING_FAILED || + status == HostRoleStatus.HOLDING_TIMEDOUT || + status == HostRoleStatus.COMPLETED || + status == HostRoleStatus.ABORTED || + status == HostRoleStatus.FAILED || + status == HostRoleStatus.TIMEDOUT || + status == HostRoleStatus.QUEUED || + status == HostRoleStatus.SKIPPED_FAILED) { // the only valid cases provider.updateResources(request, predicate); } else { // In other cases, should error out try { @@ -870,13 +882,13 @@ public class RequestResourceProviderTest { replay(managementController); ResourceProvider provider = AbstractControllerResourceProvider.getResourceProvider( - type, - PropertyHelper.getPropertyIds(type), - PropertyHelper.getKeyPropertyIds(type), - managementController); + type, + PropertyHelper.getPropertyIds(type), + PropertyHelper.getKeyPropertyIds(type), + managementController); Predicate predicate = new PredicateBuilder().property(RequestResourceProvider.REQUEST_ID_PROPERTY_ID). - equals("Request100").toPredicate(); + equals("Request100").toPredicate(); try { provider.deleteResources(predicate); Assert.fail("Expected an UnsupportedOperationException"); @@ -931,7 +943,7 @@ public class RequestResourceProviderTest { expect(managementController.getClusters()).andReturn(clusters).anyTimes(); expect(managementController.createAction(capture(actionRequest), capture(propertyMap))) - .andReturn(response).anyTimes(); + .andReturn(response).anyTimes(); expect(response.getMessage()).andReturn("Message").anyTimes(); // replay @@ -963,10 +975,10 @@ public class RequestResourceProviderTest { // create the request Request request = PropertyHelper.getCreateRequest(propertySet, requestInfoProperties); ResourceProvider provider = AbstractControllerResourceProvider.getResourceProvider( - type, - PropertyHelper.getPropertyIds(type), - PropertyHelper.getKeyPropertyIds(type), - managementController); + type, + PropertyHelper.getPropertyIds(type), + PropertyHelper.getKeyPropertyIds(type), + managementController); provider.createResources(request); ExecuteActionRequest capturedRequest = actionRequest.getValue(); @@ -1028,7 +1040,7 @@ public class RequestResourceProviderTest { expect(managementController.getClusters()).andReturn(clusters).anyTimes(); expect(managementController.createAction(capture(actionRequest), capture(propertyMap))) - .andReturn(response).anyTimes(); + .andReturn(response).anyTimes(); expect(response.getMessage()).andReturn("Message").anyTimes(); // replay replay(cluster, clusters, managementController, response); @@ -1066,10 +1078,10 @@ public class RequestResourceProviderTest { // create the request Request request = PropertyHelper.getCreateRequest(propertySet, requestInfoProperties); ResourceProvider provider = AbstractControllerResourceProvider.getResourceProvider( - type, - PropertyHelper.getPropertyIds(type), - PropertyHelper.getKeyPropertyIds(type), - managementController); + type, + PropertyHelper.getPropertyIds(type), + PropertyHelper.getKeyPropertyIds(type), + managementController); // Neither action nor commands are specified try { @@ -1232,7 +1244,7 @@ public class RequestResourceProviderTest { expect(managementController.getClusters()).andReturn(clusters).anyTimes(); expect(managementController.createAction(capture(actionRequest), capture(propertyMap))) - .andReturn(response).anyTimes(); + .andReturn(response).anyTimes(); expect(response.getMessage()).andReturn("Message").anyTimes(); // replay @@ -1267,7 +1279,7 @@ public class RequestResourceProviderTest { requestInfoProperties.put(RequestResourceProvider.COMMAND_ID, "RESTART"); requestInfoProperties.put(RequestOperationLevel.OPERATION_LEVEL_ID, - host_component); + host_component); requestInfoProperties.put(RequestOperationLevel.OPERATION_CLUSTER_ID, c1); requestInfoProperties.put(RequestOperationLevel.OPERATION_SERVICE_ID, service_id); @@ -1308,7 +1320,7 @@ public class RequestResourceProviderTest { RequestStatusResponse response = createNiceMock(RequestStatusResponse.class); expect(managementController.createAction(capture(actionRequest), capture(propertyMap))) - .andReturn(response).anyTimes(); + .andReturn(response).anyTimes(); expect(response.getMessage()).andReturn("Message").anyTimes(); // replay @@ -1334,10 +1346,10 @@ public class RequestResourceProviderTest { // create the request Request request = PropertyHelper.getCreateRequest(propertySet, requestInfoProperties); ResourceProvider provider = AbstractControllerResourceProvider.getResourceProvider( - type, - PropertyHelper.getPropertyIds(type), - PropertyHelper.getKeyPropertyIds(type), - managementController); + type, + PropertyHelper.getPropertyIds(type), + PropertyHelper.getKeyPropertyIds(type), + managementController); provider.createResources(request); ExecuteActionRequest capturedRequest = actionRequest.getValue(); @@ -1353,7 +1365,7 @@ public class RequestResourceProviderTest { Assert.assertNotNull(capturedResourceFilter.getHostNames()); Assert.assertEquals(2, capturedResourceFilter.getHostNames().size()); Assert.assertEquals(0, actionRequest.getValue().getParameters().size()); - } + } @Test public void testGetResourcesWithoutCluster() throws Exception { @@ -1384,10 +1396,10 @@ public class RequestResourceProviderTest { replay(managementController, actionManager, clusters, requestMock, requestDAO, hrcDAO); ResourceProvider provider = AbstractControllerResourceProvider.getResourceProvider( - type, - PropertyHelper.getPropertyIds(type), - PropertyHelper.getKeyPropertyIds(type), - managementController); + type, + PropertyHelper.getPropertyIds(type), + PropertyHelper.getKeyPropertyIds(type), + managementController); Set<String> propertyIds = new HashSet<String>(); @@ -1395,8 +1407,8 @@ public class RequestResourceProviderTest { propertyIds.add(RequestResourceProvider.REQUEST_STATUS_PROPERTY_ID); Predicate predicate = new PredicateBuilder(). - property(RequestResourceProvider.REQUEST_ID_PROPERTY_ID).equals("100"). - toPredicate(); + property(RequestResourceProvider.REQUEST_ID_PROPERTY_ID).equals("100"). + toPredicate(); Request request = PropertyHelper.getReadRequest(propertyIds); Set<Resource> resources = provider.getResources(request, predicate); @@ -1465,4 +1477,103 @@ public class RequestResourceProviderTest { // verify verify(managementController, actionManager, clusters, requestMock, requestDAO, hrcDAO); } + + @Test + @PrepareForTest(AmbariServer.class) + public void testGetLogicalRequestStatusWithNoTasks() throws Exception { + // Given + Resource.Type type = Resource.Type.Request; + + AmbariManagementController managementController = createMock(AmbariManagementController.class); + ActionManager actionManager = createNiceMock(ActionManager.class); + + Clusters clusters = createNiceMock(Clusters.class); + + RequestEntity requestMock = createNiceMock(RequestEntity.class); + + expect(requestMock.getRequestContext()).andReturn("this is a context").anyTimes(); + expect(requestMock.getRequestId()).andReturn(100L).anyTimes(); + Capture<Collection<Long>> requestIdsCapture = Capture.newInstance(); + + + ClusterTopology topology = createNiceMock(ClusterTopology.class); + expect(topology.getClusterId()).andReturn(2L).anyTimes(); + + Long clusterId = 2L; + String clusterName = "cluster1"; + Cluster cluster = createNiceMock(Cluster.class); + expect(cluster.getClusterId()).andReturn(clusterId).anyTimes(); + expect(cluster.getClusterName()).andReturn(clusterName).anyTimes(); + + expect(managementController.getActionManager()).andReturn(actionManager).anyTimes(); + expect(managementController.getClusters()).andReturn(clusters).anyTimes(); + expect(clusters.getCluster(eq(clusterName))).andReturn(cluster).anyTimes(); + expect(clusters.getClusterById(clusterId)).andReturn(cluster).anyTimes(); + expect(requestDAO.findByPks(capture(requestIdsCapture), eq(true))).andReturn(Lists.newArrayList(requestMock)); + expect(hrcDAO.findAggregateCounts((Long) anyObject())).andReturn( + Collections.<Long, HostRoleCommandStatusSummaryDTO>emptyMap()).anyTimes(); + + TopologyRequest topologyRequest = createNiceMock(TopologyRequest.class); + expect(topologyRequest.getHostGroupInfo()).andReturn(Collections.<String, HostGroupInfo>emptyMap()).anyTimes(); + expect(topologyRequest.getBlueprint()).andReturn(null).anyTimes(); + + + + PowerMock.mockStatic(AmbariServer.class); + expect(AmbariServer.getController()).andReturn(managementController).anyTimes(); + + PowerMock.replayAll( + topologyRequest, + topology, + managementController, + clusters); + + + LogicalRequest logicalRequest = new LogicalRequest(200L, topologyRequest, topology); + + reset(topologyManager); + + expect(topologyManager.getRequest(100L)).andReturn(logicalRequest).anyTimes(); + expect(topologyManager.getRequests(eq(Collections.singletonList(100L)))).andReturn( + Collections.singletonList(logicalRequest)).anyTimes(); + expect(topologyManager.getStageSummaries(EasyMock.<Long>anyObject())).andReturn( + Collections.<Long, HostRoleCommandStatusSummaryDTO>emptyMap()).anyTimes(); + + replay(actionManager, requestMock, requestDAO, hrcDAO, topologyManager); + + ResourceProvider provider = AbstractControllerResourceProvider.getResourceProvider( + type, + PropertyHelper.getPropertyIds(type), + PropertyHelper.getKeyPropertyIds(type), + managementController); + + Set<String> propertyIds = ImmutableSet.of( + RequestResourceProvider.REQUEST_ID_PROPERTY_ID, + RequestResourceProvider.REQUEST_STATUS_PROPERTY_ID, + RequestResourceProvider.REQUEST_PROGRESS_PERCENT_ID + ); + + Predicate predicate = new PredicateBuilder(). + property(RequestResourceProvider.REQUEST_ID_PROPERTY_ID).equals("100"). + toPredicate(); + + Request request = PropertyHelper.getReadRequest(propertyIds); + + // When + Set<Resource> resources = provider.getResources(request, predicate); + + // Then + + + // verify + PowerMock.verifyAll(); + verify(actionManager, requestMock, requestDAO, hrcDAO, topologyManager); + + Assert.assertEquals(1, resources.size()); + for (Resource resource : resources) { + Assert.assertEquals(100L, (long)(Long) resource.getPropertyValue(RequestResourceProvider.REQUEST_ID_PROPERTY_ID)); + Assert.assertEquals("PENDING", resource.getPropertyValue(RequestResourceProvider.REQUEST_STATUS_PROPERTY_ID)); + Assert.assertEquals(0.0, resource.getPropertyValue(RequestResourceProvider.REQUEST_PROGRESS_PERCENT_ID)); + } + } }
