ServiceResourceProvider serviceResourceProvider = createStrictMock(ServiceResourceProvider.class);
ResourceProvider componentResourceProvider = createStrictMock(ResourceProvider.class);
ResourceProvider hostResourceProvider = createStrictMock(ResourceProvider.class);
ResourceProvider hostComponentResourceProvider = createStrictMock(ResourceProvider.class);
ConfigGroupResourceProvider configGroupResourceProvider = createStrictMock(ConfigGroupResourceProvider.class);
PersistKeyValueImpl persistKeyValue = createNiceMock(PersistKeyValueImpl.class);
Capture<ClusterRequest> createClusterRequestCapture = new Capture<ClusterRequest>();
Capture<Set<ClusterRequest>> updateClusterRequestCapture = new Capture<Set<ClusterRequest>>();
Capture<Map<String, String>> updateClusterPropertyMapCapture = new Capture<Map<String, String>>();
Capture<Set<ClusterRequest>> updateClusterRequestCapture2 = new Capture<Set<ClusterRequest>>();
Capture<Map<String, String>> updateClusterPropertyMapCapture2 = new Capture<Map<String, String>>();
Capture<Set<ClusterRequest>> updateClusterRequestCapture3 = new Capture<Set<ClusterRequest>>();
Capture<Map<String, String>> updateClusterPropertyMapCapture3 = new Capture<Map<String, String>>();
Capture<Set<ClusterRequest>> updateClusterRequestCapture4 = new Capture<Set<ClusterRequest>>();
Capture<Map<String, String>> updateClusterPropertyMapCapture4 = new Capture<Map<String, String>>();
Capture<Request> serviceRequestCapture = new Capture<Request>();
Capture<Request> componentRequestCapture = new Capture<Request>();
Capture<Request> componentRequestCapture2 = new Capture<Request>();
Capture<Request> hostRequestCapture = new Capture<Request>();
Capture<Request> hostComponentRequestCapture = new Capture<Request>();
Capture<Set<ConfigGroupRequest>> configGroupRequestCapture = new Capture<Set<ConfigGroupRequest>>();
Set<StackServiceResponse> stackServiceResponses = new LinkedHashSet<StackServiceResponse>();
stackServiceResponses.add(stackServiceResponse1);
stackServiceResponses.add(stackServiceResponse2);
// service1 has 3 components
Set<StackServiceComponentResponse> stackServiceComponentResponses1 = new LinkedHashSet<StackServiceComponentResponse>();
stackServiceComponentResponses1.add(stackServiceComponentResponse1);
stackServiceComponentResponses1.add(stackServiceComponentResponse2);
stackServiceComponentResponses1.add(stackServiceComponentResponse4);
// service2 has 1 components
Set<StackServiceComponentResponse> stackServiceComponentResponses2 = new LinkedHashSet<StackServiceComponentResponse>();
stackServiceComponentResponses2.add(stackServiceComponentResponse3);
// service1 has 2 config
Set<StackConfigurationResponse> stackConfigurationResponses1 = new LinkedHashSet<StackConfigurationResponse>();
stackConfigurationResponses1.add(stackConfigurationResponse1);
stackConfigurationResponses1.add(stackConfigurationResponse5);
// service2 has 3 config
Set<StackConfigurationResponse> stackConfigurationResponses2 = new LinkedHashSet<StackConfigurationResponse>();
stackConfigurationResponses2.add(stackConfigurationResponse2);
stackConfigurationResponses2.add(stackConfigurationResponse3);
stackConfigurationResponses2.add(stackConfigurationResponse4);
Collection<HostGroupComponentEntity> hostGroupComponents = new LinkedHashSet<HostGroupComponentEntity>();
hostGroupComponents.add(hostGroupComponent1);
hostGroupComponents.add(hostGroupComponent2);
hostGroupComponents.add(hostGroupComponent3);
hostGroupComponents.add(hostGroupComponent4);
// request properties
Set<Map<String, Object>> propertySet = new LinkedHashSet<Map<String, Object>>();
Map<String, Object> properties = new LinkedHashMap<String, Object>();
properties.put(ClusterResourceProvider.CLUSTER_NAME_PROPERTY_ID, clusterName);
properties.put(ClusterResourceProvider.BLUEPRINT_PROPERTY_ID, blueprintName);
propertySet.add(properties);
Collection<Map<String, Object>> hostGroups = new ArrayList<Map<String, Object>>();
Map<String, Object> hostGroupProperties = new HashMap<String, Object>();
hostGroups.add(hostGroupProperties);
hostGroupProperties.put("name", "group1");
Collection<Map<String, String>> hostGroupHosts = new ArrayList<Map<String, String>>();
hostGroupProperties.put("hosts", hostGroupHosts);
Map<String, String> hostGroupHostProperties = new HashMap<String, String>();
hostGroupHostProperties.put("fqdn", "host.domain");
hostGroupHosts.add(hostGroupHostProperties);
properties.put("host_groups", hostGroups);
Map<String, String> mapGroupConfigProperties = new HashMap<String, String>();
mapGroupConfigProperties.put("myGroupProp", "awesomeValue");
// blueprint core-site cluster configuration properties
Map<String, String> blueprintCoreConfigProperties = new HashMap<String, String>();
blueprintCoreConfigProperties.put("property1", "value2");
blueprintCoreConfigProperties.put("new.property", "new.property.value");
Map<String, String> blueprintGlobalConfigProperties = new HashMap<String, String>();
blueprintGlobalConfigProperties.put("hive_database", "New MySQL Database");
Collection<BlueprintConfigEntity> configurations = new HashSet<BlueprintConfigEntity>();
configurations.add(blueprintConfig);
configurations.add(blueprintConfig2);
// expectations
expect(request.getProperties()).andReturn(propertySet).anyTimes();
expect(blueprintDAO.findByName(blueprintName)).andReturn(blueprint);
expect(blueprint.getStackName()).andReturn(stackName);
expect(blueprint.getStackVersion()).andReturn(stackVersion);
expect(blueprint.getConfigurations()).andReturn(configurations);
expect(blueprint.validateConfigurations(metaInfo, PropertyInfo.PropertyType.PASSWORD)).andReturn(
Collections.<String, Map<String, Collection<String>>>emptyMap());
expect(metaInfo.getComponentDependencies("test", "1.23", "service1", "component1")).
andReturn(Collections.<DependencyInfo>emptyList());
expect(metaInfo.getComponentDependencies("test", "1.23", "service1", "component2")).
andReturn(Collections.<DependencyInfo>emptyList());
expect(metaInfo.getComponentDependencies("test", "1.23", "service1", "MYSQL_SERVER")).
andReturn(Collections.<DependencyInfo>emptyList());
expect(metaInfo.getComponentDependencies("test", "1.23", "service2", "component3")).
andReturn(Collections.<DependencyInfo>emptyList());
expect(managementController.getStackServices(capture(stackServiceRequestCapture))).andReturn(stackServiceResponses);
expect(stackServiceResponse1.getServiceName()).andReturn("service1");
expect(stackServiceResponse2.getServiceName()).andReturn("service2");
expect(managementController.getStackComponents(capture(serviceComponentRequestCapture1))).
andReturn(stackServiceComponentResponses1);
expect(stackServiceComponentResponse1.getComponentName()).andReturn("component1");
expect(stackServiceComponentResponse2.getComponentName()).andReturn("component2");
expect(stackServiceComponentResponse4.getComponentName()).andReturn("MYSQL_SERVER");
expect(managementController.getStackConfigurations(capture(serviceConfigurationRequestCapture1))).
andReturn(stackConfigurationResponses1);
expect(stackConfigurationResponse1.getType()).andReturn("core-site.xml");
expect(stackConfigurationResponse1.getPropertyName()).andReturn("property1");
expect(stackConfigurationResponse1.getPropertyValue()).andReturn("value1");
expect(managementController.getStackComponents(capture(serviceComponentRequestCapture2))).
andReturn(stackServiceComponentResponses2);
expect(stackServiceComponentResponse3.getComponentName()).andReturn("component3");
expect(managementController.getStackConfigurations(capture(serviceConfigurationRequestCapture2))).
andReturn(stackConfigurationResponses2);
expect(stackConfigurationResponse2.getType()).andReturn("hdfs-site.xml");
expect(stackConfigurationResponse2.getPropertyName()).andReturn("property2");
expect(stackConfigurationResponse2.getPropertyValue()).andReturn("value2");
expect(stackConfigurationResponse3.getType()).andReturn("global.xml");
expect(stackConfigurationResponse3.getPropertyName()).andReturn("oozie_user");
expect(stackConfigurationResponse3.getPropertyValue()).andReturn("oozie");
expect(stackConfigurationResponse4.getType()).andReturn("core-site.xml");
expect(stackConfigurationResponse4.getPropertyName()).andReturn("property3");
expect(stackConfigurationResponse4.getPropertyValue()).andReturn("value3");
expect(stackConfigurationResponse5.getType()).andReturn("hive-site.xml");
expect(stackConfigurationResponse5.getPropertyName()).andReturn("javax.jdo.option.ConnectionURL");
expect(stackConfigurationResponse5.getPropertyValue()).andReturn("localhost:12345");
expect(blueprintConfig.getBlueprintName()).andReturn("test-blueprint").anyTimes();
expect(blueprintConfig.getType()).andReturn("core-site").anyTimes();
expect(blueprintConfig.getConfigData()).andReturn(new Gson().toJson(blueprintCoreConfigProperties)).anyTimes();
expect(blueprintConfig2.getBlueprintName()).andReturn("test-blueprint").anyTimes();
expect(blueprintConfig2.getType()).andReturn("global").anyTimes();
expect(blueprintConfig2.getConfigData()).andReturn(new Gson().toJson(blueprintGlobalConfigProperties)).anyTimes();
expect(blueprint.getHostGroups()).andReturn(Collections.singleton(hostGroup)).anyTimes();
expect(hostGroup.getName()).andReturn("group1").anyTimes();
expect(hostGroup.getComponents()).andReturn(hostGroupComponents).anyTimes();
expect(hostGroupComponent1.getName()).andReturn("component1").anyTimes();
expect(hostGroupComponent2.getName()).andReturn("component2").anyTimes();
expect(hostGroupComponent3.getName()).andReturn("component3").anyTimes();
expect(hostGroupComponent4.getName()).andReturn("MYSQL_SERVER").anyTimes();
expect(hostGroup.getConfigurations()).andReturn(
Collections.<HostGroupConfigEntity>singleton(hostGroupConfig)).anyTimes();
expect(hostGroupConfig.getType()).andReturn("core-site").anyTimes();
expect(hostGroupConfig.getConfigData()).andReturn(new Gson().toJson(mapGroupConfigProperties)).anyTimes();
managementController.createCluster(capture(createClusterRequestCapture));
expect(managementController.updateClusters(capture(updateClusterRequestCapture),
capture(updateClusterPropertyMapCapture))).andReturn(null);
expect(managementController.updateClusters(capture(updateClusterRequestCapture2),
capture(updateClusterPropertyMapCapture2))).andReturn(null);
expect(managementController.updateClusters(capture(updateClusterRequestCapture3),
capture(updateClusterPropertyMapCapture3))).andReturn(null);
expect(managementController.updateClusters(capture(updateClusterRequestCapture4),
capture(updateClusterPropertyMapCapture4))).andReturn(null);
expect(serviceResourceProvider.createResources(capture(serviceRequestCapture))).andReturn(null);
expect(componentResourceProvider.createResources(capture(componentRequestCapture))).andReturn(null);
expect(componentResourceProvider.createResources(capture(componentRequestCapture2))).andReturn(null);
expect(hostResourceProvider.createResources(capture(hostRequestCapture))).andReturn(null);
expect(hostComponentResourceProvider.createResources(capture(hostComponentRequestCapture))).andReturn(null);
expect(serviceResourceProvider.installAndStart(clusterName)).andReturn(response);
expect(configGroupResourceProvider.createResources(
capture(configGroupRequestCapture))).andReturn(null);
persistKeyValue.put("CLUSTER_CURRENT_STATUS", "{\"clusterState\":\"CLUSTER_STARTED_5\"}");
replay(blueprintDAO, managementController, request, response, blueprint, stackServiceResponse1, stackServiceResponse2,
stackServiceComponentResponse1, stackServiceComponentResponse2, stackServiceComponentResponse3,
stackServiceComponentResponse4, stackConfigurationResponse1, stackConfigurationResponse2,
stackConfigurationResponse3, stackConfigurationResponse4, stackConfigurationResponse5, blueprintConfig,