ambari-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From magyari_san...@apache.org
Subject ambari git commit: AMBARI-18323. Cluster creation complete is missing from ambari-server log (magyari_sandor)
Date Mon, 12 Sep 2016 12:53:46 GMT
Repository: ambari
Updated Branches:
  refs/heads/branch-2.5 0a3c83943 -> f50c22960


AMBARI-18323. Cluster creation complete is missing from ambari-server log (magyari_sandor)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/f50c2296
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/f50c2296
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/f50c2296

Branch: refs/heads/branch-2.5
Commit: f50c229602001eda025cdfbdeecb6dde6248c46e
Parents: 0a3c839
Author: Sandor Magyari <smagyari@hortonworks.com>
Authored: Tue Sep 6 19:13:16 2016 +0200
Committer: Sandor Magyari <smagyari@hortonworks.com>
Committed: Mon Sep 12 14:53:07 2016 +0200

----------------------------------------------------------------------
 .../ambari/server/topology/HostRequest.java     |   8 +-
 ...InstallWithoutStartOnComponentLevelTest.java | 409 +++++++++++++++++++
 .../ClusterInstallWithoutStartTest.java         |   5 +-
 3 files changed, 418 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/f50c2296/ambari-server/src/main/java/org/apache/ambari/server/topology/HostRequest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/topology/HostRequest.java
b/ambari-server/src/main/java/org/apache/ambari/server/topology/HostRequest.java
index b2a67f7..c3b44b8 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/topology/HostRequest.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/topology/HostRequest.java
@@ -234,8 +234,12 @@ public class HostRequest implements Comparable<HostRequest> {
         logicalTaskMap.get(installTask).put(component, logicalInstallTask.getTaskId());
       }
 
-      // if component isn't a client, add a start task
-      if (!skipStartTaskCreate && stack != null && !stack.getComponentInfo(component).isClient())
{
+      // Skip START task if component is a client, or ir marked as INSTALL_ONLY or cluster
provision_action is
+      // INSTALL_ONLY
+      if (installOnlyComponents.contains(component) || skipStartTaskCreate ||
+        (stack != null && stack.getComponentInfo(component).isClient())) {
+        LOG.info("Skipping create of START task for {} on {}.", component, hostName);
+      } else {
         HostRoleCommand logicalStartTask = context.createAmbariTask(
             getRequestId(), id, component, hostName, AmbariContext.TaskType.START, skipFailure);
         logicalTasks.put(logicalStartTask.getTaskId(), logicalStartTask);

http://git-wip-us.apache.org/repos/asf/ambari/blob/f50c2296/ambari-server/src/test/java/org/apache/ambari/server/topology/ClusterInstallWithoutStartOnComponentLevelTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/topology/ClusterInstallWithoutStartOnComponentLevelTest.java
b/ambari-server/src/test/java/org/apache/ambari/server/topology/ClusterInstallWithoutStartOnComponentLevelTest.java
new file mode 100644
index 0000000..7ae4485
--- /dev/null
+++ b/ambari-server/src/test/java/org/apache/ambari/server/topology/ClusterInstallWithoutStartOnComponentLevelTest.java
@@ -0,0 +1,409 @@
+/**
+ * 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
+ * <p/>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p/>
+ * 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.
+ */
+package org.apache.ambari.server.topology;
+
+
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Future;
+
+import org.apache.ambari.server.Role;
+import org.apache.ambari.server.RoleCommand;
+import org.apache.ambari.server.actionmanager.HostRoleCommand;
+import org.apache.ambari.server.actionmanager.HostRoleStatus;
+import org.apache.ambari.server.controller.AmbariManagementController;
+import org.apache.ambari.server.controller.AmbariServer;
+import org.apache.ambari.server.controller.ClusterRequest;
+import org.apache.ambari.server.controller.ConfigurationRequest;
+import org.apache.ambari.server.controller.RequestStatusResponse;
+import org.apache.ambari.server.controller.internal.ProvisionAction;
+import org.apache.ambari.server.controller.internal.ProvisionClusterRequest;
+import org.apache.ambari.server.controller.internal.Stack;
+import org.apache.ambari.server.controller.spi.ClusterController;
+import org.apache.ambari.server.controller.spi.Resource;
+import org.apache.ambari.server.controller.spi.ResourceProvider;
+import org.apache.ambari.server.orm.entities.TopologyLogicalRequestEntity;
+import org.apache.ambari.server.security.encryption.CredentialStoreService;
+import org.apache.ambari.server.state.Cluster;
+import org.apache.ambari.server.state.Clusters;
+import org.apache.ambari.server.state.ComponentInfo;
+import org.apache.ambari.server.state.SecurityType;
+import org.easymock.Capture;
+import org.easymock.EasyMockRule;
+import org.easymock.EasyMockSupport;
+import org.easymock.Mock;
+import org.easymock.MockType;
+import org.easymock.TestSubject;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.powermock.api.easymock.PowerMock;
+import org.powermock.core.classloader.annotations.PrepareForTest;
+import org.powermock.modules.junit4.PowerMockRunner;
+
+import static org.apache.ambari.server.controller.internal.ProvisionAction.INSTALL_AND_START;
+import static org.easymock.EasyMock.anyBoolean;
+import static org.easymock.EasyMock.anyLong;
+import static org.easymock.EasyMock.anyObject;
+import static org.easymock.EasyMock.anyString;
+import static org.easymock.EasyMock.capture;
+import static org.easymock.EasyMock.createMockBuilder;
+import static org.easymock.EasyMock.eq;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.expectLastCall;
+import static org.easymock.EasyMock.isA;
+import static org.easymock.EasyMock.isNull;
+import static org.easymock.EasyMock.newCapture;
+import static org.easymock.EasyMock.replay;
+import static org.easymock.EasyMock.reset;
+import static org.easymock.EasyMock.verify;
+
+@RunWith(PowerMockRunner.class)
+@PrepareForTest(AmbariServer.class)
+public class ClusterInstallWithoutStartOnComponentLevelTest {
+  private static final String CLUSTER_NAME = "test-cluster";
+  private static final long CLUSTER_ID = 1;
+  private static final String BLUEPRINT_NAME = "test-bp";
+  private static final String STACK_NAME = "test-stack";
+  private static final String STACK_VERSION = "test-stack-version";
+
+  @Rule
+  public EasyMockRule mocks = new EasyMockRule(this);
+
+  @TestSubject
+  private TopologyManager topologyManager = new TopologyManager();
+
+  @Mock(type = MockType.NICE)
+  private Blueprint blueprint;
+
+  @Mock(type = MockType.NICE)
+  private Stack stack;
+
+  @Mock(type = MockType.NICE)
+  private ProvisionClusterRequest request;
+  private PersistedTopologyRequest persistedTopologyRequest;
+//  @Mock(type = MockType.STRICT)
+  private LogicalRequestFactory logicalRequestFactory;
+  @Mock(type = MockType.DEFAULT)
+  private LogicalRequest logicalRequest;
+  @Mock(type = MockType.NICE)
+  private AmbariContext ambariContext;
+  @Mock(type = MockType.NICE)
+  private ConfigurationRequest configurationRequest;
+  @Mock(type = MockType.NICE)
+  private ConfigurationRequest configurationRequest2;
+  @Mock(type = MockType.NICE)
+  private ConfigurationRequest configurationRequest3;
+  @Mock(type = MockType.NICE)
+  private RequestStatusResponse requestStatusResponse;
+  @Mock(type = MockType.STRICT)
+  private ExecutorService executor;
+  @Mock(type = MockType.STRICT)
+  private PersistedState persistedState;
+  @Mock(type = MockType.NICE)
+  private HostGroup group1;
+  @Mock(type = MockType.NICE)
+  private HostGroup group2;
+  @Mock(type = MockType.STRICT)
+  private SecurityConfigurationFactory securityConfigurationFactory;
+  @Mock(type = MockType.STRICT)
+  private CredentialStoreService credentialStoreService;
+  @Mock(type = MockType.STRICT)
+  private ClusterController clusterController;
+  @Mock(type = MockType.STRICT)
+  private ResourceProvider resourceProvider;
+  @Mock(type = MockType.NICE)
+  private AmbariManagementController managementController;
+  @Mock(type = MockType.NICE)
+  private Clusters clusters;
+  @Mock(type = MockType.NICE)
+  private Cluster cluster;
+  @Mock(type = MockType.NICE)
+  private HostRoleCommand hostRoleCommand;
+
+
+  @Mock(type = MockType.NICE)
+  private ComponentInfo serviceComponentInfo;
+  @Mock(type = MockType.NICE)
+  private ComponentInfo clientComponentInfo;
+
+  @Mock(type = MockType.STRICT)
+  private Future mockFuture;
+
+  private final Configuration stackConfig = new Configuration(new HashMap<String, Map<String,
String>>(),
+    new HashMap<String, Map<String, Map<String, String>>>());
+  private final Configuration bpConfiguration = new Configuration(new HashMap<String,
Map<String, String>>(),
+    new HashMap<String, Map<String, Map<String, String>>>(), stackConfig);
+  private final Configuration topoConfiguration = new Configuration(new HashMap<String,
Map<String, String>>(),
+    new HashMap<String, Map<String, Map<String, String>>>(), bpConfiguration);
+  private final Configuration bpGroup1Config = new Configuration(new HashMap<String, Map<String,
String>>(),
+    new HashMap<String, Map<String, Map<String, String>>>(), bpConfiguration);
+  private final Configuration bpGroup2Config = new Configuration(new HashMap<String, Map<String,
String>>(),
+    new HashMap<String, Map<String, Map<String, String>>>(), bpConfiguration);
+
+  private final Configuration topoGroup1Config = new Configuration(new HashMap<String,
Map<String, String>>(),
+    new HashMap<String, Map<String, Map<String, String>>>(), bpGroup1Config);
+  private final Configuration topoGroup2Config = new Configuration(new HashMap<String,
Map<String, String>>(),
+    new HashMap<String, Map<String, Map<String, String>>>(), bpGroup2Config);
+
+  private HostGroupInfo group1Info = new HostGroupInfo("group1");
+  private HostGroupInfo group2Info = new HostGroupInfo("group2");
+  private Map<String, HostGroupInfo> groupInfoMap = new HashMap<String, HostGroupInfo>();
+
+  private Collection<String> group1Components = Arrays.asList("component1", "component2",
"component3");
+  private Collection<String> group2Components = Arrays.asList("component3", "component4");
+
+  private Map<String, Collection<String>> group1ServiceComponents = new HashMap<String,
Collection<String>>();
+  private Map<String, Collection<String>> group2ServiceComponents = new HashMap<String,
Collection<String>>();
+
+  private Map<String, Collection<String>> serviceComponents = new HashMap<String,
Collection<String>>();
+
+  private String predicate = "Hosts/host_name=foo";
+
+  private List<TopologyValidator> topologyValidators = new ArrayList<TopologyValidator>();
+
+  private Capture<ClusterTopology> clusterTopologyCapture;
+  private Capture<Map<String, Object>> configRequestPropertiesCapture;
+  private Capture<Map<String, Object>> configRequestPropertiesCapture2;
+  private Capture<Map<String, Object>> configRequestPropertiesCapture3;
+  private Capture<ClusterRequest> updateClusterConfigRequestCapture;
+  private Capture<Runnable> updateConfigTaskCapture;
+
+  @Before
+  public void setup() throws Exception {
+    clusterTopologyCapture = newCapture();
+    configRequestPropertiesCapture = newCapture();
+    configRequestPropertiesCapture2 = newCapture();
+    configRequestPropertiesCapture3 = newCapture();
+    updateClusterConfigRequestCapture = newCapture();
+    updateConfigTaskCapture = newCapture();
+
+    topoConfiguration.setProperty("service1-site", "s1-prop", "s1-prop-value");
+    topoConfiguration.setProperty("service2-site", "s2-prop", "s2-prop-value");
+    topoConfiguration.setProperty("cluster-env", "g-prop", "g-prop-value");
+
+    //clusterRequestCapture = new Capture<ClusterRequest>();
+    // group 1 has fqdn specified
+    group1Info.addHost("host1");
+    group1Info.setConfiguration(topoGroup1Config);
+    // group 2 has host_count and host_predicate specified
+    group2Info.setRequestedCount(2);
+    group2Info.setPredicate(predicate);
+    group2Info.setConfiguration(topoGroup2Config);
+
+    groupInfoMap.put("group1", group1Info);
+    groupInfoMap.put("group2", group2Info);
+
+    Map<String, HostGroup> groupMap = new HashMap<String, HostGroup>();
+    groupMap.put("group1", group1);
+    groupMap.put("group2", group2);
+
+    serviceComponents.put("service1", Arrays.asList("component1", "component3"));
+    serviceComponents.put("service2", Arrays.asList("component2", "component4"));
+
+    group1ServiceComponents.put("service1", Arrays.asList("component1", "component3"));
+    group1ServiceComponents.put("service2", Collections.singleton("component2"));
+    group2ServiceComponents.put("service2", Collections.singleton("component3"));
+    group2ServiceComponents.put("service2", Collections.singleton("component4"));
+
+    expect(blueprint.getHostGroup("group1")).andReturn(group1).anyTimes();
+    expect(blueprint.getHostGroup("group2")).andReturn(group2).anyTimes();
+    expect(blueprint.getComponents("service1")).andReturn(Arrays.asList("component1", "component3")).anyTimes();
+    expect(blueprint.getComponents("service2")).andReturn(Arrays.asList("component2", "component4")).anyTimes();
+    expect(blueprint.getConfiguration()).andReturn(bpConfiguration).anyTimes();
+    expect(blueprint.getHostGroups()).andReturn(groupMap).anyTimes();
+    expect(blueprint.getHostGroupsForComponent("component1")).andReturn(Collections.singleton(group1)).anyTimes();
+    expect(blueprint.getHostGroupsForComponent("component2")).andReturn(Collections.singleton(group1)).anyTimes();
+    expect(blueprint.getHostGroupsForComponent("component3")).andReturn(Arrays.asList(group1,
group2)).anyTimes();
+    expect(blueprint.getHostGroupsForComponent("component4")).andReturn(Collections.singleton(group2)).anyTimes();
+    expect(blueprint.getHostGroupsForService("service1")).andReturn(Arrays.asList(group1,
group2)).anyTimes();
+    expect(blueprint.getHostGroupsForService("service2")).andReturn(Arrays.asList(group1,
group2)).anyTimes();
+    expect(blueprint.getName()).andReturn(BLUEPRINT_NAME).anyTimes();
+    expect(blueprint.getServices()).andReturn(Arrays.asList("service1", "service2")).anyTimes();
+    expect(blueprint.getStack()).andReturn(stack).anyTimes();
+    // don't expect toEntity()
+
+    expect(stack.getAllConfigurationTypes("service1")).andReturn(Arrays.asList("service1-site",
"service1-env")).anyTimes();
+    expect(stack.getAllConfigurationTypes("service2")).andReturn(Arrays.asList("service2-site",
"service2-env")).anyTimes();
+    expect(stack.getAutoDeployInfo("component1")).andReturn(null).anyTimes();
+    expect(stack.getAutoDeployInfo("component2")).andReturn(null).anyTimes();
+    expect(stack.getAutoDeployInfo("component3")).andReturn(null).anyTimes();
+    expect(stack.getAutoDeployInfo("component4")).andReturn(null).anyTimes();
+
+    expect(serviceComponentInfo.isClient()).andReturn(false).anyTimes();
+    expect(clientComponentInfo.isClient()).andReturn(true).anyTimes();
+
+    expect(stack.getComponentInfo("component1")).andReturn(serviceComponentInfo).anyTimes();
+    expect(stack.getComponentInfo("component2")).andReturn(serviceComponentInfo).anyTimes();
+    expect(stack.getComponentInfo("component3")).andReturn(clientComponentInfo).anyTimes();
+    expect(stack.getComponentInfo("component4")).andReturn(clientComponentInfo).anyTimes();
+
+    expect(stack.getCardinality("component1")).andReturn(new Cardinality("1")).anyTimes();
+    expect(stack.getCardinality("component2")).andReturn(new Cardinality("1")).anyTimes();
+    expect(stack.getCardinality("component3")).andReturn(new Cardinality("1+")).anyTimes();
+    expect(stack.getCardinality("component4")).andReturn(new Cardinality("1+")).anyTimes();
+    expect(stack.getComponents()).andReturn(serviceComponents).anyTimes();
+    expect(stack.getComponents("service1")).andReturn(serviceComponents.get("service1")).anyTimes();
+    expect(stack.getComponents("service2")).andReturn(serviceComponents.get("service2")).anyTimes();
+    expect(stack.getConfiguration()).andReturn(stackConfig).anyTimes();
+    expect(stack.getName()).andReturn(STACK_NAME).anyTimes();
+    expect(stack.getVersion()).andReturn(STACK_VERSION).anyTimes();
+    expect(stack.getServiceForConfigType("service1-site")).andReturn("service1").anyTimes();
+    expect(stack.getServiceForConfigType("service2-site")).andReturn("service2").anyTimes();
+    expect(stack.getExcludedConfigurationTypes("service1")).andReturn(Collections.<String>emptySet()).anyTimes();
+    expect(stack.getExcludedConfigurationTypes("service2")).andReturn(Collections.<String>emptySet()).anyTimes();
+
+    expect(request.getBlueprint()).andReturn(blueprint).anyTimes();
+    expect(request.getClusterId()).andReturn(CLUSTER_ID).anyTimes();
+    expect(request.getClusterName()).andReturn(CLUSTER_NAME).anyTimes();
+    expect(request.getDescription()).andReturn("Provision Cluster Test").anyTimes();
+    expect(request.getConfiguration()).andReturn(topoConfiguration).anyTimes();
+    expect(request.getHostGroupInfo()).andReturn(groupInfoMap).anyTimes();
+    expect(request.getTopologyValidators()).andReturn(topologyValidators).anyTimes();
+    expect(request.getConfigRecommendationStrategy()).andReturn(ConfigRecommendationStrategy.NEVER_APPLY);
+    expect(request.getProvisionAction()).andReturn(INSTALL_AND_START).anyTimes();
+    expect(request.getSecurityConfiguration()).andReturn(null).anyTimes();
+
+
+    expect(group1.getBlueprintName()).andReturn(BLUEPRINT_NAME).anyTimes();
+    expect(group1.getCardinality()).andReturn("test cardinality").anyTimes();
+    expect(group1.containsMasterComponent()).andReturn(true).anyTimes();
+    expect(group1.getComponentNames()).andReturn(group1Components).anyTimes();
+    expect(group1.getComponentNames(ProvisionAction.INSTALL_ONLY)).andReturn(Arrays.asList("component1"))
+      .anyTimes();
+    expect(group1.getComponentNames(ProvisionAction.START_ONLY)).andReturn(Collections.<String>emptyList())
+      .anyTimes();
+
+    expect(group1.getComponents("service1")).andReturn(group1ServiceComponents.get("service1")).anyTimes();
+    expect(group1.getComponents("service2")).andReturn(group1ServiceComponents.get("service1")).anyTimes();
+    expect(group1.getConfiguration()).andReturn(topoGroup1Config).anyTimes();
+    expect(group1.getName()).andReturn("group1").anyTimes();
+    expect(group1.getServices()).andReturn(Arrays.asList("service1", "service2")).anyTimes();
+    expect(group1.getStack()).andReturn(stack).anyTimes();
+
+    expect(group2.getBlueprintName()).andReturn(BLUEPRINT_NAME).anyTimes();
+    expect(group2.getCardinality()).andReturn("test cardinality").anyTimes();
+    expect(group2.containsMasterComponent()).andReturn(false).anyTimes();
+    expect(group2.getComponentNames()).andReturn(group2Components).anyTimes();
+    expect(group2.getComponentNames(ProvisionAction.INSTALL_ONLY)).andReturn(Collections.<String>emptyList()).anyTimes();
+    expect(group2.getComponentNames(ProvisionAction.START_ONLY)).andReturn(Collections.<String>emptyList())
+      .anyTimes();
+    expect(group2.getComponents("service1")).andReturn(group2ServiceComponents.get("service1")).anyTimes();
+    expect(group2.getComponents("service2")).andReturn(group2ServiceComponents.get("service2")).anyTimes();
+    expect(group2.getConfiguration()).andReturn(topoGroup2Config).anyTimes();
+    expect(group2.getName()).andReturn("group2").anyTimes();
+    expect(group2.getServices()).andReturn(Arrays.asList("service1", "service2")).anyTimes();
+    expect(group2.getStack()).andReturn(stack).anyTimes();
+
+    // Create partial mock to allow actual logical request creation
+    logicalRequestFactory = createMockBuilder(LogicalRequestFactory.class).addMockedMethod(
+      LogicalRequestFactory.class.getMethod("createRequest",
+        Long.class, TopologyRequest.class, ClusterTopology.class,
+        TopologyLogicalRequestEntity.class)).createMock();
+    Field f = TopologyManager.class.getDeclaredField("logicalRequestFactory");
+    f.setAccessible(true);
+    f.set(topologyManager, logicalRequestFactory);
+
+    PowerMock.mockStatic(AmbariServer.class);
+    expect(AmbariServer.getController()).andReturn(managementController).anyTimes();
+    PowerMock.replay(AmbariServer.class);
+    expect(managementController.getClusters()).andReturn(clusters).anyTimes();
+    expect(clusters.getClusterById(anyLong())).andReturn(cluster).anyTimes();
+    expect(cluster.getClusterName()).andReturn(CLUSTER_NAME).anyTimes();
+
+    expect(ambariContext.getPersistedTopologyState()).andReturn(persistedState).anyTimes();
+    //todo: don't ignore param
+    ambariContext.createAmbariResources(isA(ClusterTopology.class), eq(CLUSTER_NAME), (SecurityType)
isNull(), (String) isNull());
+    expectLastCall().once();
+    expect(ambariContext.getNextRequestId()).andReturn(1L).once();
+    expect(ambariContext.isClusterKerberosEnabled(CLUSTER_ID)).andReturn(false).anyTimes();
+    expect(ambariContext.getClusterId(CLUSTER_NAME)).andReturn(CLUSTER_ID).anyTimes();
+    expect(ambariContext.getClusterName(CLUSTER_ID)).andReturn(CLUSTER_NAME).anyTimes();
+    // so only INITIAL config
+    expect(ambariContext.createConfigurationRequests(capture(configRequestPropertiesCapture))).
+      andReturn(Collections.singletonList(configurationRequest));
+    expect(ambariContext.createConfigurationRequests(capture(configRequestPropertiesCapture2))).
+      andReturn(Collections.singletonList(configurationRequest2)).once();
+    expect(ambariContext.createConfigurationRequests(capture(configRequestPropertiesCapture3))).
+      andReturn(Collections.singletonList(configurationRequest3)).once();
+    // INSTALL task expectation
+    expect(ambariContext.createAmbariTask(anyLong(), anyLong(), anyString(),
+      anyString(), eq(AmbariContext.TaskType.INSTALL), anyBoolean())).andReturn(hostRoleCommand).times(7);
+    expect(ambariContext.createAmbariTask(anyLong(), anyLong(), anyString(),
+      anyString(), eq(AmbariContext.TaskType.START), anyBoolean())).andReturn(hostRoleCommand).times(1);
+    expect(hostRoleCommand.getTaskId()).andReturn(1L).atLeastOnce();
+    expect(hostRoleCommand.getRoleCommand()).andReturn(RoleCommand.INSTALL).atLeastOnce();
+    expect(hostRoleCommand.getRole()).andReturn(Role.INSTALL_PACKAGES).atLeastOnce();
+    expect(hostRoleCommand.getStatus()).andReturn(HostRoleStatus.COMPLETED).atLeastOnce();
+
+    ambariContext.setConfigurationOnCluster(capture(updateClusterConfigRequestCapture));
+    expectLastCall().times(3);
+    ambariContext.persistInstallStateForUI(CLUSTER_NAME, STACK_NAME, STACK_VERSION);
+    expectLastCall().once();
+
+    expect(clusterController.ensureResourceProvider(anyObject(Resource.Type.class))).andReturn(resourceProvider);
+    expect(executor.submit(anyObject(AsyncCallableService.class))).andReturn(mockFuture);
+
+    persistedTopologyRequest = new PersistedTopologyRequest(1, request);
+    expect(persistedState.getAllRequests()).andReturn(Collections.<ClusterTopology,
+      List<LogicalRequest>>emptyMap()).once();
+    expect(persistedState.persistTopologyRequest(request)).andReturn(persistedTopologyRequest).once();
+    persistedState.persistLogicalRequest((LogicalRequest) anyObject(), anyLong());
+    expectLastCall().once();
+
+    replay(blueprint, stack, request, group1, group2, ambariContext, logicalRequestFactory,
logicalRequest,
+      configurationRequest, configurationRequest2, configurationRequest3, requestStatusResponse,
executor,
+      persistedState, securityConfigurationFactory, credentialStoreService, clusterController,
resourceProvider,
+      mockFuture, managementController, clusters, cluster, hostRoleCommand, serviceComponentInfo,
clientComponentInfo);
+
+    Class clazz = TopologyManager.class;
+
+    f = clazz.getDeclaredField("executor");
+    f.setAccessible(true);
+    f.set(topologyManager, executor);
+
+    EasyMockSupport.injectMocks(topologyManager);
+  }
+
+  @After
+  public void tearDown() {
+    verify(blueprint, stack, request, group1, group2, ambariContext, logicalRequestFactory,
+      logicalRequest, configurationRequest, configurationRequest2, configurationRequest3,
+      requestStatusResponse, executor, persistedState, mockFuture,
+      managementController, clusters, cluster, hostRoleCommand);
+
+    reset(blueprint, stack, request, group1, group2, ambariContext, logicalRequestFactory,
+      logicalRequest, configurationRequest, configurationRequest2, configurationRequest3,
+      requestStatusResponse, executor, persistedState, mockFuture,
+      managementController, clusters, cluster, hostRoleCommand);
+  }
+
+  @Test
+  public void testProvisionCluster() throws Exception {
+    topologyManager.provisionCluster(request);
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/f50c2296/ambari-server/src/test/java/org/apache/ambari/server/topology/ClusterInstallWithoutStartTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/topology/ClusterInstallWithoutStartTest.java
b/ambari-server/src/test/java/org/apache/ambari/server/topology/ClusterInstallWithoutStartTest.java
index afc0065..4a71699 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/topology/ClusterInstallWithoutStartTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/topology/ClusterInstallWithoutStartTest.java
@@ -38,6 +38,7 @@ import org.apache.ambari.server.controller.AmbariServer;
 import org.apache.ambari.server.controller.ClusterRequest;
 import org.apache.ambari.server.controller.ConfigurationRequest;
 import org.apache.ambari.server.controller.RequestStatusResponse;
+import org.apache.ambari.server.controller.internal.ProvisionAction;
 import org.apache.ambari.server.controller.internal.ProvisionClusterRequest;
 import org.apache.ambari.server.controller.internal.Stack;
 import org.apache.ambari.server.controller.spi.ClusterController;
@@ -293,7 +294,7 @@ public class ClusterInstallWithoutStartTest {
     expect(group1.getCardinality()).andReturn("test cardinality").anyTimes();
     expect(group1.containsMasterComponent()).andReturn(true).anyTimes();
     expect(group1.getComponentNames()).andReturn(group1Components).anyTimes();
-    expect(group1.getComponentNames(START_ONLY)).andReturn(Collections.<String>emptyList()).anyTimes();
+    expect(group1.getComponentNames(anyObject(ProvisionAction.class))).andReturn(Collections.<String>emptyList()).anyTimes();
 
     expect(group1.getComponents("service1")).andReturn(group1ServiceComponents.get("service1")).anyTimes();
     expect(group1.getComponents("service2")).andReturn(group1ServiceComponents.get("service1")).anyTimes();
@@ -306,7 +307,7 @@ public class ClusterInstallWithoutStartTest {
     expect(group2.getCardinality()).andReturn("test cardinality").anyTimes();
     expect(group2.containsMasterComponent()).andReturn(false).anyTimes();
     expect(group2.getComponentNames()).andReturn(group2Components).anyTimes();
-    expect(group2.getComponentNames(START_ONLY)).andReturn(Collections.<String>emptyList()).anyTimes();
+    expect(group2.getComponentNames(anyObject(ProvisionAction.class))).andReturn(Collections.<String>emptyList()).anyTimes();
     expect(group2.getComponents("service1")).andReturn(group2ServiceComponents.get("service1")).anyTimes();
     expect(group2.getComponents("service2")).andReturn(group2ServiceComponents.get("service2")).anyTimes();
     expect(group2.getConfiguration()).andReturn(topoGroup2Config).anyTimes();


Mime
View raw message