/**
* 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.
*/
package org.apache.ambari.server.topology;
import static org.easymock.EasyMock.createMock;
import static org.easymock.EasyMock.createNiceMock;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.replay;
import static org.easymock.EasyMock.verify;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.apache.ambari.server.controller.internal.Stack;
import org.apache.ambari.server.orm.entities.BlueprintEntity;
import org.apache.ambari.server.state.SecurityType;
import org.junit.Before;
import org.junit.Test;
/**
* Blueprint unit tests.
*/
public class BlueprintImplTest {
private static final Map<String, Map<String, Map<String, String>>> EMPTY_ATTRIBUTES = new HashMap<>();
private static final Map<String, Map<String, String>> EMPTY_PROPERTIES = new HashMap<>();
private static final Configuration EMPTY_CONFIGURATION = new Configuration(EMPTY_PROPERTIES, EMPTY_ATTRIBUTES);
Stack stack = createNiceMock(Stack.class);
Setting setting = createNiceMock(Setting.class);
HostGroup group1 = createMock(HostGroup.class);
HostGroup group2 = createMock(HostGroup.class);
Set<HostGroup> hostGroups = new HashSet<>();
Set<String> group1Components = new HashSet<>();
Set<String> group2Components = new HashSet<>();
Map<String, Map<String, String>> properties = new HashMap<>();
Map<String, String> hdfsProps = new HashMap<>();
Configuration configuration = new Configuration(properties, EMPTY_ATTRIBUTES, EMPTY_CONFIGURATION);
@Before
public void setup() {
properties.put("hdfs-site", hdfsProps);
hdfsProps.put("foo", "val");
hdfsProps.put("bar", "val");
hdfsProps.put("dfs.nameservices", "val");
Map<String, String> category1Props = new HashMap<>();
properties.put("category1", category1Props);
category1Props.put("prop1", "val");
hostGroups.add(group1);
hostGroups.add(group2);
group1Components.add("c1");
group1Components.add("c2");
group2Components.add("c1");
group2Components.add("c3");
expect(stack.isPasswordProperty("HDFS", "hdfs-site", "foo")).andReturn(false).anyTimes();
expect(stack.isPasswordProperty("HDFS", "hdfs-site", "bar")).andReturn(false).anyTimes();
expect(stack.isPasswordProperty("HDFS", "hdfs-site", "some_password")).andReturn(true).anyTimes();
expect(stack.isPasswordProperty("HDFS", "category1", "prop1")).andReturn(false).anyTimes();
expect(stack.isPasswordProperty("SERVICE2", "category2", "prop2")).andReturn(false).anyTimes();
expect(stack.getServiceForComponent("c1")).andReturn("HDFS").anyTimes();
expect(stack.getServiceForComponent("c2")).andReturn("HDFS").anyTimes();
expect(stack.getServiceForComponent("c3")).andReturn("SERVICE2").anyTimes();
expect(group1.getName()).andReturn("group1").anyTimes();
expect(group2.getName()).andReturn("group2").anyTimes();
expect(group1.getConfiguration()).andReturn(EMPTY_CONFIGURATION).anyTimes();
expect(group1.getComponentNames()).andReturn(group1Components).anyTimes();
expect(group2.getComponentNames()).andReturn(group2Components).anyTimes();
Collection<Stack.ConfigProperty> requiredHDFSProperties = new HashSet<>();
requiredHDFSProperties.add(new Stack.ConfigProperty("hdfs-site", "foo", null));
requiredHDFSProperties.add(new Stack.ConfigProperty("hdfs-site", "bar", null));
requiredHDFSProperties.add(new Stack.ConfigProperty("hdfs-site", "some_password", null));
requiredHDFSProperties.add(new Stack.ConfigProperty("category1", "prop1", null));
Collection<Stack.ConfigProperty> requiredService2Properties = new HashSet<>();
requiredService2Properties.add(new Stack.ConfigProperty("category2", "prop2", null));
expect(stack.getRequiredConfigurationProperties("HDFS")).andReturn(requiredHDFSProperties).anyTimes();
expect(stack.getRequiredConfigurationProperties("SERVICE2")).andReturn(requiredService2Properties).anyTimes();
}
@Test
public void testValidateConfigurations__basic_positive() throws Exception {
expect(group1.getCardinality()).andReturn("1").atLeastOnce();
expect(group1.getComponents()).andReturn(Arrays.asList(new Component("c1"), new Component("c2"))).atLeastOnce();
expect(group2.getCardinality()).andReturn("1").atLeastOnce();
expect(group2.getComponents()).andReturn(Arrays.asList(new Component("c1"), new Component("c3"))).atLeastOnce();
expect(group2.getConfiguration()).andReturn(EMPTY_CONFIGURATION).atLeastOnce();
replay(stack, group1, group2);
Map<String, String> category2Props = new HashMap<>();
properties.put("category2", category2Props);
category2Props.put("prop2", "val");
SecurityConfiguration securityConfiguration = new SecurityConfiguration(SecurityType.KERBEROS, "testRef", null);
Blueprint blueprint = new BlueprintImpl("test", hostGroups, stack, configuration, securityConfiguration);
blueprint.validateRequiredProperties();
BlueprintEntity entity = blueprint.toEntity();
verify(stack, group1, group2);
assertTrue(entity.getSecurityType() == SecurityType.KERBEROS);
assertTrue(entity.getSecurityDescriptorReference().equals("testRef"));
}
@Test
public void testValidateConfigurations__hostGroupConfig() throws Exception {
Map<String, Map<String, String>> group2Props = new HashMap<>();
Map<String, String> group2Category2Props = new HashMap<>();
group2Props.put("category2", group2Category2Props);
group2Category2Props.put("prop2", "val");
// set config for group2 which contains a required property
Configuration group2Configuration = new Configuration(group2Props, EMPTY_ATTRIBUTES, configuration);
expect(group2.getConfiguration()).andReturn(group2Configuration).atLeastOnce();
expect(group1.getCardinality()).andReturn("1").atLeastOnce();
expect(group1.getComponents()).andReturn(Arrays.asList(new Component("NAMENODE"))).atLeastOnce();
expect(group2.getCardinality()).andReturn("1").atLeastOnce();
expect(group2.getComponents()).andReturn(Arrays.asList(new Component("NAMENODE"))).atLeastOnce();
Map<String, String> category2Props = new HashMap<>();
properties.put("category2", category2Props);
category2Props.put("prop2", "val");
group1Components.add("NAMENODE");
group2Components.add("NAMENODE");
Map<String, String> hdfsProps = new HashMap<>();
properties.put("hdfs-site", hdfsProps);
hdfsProps.put("foo", "val");
hdfsProps.put("bar", "val");
Map<String, String> hadoopProps = new HashMap<>();
properties.put("hadoop-env", hadoopProps);
hadoopProps.put("dfs_ha_initial_namenode_active", "%HOSTGROUP:group1%");
hadoopProps.put("dfs_ha_initial_namenode_standby", "%HOSTGROUP:group2%");
replay(stack, group1, group2);
Blueprint blueprint = new BlueprintImpl("test", hostGroups, stack, configuration, null);
blueprint.validateRequiredProperties();
BlueprintEntity entity = blueprint.toEntity();
verify(stack, group1, group2);
assertTrue(entity.getSecurityType() == SecurityType.NONE);
assertTrue(entity.getSecurityDescriptorReference() == null);
}
@Test
public void testValidateConfigurations__hostGroupConfigForNameNodeHAPositive() throws Exception {
Map<String, Map<String, String>> group2Props = new HashMap<>();
Map<String, String> group2Category2Props = new HashMap<>();
group2Props.put("category2", group2Category2Props);
group2Category2Props.put("prop2", "val");
// set config for group2 which contains a required property
Configuration group2Configuration = new Configuration(group2Props, EMPTY_ATTRIBUTES, configuration);
expect(group2.getConfiguration()).andReturn(group2Configuration).atLeastOnce();
expect(group1.getCardinality()).andReturn("1").atLeastOnce();
expect(group1.getComponents()).andReturn(Arrays.asList(new Component("NAMENODE"),new Component("ZKFC"))).atLeastOnce();
expect(group2.getCardinality()).andReturn("1").atLeastOnce();
expect(group2.getComponents()).andReturn(Arrays.asList(new Component("NAMENODE"),new Component("ZKFC"))).atLeastOnce();
Map<String, String> category2Props = new HashMap<>();
properties.put("category2", category2Props);
category2Props.put("prop2", "val");
group1Components.add("NAMENODE");
group1Components.add("ZKFC");
group2Components.add("NAMENODE");
group2Components.add("ZKFC");
Map<String, String> hdfsProps = new HashMap<>();
properties.put("hdfs-site", hdfsProps);
hdfsProps.put("foo", "val");
hdfsProps.put("bar", "val");
hdfsProps.put("dfs.nameservices", "val");
Map<String, String> hadoopProps = new HashMap<>();
properties.put("hadoop-env", hadoopProps);
hadoopProps.put("dfs_ha_initial_namenode_active", "%HOSTGROUP::group1%");
hadoopProps.put("dfs_ha_initial_namenode_standby", "%HOSTGROUP::group2%");
replay(stack, group1, group2);
Blueprint blueprint = new BlueprintImpl("test", hostGroups, stack, configuration, null);
blueprint.validateRequiredProperties();
BlueprintEntity entity = blueprint.toEntity();
verify(stack, group1, group2);
assertTrue(entity.getSecurityType() == SecurityType.NONE);
assertTrue(entity.getSecurityDescriptorReference() == null);
}
@Test(expected= IllegalArgumentException.class)
public void testValidateConfigurations__hostGroupConfigForNameNodeHAInCorrectHostGroups() throws Exception {
Map<String, Map<String, String>> group2Props = new HashMap<>();
Map<String, String> group2Category2Props = new HashMap<>();
group2Props.put("category2", group2Category2Props);
group2Category2Props.put("prop2", "val");
// set config for group2 which contains a required property
Configuration group2Configuration = new Configuration(group2Props, EMPTY_ATTRIBUTES, configuration);
expect(group2.getConfiguration()).andReturn(group2Configuration).atLeastOnce();
expect(group1.getCardinality()).andReturn("1").atLeastOnce();
expect(group1.getComponents()).andReturn(Arrays.asList(new Component("NAMENODE"),new Component("ZKFC"))).atLeastOnce();
expect(group2.getCardinality()).andReturn("1").atLeastOnce();
expect(group2.getComponents()).andReturn(Arrays.asList(new Component("NAMENODE"),new Component("ZKFC"))).atLeastOnce();
Map<String, String> category2Props = new HashMap<>();
properties.put("category2", category2Props);
category2Props.put("prop2", "val");
group1Components.add("NAMENODE");
group1Components.add("ZKFC");
group2Components.add("NAMENODE");
group2Components.add("ZKFC");
expect(stack.getServiceForComponent("NAMENODE")).andReturn("SERVICE2").atLeastOnce();
expect(stack.getServiceForComponent("ZKFC")).andReturn("SERVICE2").atLeastOnce();
Map<String, String> hdfsProps = new HashMap<>();
properties.put("hdfs-site", hdfsProps);
hdfsProps.put("foo", "val");
hdfsProps.put("bar", "val");
hdfsProps.put("dfs.nameservices", "val");
Map<String, String> hadoopProps = new HashMap<>();
properties.put("hadoop-env", hadoopProps);
hadoopProps.put("dfs_ha_initial_namenode_active", "%HOSTGROUP::group2%");
hadoopProps.put("dfs_ha_initial_namenode_standby", "%HOSTGROUP::group3%");
replay(stack, group1, group2);
Blueprint blueprint = new BlueprintImpl("test", hostGroups, stack, configuration, null);
blueprint.validateRequiredProperties();
verify(stack, group1, group2);
}
@Test(expected= IllegalArgumentException.class)
public void testValidateConfigurations__hostGroupConfigForNameNodeHAMappedSameHostGroup() throws Exception {
Map<String, Map<String, String>> group2Props = new HashMap<>();
Map<String, String> group2Category2Props = new HashMap<>();
group2Props.put("category2", group2Category2Props);
group2Category2Props.put("prop2", "val");
// set config for group2 which contains a required property
Configuration group2Configuration = new Configuration(group2Props, EMPTY_ATTRIBUTES, configuration);
expect(group2.getConfiguration()).andReturn(group2Configuration).atLeastOnce();
expect(group1.getCardinality()).andReturn("1").atLeastOnce();
expect(group1.getComponents()).andReturn(Arrays.asList(new Component("NAMENODE"),new Component("ZKFC"))).atLeastOnce();
expect(group2.getCardinality()).andReturn("1").atLeastOnce();
expect(group2.getComponents()).andReturn(Arrays.asList(new Component("NAMENODE"),new Component("ZKFC"))).atLeastOnce();
Map<String, String> category2Props = new HashMap<>();
properties.put("category2", category2Props);
category2Props.put("prop2", "val");
group1Components.add("NAMENODE");
group1Components.add("ZKFC");
group2Components.add("NAMENODE");
group2Components.add("ZKFC");
expect(stack.getServiceForComponent("NAMENODE")).andReturn("SERVICE2").atLeastOnce();
expect(stack.getServiceForComponent("ZKFC")).andReturn("SERVICE2").atLeastOnce();
Map<String, String> hdfsProps = new HashMap<>();
properties.put("hdfs-site", hdfsProps);
hdfsProps.put("foo", "val");
hdfsProps.put("bar", "val");
hdfsProps.put("dfs.nameservices", "val");
Map<String, String> hadoopProps = new HashMap<>();
properties.put("hadoop-env", hadoopProps);
hadoopProps.put("dfs_ha_initial_namenode_active", "%HOSTGROUP::group2%");
hadoopProps.put("dfs_ha_initial_namenode_standby", "%HOSTGROUP::group2%");
replay(stack, group1, group2);
Blueprint blueprint = new BlueprintImpl("test", hostGroups, stack, configuration, null);
blueprint.validateRequiredProperties();
verify(stack, group1, group2);
}
@Test(expected = InvalidTopologyException.class)
public void testValidateConfigurations__secretReference() throws InvalidTopologyException {
Map<String, Map<String, String>> group2Props = new HashMap<>();
Map<String, String> group2Category2Props = new HashMap<>();
group2Props.put("category2", group2Category2Props);
group2Category2Props.put("prop2", "val");
hdfsProps.put("secret", "SECRET:hdfs-site:1:test");
replay(stack, group1, group2);
Blueprint blueprint = new BlueprintImpl("test", hostGroups, stack, configuration, null);
blueprint.validateRequiredProperties();
verify(stack, group1, group2);
}
@Test
public void testAutoSkipFailureEnabled() {
Blueprint blueprint = new BlueprintImpl("test", hostGroups, stack, configuration, null, setting);
HashMap<String, String> skipFailureSetting = new HashMap<>();
skipFailureSetting.put(Setting.SETTING_NAME_SKIP_FAILURE, "true");
expect(setting.getSettingValue(Setting.SETTING_NAME_DEPLOYMENT_SETTINGS)).andReturn(Collections.singleton(skipFailureSetting));
replay(stack, setting);
assertTrue(blueprint.shouldSkipFailure());
verify(stack, setting);
}
@Test
public void testAutoSkipFailureDisabled() {
Blueprint blueprint = new BlueprintImpl("test", hostGroups, stack, configuration, null, setting);
HashMap<String, String> skipFailureSetting = new HashMap<>();
skipFailureSetting.put(Setting.SETTING_NAME_SKIP_FAILURE, "false");
expect(setting.getSettingValue(Setting.SETTING_NAME_DEPLOYMENT_SETTINGS)).andReturn(Collections.singleton(skipFailureSetting));
replay(stack, setting);
assertFalse(blueprint.shouldSkipFailure());
verify(stack, setting);
}
//todo: ensure coverage for these existing tests
// private void validateEntity(BlueprintEntity entity, boolean containsConfig) {
// assertEquals(BLUEPRINT_NAME, entity.getBlueprintName());
//
// StackEntity stackEntity = entity.getStack();
// assertEquals("test-stack-name", stackEntity.getStackName());
// assertEquals("test-stack-version", stackEntity.getStackVersion());
//
// Collection<HostGroupEntity> hostGroupEntities = entity.getHostGroups();
//
// assertEquals(2, hostGroupEntities.size());
// for (HostGroupEntity hostGroup : hostGroupEntities) {
// assertEquals(BLUEPRINT_NAME, hostGroup.getBlueprintName());
// assertNotNull(hostGroup.getBlueprintEntity());
// Collection<HostGroupComponentEntity> componentEntities = hostGroup.getComponents();
// if (hostGroup.getName().equals("group1")) {
// assertEquals("1", hostGroup.getCardinality());
// assertEquals(2, componentEntities.size());
// Iterator<HostGroupComponentEntity> componentIterator = componentEntities.iterator();
// String name = componentIterator.next().getName();
// assertTrue(name.equals("component1") || name.equals("component2"));
// String name2 = componentIterator.next().getName();
// assertFalse(name.equals(name2));
// assertTrue(name2.equals("component1") || name2.equals("component2"));
// } else if (hostGroup.getName().equals("group2")) {
// assertEquals("2", hostGroup.getCardinality());
// assertEquals(1, componentEntities.size());
// HostGroupComponentEntity componentEntity = componentEntities.iterator().next();
// assertEquals("component1", componentEntity.getName());
//
// if (containsConfig) {
// Collection<HostGroupConfigEntity> configurations = hostGroup.getConfigurations();
// assertEquals(1, configurations.size());
// HostGroupConfigEntity hostGroupConfigEntity = configurations.iterator().next();
// assertEquals(BLUEPRINT_NAME, hostGroupConfigEntity.getBlueprintName());
// assertSame(hostGroup, hostGroupConfigEntity.getHostGroupEntity());
// assertEquals("core-site", hostGroupConfigEntity.getType());
// Map<String, String> properties = gson.<Map<String, String>>fromJson(
// hostGroupConfigEntity.getConfigData(), Map.class);
// assertEquals(1, properties.size());
// assertEquals("anything", properties.get("my.custom.hg.property"));
// }
// } else {
// fail("Unexpected host group name");
// }
// }
// Collection<BlueprintConfigEntity> configurations = entity.getConfigurations();
// if (containsConfig) {
// assertEquals(1, configurations.size());
// BlueprintConfigEntity blueprintConfigEntity = configurations.iterator().next();
// assertEquals(BLUEPRINT_NAME, blueprintConfigEntity.getBlueprintName());
// assertSame(entity, blueprintConfigEntity.getBlueprintEntity());
// assertEquals("core-site", blueprintConfigEntity.getType());
// Map<String, String> properties = gson.<Map<String, String>>fromJson(
// blueprintConfigEntity.getConfigData(), Map.class);
// assertEquals(2, properties.size());
// assertEquals("480", properties.get("fs.trash.interval"));
// assertEquals("8500", properties.get("ipc.client.idlethreshold"));
// } else {
// assertEquals(0, configurations.size());
// }
// }
// @Test
// public void testCreateResource_Validate__Cardinality__ExternalComponent() throws Exception {
//
// Set<Map<String, Object>> setProperties = getTestProperties();
// setConfigurationProperties(setProperties);
// ((Set<Map<String, String>>) setProperties.iterator().next().get("configurations")).
// add(Collections.singletonMap("global/hive_database", "Existing MySQL Database"));
//
// Iterator iter = ((HashSet<Map<String, HashSet<Map<String, String>>>>) setProperties.iterator().next().
// get(BlueprintResourceProvider.HOST_GROUP_PROPERTY_ID)).
// iterator().next().get("components").iterator();
// iter.next();
// iter.remove();
//
// AmbariManagementController managementController = createMock(AmbariManagementController.class);
// Capture<Set<StackServiceRequest>> stackServiceRequestCapture = EasyMock.newCapture();
// Capture<Set<StackServiceComponentRequest>> serviceComponentRequestCapture = EasyMock.newCapture();
// Capture<StackConfigurationRequest> stackConfigurationRequestCapture = EasyMock.newCapture();
// Capture<StackLevelConfigurationRequest> stackLevelConfigurationRequestCapture = EasyMock.newCapture();
// Request request = createMock(Request.class);
// StackServiceResponse stackServiceResponse = createMock(StackServiceResponse.class);
// StackServiceComponentResponse stackServiceComponentResponse = createNiceMock(StackServiceComponentResponse.class);
// StackServiceComponentResponse stackServiceComponentResponse2 = createNiceMock(StackServiceComponentResponse.class);
// Set<StackServiceComponentResponse> setServiceComponents = new HashSet<StackServiceComponentResponse>();
// setServiceComponents.add(stackServiceComponentResponse);
// setServiceComponents.add(stackServiceComponentResponse2);
//
// Map<String, ServiceInfo> services = new HashMap<String, ServiceInfo>();
// ServiceInfo service = new ServiceInfo();
// service.setName("test-service");
// services.put("test-service", service);
//
// List<ComponentInfo> serviceComponents = new ArrayList<ComponentInfo>();
// ComponentInfo component1 = new ComponentInfo();
// component1.setName("component1");
// ComponentInfo component2 = new ComponentInfo();
// component2.setName("MYSQL_SERVER");
// serviceComponents.add(component1);
// serviceComponents.add(component2);
//
// Capture<BlueprintEntity> entityCapture = EasyMock.newCapture();
//
// // set expectations
// expect(blueprintFactory.createBlueprint(setProperties.iterator().next())).andReturn(blueprint).once();
// expect(blueprint.validateRequiredProperties()).andReturn(Collections.<String, Map<String, Collection<String>>>emptyMap()).once();
// expect(blueprint.toEntity()).andReturn(entity);
// expect(blueprint.getName()).andReturn(BLUEPRINT_NAME).atLeastOnce();
// expect(managementController.getStackServices(capture(stackServiceRequestCapture))).andReturn(
// Collections.<StackServiceResponse>singleton(stackServiceResponse));
// expect(stackServiceResponse.getServiceName()).andReturn("test-service").anyTimes();
// expect(stackServiceResponse.getStackName()).andReturn("test-stack-name").anyTimes();
// expect(stackServiceResponse.getStackVersion()).andReturn("test-stack-version").anyTimes();
// expect(stackServiceResponse.getExcludedConfigTypes()).andReturn(Collections.<String>emptySet());
//
// expect(managementController.getStackComponents(capture(serviceComponentRequestCapture))).andReturn(setServiceComponents).anyTimes();
// expect(stackServiceComponentResponse.getCardinality()).andReturn("2").anyTimes();
// expect(stackServiceComponentResponse.getComponentName()).andReturn("component1").anyTimes();
// expect(stackServiceComponentResponse.getServiceName()).andReturn("test-service").anyTimes();
// expect(stackServiceComponentResponse.getStackName()).andReturn("test-stack-name").anyTimes();
// expect(stackServiceComponentResponse.getStackVersion()).andReturn("test-stack-version").anyTimes();
// expect(stackServiceComponentResponse2.getCardinality()).andReturn("1").anyTimes();
// expect(stackServiceComponentResponse2.getComponentName()).andReturn("MYSQL_SERVER").anyTimes();
// expect(stackServiceComponentResponse2.getServiceName()).andReturn("test-service").anyTimes();
// expect(stackServiceComponentResponse2.getStackName()).andReturn("test-stack-name").anyTimes();
// expect(stackServiceComponentResponse2.getStackVersion()).andReturn("test-stack-version").anyTimes();
//
// expect(managementController.getStackConfigurations(Collections.singleton(capture(stackConfigurationRequestCapture)))).
// andReturn(Collections.<StackConfigurationResponse>emptySet());
// expect(managementController.getStackLevelConfigurations(Collections.singleton(capture(stackLevelConfigurationRequestCapture)))).
// andReturn(Collections.<StackConfigurationResponse>emptySet());
//
// expect(metaInfo.getComponentDependencies("test-stack-name", "test-stack-version", "test-service", "MYSQL_SERVER")).
// andReturn(Collections.<DependencyInfo>emptyList()).anyTimes();
// expect(metaInfo.getComponentDependencies("test-stack-name", "test-stack-version", "test-service", "component1")).
// andReturn(Collections.<DependencyInfo>emptyList()).anyTimes();
//
// expect(request.getProperties()).andReturn(setProperties);
// expect(request.getRequestInfoProperties()).andReturn(Collections.<String, String>emptyMap());
// expect(dao.findByName(BLUEPRINT_NAME)).andReturn(null);
// expect(metaInfo.getServices("test-stack-name", "test-stack-version")).andReturn(services).anyTimes();
// expect(metaInfo.getComponentsByService("test-stack-name", "test-stack-version", "test-service")).
// andReturn(serviceComponents).anyTimes();
// expect(metaInfo.getComponentToService("test-stack-name", "test-stack-version", "component1")).
// andReturn("test-service").anyTimes();
// expect(metaInfo.getComponentToService("test-stack-name", "test-stack-version", "component2")).
// andReturn("test-service").anyTimes();
// expect(metaInfo.getService("test-stack-name", "test-stack-version", "test-service")).andReturn(service).anyTimes();
// dao.create(capture(entityCapture));
//
// replay(dao, metaInfo, request, managementController, stackServiceResponse,
// stackServiceComponentResponse, stackServiceComponentResponse2);
// // end expectations
//
// ResourceProvider provider = AbstractControllerResourceProvider.getResourceProvider(
// Resource.Type.Blueprint,
// PropertyHelper.getPropertyIds(Resource.Type.Blueprint),
// PropertyHelper.getKeyPropertyIds(Resource.Type.Blueprint),
// managementController);
//
// AbstractResourceProviderTest.TestObserver observer = new AbstractResourceProviderTest.TestObserver();
// ((ObservableResourceProvider)provider).addObserver(observer);
//
// provider.createResources(request);
//
// ResourceProviderEvent lastEvent = observer.getLastEvent();
// assertNotNull(lastEvent);
// assertEquals(Resource.Type.Blueprint, lastEvent.getResourceType());
// assertEquals(ResourceProviderEvent.Type.Create, lastEvent.getType());
// assertEquals(request, lastEvent.getRequest());
// assertNull(lastEvent.getPredicate());
//
// verify(dao, metaInfo, request, managementController, stackServiceResponse,
// stackServiceComponentResponse, stackServiceComponentResponse2);
// }
// @Test
// public void testCreateResource_Validate__Cardinality__MultipleDependencyInstances() throws AmbariException, ResourceAlreadyExistsException,
// SystemException, UnsupportedPropertyException, NoSuchParentResourceException {
//
// Set<Map<String, Object>> setProperties = getTestProperties();
// setConfigurationProperties(setProperties);
//
// AmbariManagementController managementController = createMock(AmbariManagementController.class);
// Capture<Set<StackServiceRequest>> stackServiceRequestCapture = EasyMock.newCapture();
// Capture<Set<StackServiceComponentRequest>> serviceComponentRequestCapture = EasyMock.newCapture();
// Capture<StackConfigurationRequest> stackConfigurationRequestCapture = EasyMock.newCapture();
// Capture<StackLevelConfigurationRequest> stackLevelConfigurationRequestCapture = EasyMock.newCapture();
// Request request = createMock(Request.class);
// StackServiceResponse stackServiceResponse = createMock(StackServiceResponse.class);
// StackServiceComponentResponse stackServiceComponentResponse = createNiceMock(StackServiceComponentResponse.class);
// StackServiceComponentResponse stackServiceComponentResponse2 = createNiceMock(StackServiceComponentResponse.class);
// Set<StackServiceComponentResponse> setServiceComponents = new HashSet<StackServiceComponentResponse>();
// setServiceComponents.add(stackServiceComponentResponse);
// setServiceComponents.add(stackServiceComponentResponse2);
//
// DependencyInfo dependencyInfo = new DependencyInfo();
// AutoDeployInfo autoDeployInfo = new AutoDeployInfo();
// autoDeployInfo.setEnabled(false);
// dependencyInfo.setAutoDeploy(autoDeployInfo);
// dependencyInfo.setScope("cluster");
// dependencyInfo.setName("test-service/component1");
//
// Map<String, ServiceInfo> services = new HashMap<String, ServiceInfo>();
// ServiceInfo service = new ServiceInfo();
// service.setName("test-service");
// services.put("test-service", service);
//
// List<ComponentInfo> serviceComponents = new ArrayList<ComponentInfo>();
// ComponentInfo component1 = new ComponentInfo();
// component1.setName("component1");
// ComponentInfo component2 = new ComponentInfo();
// component2.setName("component2");
// serviceComponents.add(component1);
// serviceComponents.add(component2);
//
// Capture<BlueprintEntity> entityCapture = EasyMock.newCapture();
//
// // set expectations
// expect(managementController.getStackServices(capture(stackServiceRequestCapture))).andReturn(
// Collections.<StackServiceResponse>singleton(stackServiceResponse));
// expect(stackServiceResponse.getServiceName()).andReturn("test-service").anyTimes();
// expect(stackServiceResponse.getStackName()).andReturn("test-stack-name").anyTimes();
// expect(stackServiceResponse.getStackVersion()).andReturn("test-stack-version").anyTimes();
// expect(stackServiceResponse.getExcludedConfigTypes()).andReturn(Collections.<String>emptySet());
//
// expect(managementController.getStackComponents(capture(serviceComponentRequestCapture))).andReturn(setServiceComponents).anyTimes();
// expect(stackServiceComponentResponse.getCardinality()).andReturn("2").anyTimes();
// expect(stackServiceComponentResponse.getComponentName()).andReturn("component1").anyTimes();
// expect(stackServiceComponentResponse.getServiceName()).andReturn("test-service").anyTimes();
// expect(stackServiceComponentResponse.getStackName()).andReturn("test-stack-name").anyTimes();
// expect(stackServiceComponentResponse.getStackVersion()).andReturn("test-stack-version").anyTimes();
// expect(stackServiceComponentResponse2.getCardinality()).andReturn("1").anyTimes();
// expect(stackServiceComponentResponse2.getComponentName()).andReturn("component2").anyTimes();
// expect(stackServiceComponentResponse2.getServiceName()).andReturn("test-service").anyTimes();
// expect(stackServiceComponentResponse2.getStackName()).andReturn("test-stack-name").anyTimes();
// expect(stackServiceComponentResponse2.getStackVersion()).andReturn("test-stack-version").anyTimes();
//
// expect(managementController.getStackConfigurations(Collections.singleton(capture(stackConfigurationRequestCapture)))).
// andReturn(Collections.<StackConfigurationResponse>emptySet());
// expect(managementController.getStackLevelConfigurations(Collections.singleton(capture(stackLevelConfigurationRequestCapture)))).
// andReturn(Collections.<StackConfigurationResponse>emptySet());
//
// expect(metaInfo.getComponentDependencies("test-stack-name", "test-stack-version", "test-service", "component2")).
// andReturn(Collections.<DependencyInfo>singletonList(dependencyInfo)).anyTimes();
// expect(metaInfo.getComponentDependencies("test-stack-name", "test-stack-version", "test-service", "component1")).
// andReturn(Collections.<DependencyInfo>emptyList()).anyTimes();
//
// expect(request.getProperties()).andReturn(setProperties);
// expect(request.getRequestInfoProperties()).andReturn(Collections.<String, String>emptyMap());
// expect(dao.findByName(BLUEPRINT_NAME)).andReturn(null);
// expect(metaInfo.getServices("test-stack-name", "test-stack-version")).andReturn(services).anyTimes();
// expect(metaInfo.getComponentsByService("test-stack-name", "test-stack-version", "test-service")).
// andReturn(serviceComponents).anyTimes();
// expect(metaInfo.getComponentToService("test-stack-name", "test-stack-version", "component1")).
// andReturn("test-service").anyTimes();
// expect(metaInfo.getComponentToService("test-stack-name", "test-stack-version", "component2")).
// andReturn("test-service").anyTimes();
// expect(metaInfo.getService("test-stack-name", "test-stack-version", "test-service")).andReturn(service).anyTimes();
// dao.create(capture(entityCapture));
//
// replay(dao, metaInfo, request, managementController, stackServiceResponse,
// stackServiceComponentResponse, stackServiceComponentResponse2);
// // end expectations
//
// ResourceProvider provider = AbstractControllerResourceProvider.getResourceProvider(
// Resource.Type.Blueprint,
// PropertyHelper.getPropertyIds(Resource.Type.Blueprint),
// PropertyHelper.getKeyPropertyIds(Resource.Type.Blueprint),
// managementController);
//
// AbstractResourceProviderTest.TestObserver observer = new AbstractResourceProviderTest.TestObserver();
// ((ObservableResourceProvider)provider).addObserver(observer);
//
// provider.createResources(request);
//
// ResourceProviderEvent lastEvent = observer.getLastEvent();
// assertNotNull(lastEvent);
// assertEquals(Resource.Type.Blueprint, lastEvent.getResourceType());
// assertEquals(ResourceProviderEvent.Type.Create, lastEvent.getType());
// assertEquals(request, lastEvent.getRequest());
// assertNull(lastEvent.getPredicate());
//
// verify(dao, metaInfo, request, managementController, stackServiceResponse,
// stackServiceComponentResponse, stackServiceComponentResponse2);
// }
// @Test
// public void testCreateResource_Validate__Cardinality__AutoCommit() throws AmbariException, ResourceAlreadyExistsException,
// SystemException, UnsupportedPropertyException, NoSuchParentResourceException {
//
// Set<Map<String, Object>> setProperties = getTestProperties();
// setConfigurationProperties(setProperties);
//
// // remove component2 from BP
// Iterator iter = ((HashSet<Map<String, HashSet<Map<String, String>>>>) setProperties.iterator().next().
// get(BlueprintResourceProvider.HOST_GROUP_PROPERTY_ID)).
// iterator().next().get("components").iterator();
// iter.next();
// iter.remove();
//
// AmbariManagementController managementController = createMock(AmbariManagementController.class);
// Capture<Set<StackServiceRequest>> stackServiceRequestCapture = EasyMock.newCapture();
// Capture<Set<StackServiceComponentRequest>> serviceComponentRequestCapture = EasyMock.newCapture();
// Capture<StackConfigurationRequest> stackConfigurationRequestCapture = EasyMock.newCapture();
// Capture<StackLevelConfigurationRequest> stackLevelConfigurationRequestCapture = EasyMock.newCapture();
// Request request = createMock(Request.class);
// StackServiceResponse stackServiceResponse = createMock(StackServiceResponse.class);
// StackServiceComponentResponse stackServiceComponentResponse = createNiceMock(StackServiceComponentResponse.class);
// StackServiceComponentResponse stackServiceComponentResponse2 = createNiceMock(StackServiceComponentResponse.class);
// Set<StackServiceComponentResponse> setServiceComponents = new HashSet<StackServiceComponentResponse>();
// setServiceComponents.add(stackServiceComponentResponse);
// setServiceComponents.add(stackServiceComponentResponse2);
//
// DependencyInfo dependencyInfo = new DependencyInfo();
// AutoDeployInfo autoDeployInfo = new AutoDeployInfo();
// autoDeployInfo.setEnabled(true);
// autoDeployInfo.setCoLocate("test-service/component1");
// dependencyInfo.setAutoDeploy(autoDeployInfo);
// dependencyInfo.setScope("cluster");
// dependencyInfo.setName("test-service/component2");
//
// Map<String, ServiceInfo> services = new HashMap<String, ServiceInfo>();
// ServiceInfo service = new ServiceInfo();
// service.setName("test-service");
// services.put("test-service", service);
//
// List<ComponentInfo> serviceComponents = new ArrayList<ComponentInfo>();
// ComponentInfo component1 = new ComponentInfo();
// component1.setName("component1");
// ComponentInfo component2 = new ComponentInfo();
// component2.setName("component2");
// serviceComponents.add(component1);
// serviceComponents.add(component2);
//
// Capture<BlueprintEntity> entityCapture = EasyMock.newCapture();
//
// // set expectations
// expect(managementController.getStackServices(capture(stackServiceRequestCapture))).andReturn(
// Collections.<StackServiceResponse>singleton(stackServiceResponse));
// expect(stackServiceResponse.getServiceName()).andReturn("test-service").anyTimes();
// expect(stackServiceResponse.getStackName()).andReturn("test-stack-name").anyTimes();
// expect(stackServiceResponse.getStackVersion()).andReturn("test-stack-version").anyTimes();
// expect(stackServiceResponse.getExcludedConfigTypes()).andReturn(Collections.<String>emptySet());
//
// expect(managementController.getStackComponents(capture(serviceComponentRequestCapture))).andReturn(setServiceComponents).anyTimes();
// expect(stackServiceComponentResponse.getCardinality()).andReturn("2").anyTimes();
// expect(stackServiceComponentResponse.getComponentName()).andReturn("component1").anyTimes();
// expect(stackServiceComponentResponse.getServiceName()).andReturn("test-service").anyTimes();
// expect(stackServiceComponentResponse.getStackName()).andReturn("test-stack-name").anyTimes();
// expect(stackServiceComponentResponse.getStackVersion()).andReturn("test-stack-version").anyTimes();
// expect(stackServiceComponentResponse2.getCardinality()).andReturn("1").anyTimes();
// expect(stackServiceComponentResponse2.getComponentName()).andReturn("component2").anyTimes();
// expect(stackServiceComponentResponse2.getServiceName()).andReturn("test-service").anyTimes();
// expect(stackServiceComponentResponse2.getStackName()).andReturn("test-stack-name").anyTimes();
// expect(stackServiceComponentResponse2.getStackVersion()).andReturn("test-stack-version").anyTimes();
//
// expect(managementController.getStackConfigurations(Collections.singleton(capture(stackConfigurationRequestCapture)))).
// andReturn(Collections.<StackConfigurationResponse>emptySet());
// expect(managementController.getStackLevelConfigurations(Collections.singleton(capture(stackLevelConfigurationRequestCapture)))).
// andReturn(Collections.<StackConfigurationResponse>emptySet());
//
// expect(metaInfo.getComponentDependencies("test-stack-name", "test-stack-version", "test-service", "component2")).
// andReturn(Collections.<DependencyInfo>emptyList()).anyTimes();
// expect(metaInfo.getComponentDependencies("test-stack-name", "test-stack-version", "test-service", "component1")).
// andReturn(Collections.<DependencyInfo>singletonList(dependencyInfo)).anyTimes();
//
// expect(request.getProperties()).andReturn(setProperties);
// expect(request.getRequestInfoProperties()).andReturn(Collections.<String, String>emptyMap());
// expect(dao.findByName(BLUEPRINT_NAME)).andReturn(null);
// expect(metaInfo.getServices("test-stack-name", "test-stack-version")).andReturn(services).anyTimes();
// expect(metaInfo.getComponentsByService("test-stack-name", "test-stack-version", "test-service")).
// andReturn(serviceComponents).anyTimes();
// expect(metaInfo.getComponentToService("test-stack-name", "test-stack-version", "component1")).
// andReturn("test-service").anyTimes();
// expect(metaInfo.getComponentToService("test-stack-name", "test-stack-version", "component2")).
// andReturn("test-service").anyTimes();
// expect(metaInfo.getService("test-stack-name", "test-stack-version", "test-service")).andReturn(service).anyTimes();
// dao.create(capture(entityCapture));
//
// replay(dao, metaInfo, request, managementController, stackServiceResponse,
// stackServiceComponentResponse, stackServiceComponentResponse2);
// // end expectations
//
// ResourceProvider provider = AbstractControllerResourceProvider.getResourceProvider(
// Resource.Type.Blueprint,
// PropertyHelper.getPropertyIds(Resource.Type.Blueprint),
// PropertyHelper.getKeyPropertyIds(Resource.Type.Blueprint),
// managementController);
//
// AbstractResourceProviderTest.TestObserver observer = new AbstractResourceProviderTest.TestObserver();
// ((ObservableResourceProvider)provider).addObserver(observer);
//
// provider.createResources(request);
//
// ResourceProviderEvent lastEvent = observer.getLastEvent();
// assertNotNull(lastEvent);
// assertEquals(Resource.Type.Blueprint, lastEvent.getResourceType());
// assertEquals(ResourceProviderEvent.Type.Create, lastEvent.getType());
// assertEquals(request, lastEvent.getRequest());
// assertNull(lastEvent.getPredicate());
//
// verify(dao, metaInfo, request, managementController, stackServiceResponse,
// stackServiceComponentResponse, stackServiceComponentResponse2);
// }
// @Test
// public void testCreateResource_Validate__Cardinality__Fail() throws AmbariException, ResourceAlreadyExistsException,
// SystemException, UnsupportedPropertyException, NoSuchParentResourceException {
//
// Set<Map<String, Object>> setProperties = getTestProperties();
// setConfigurationProperties(setProperties);
//
// Iterator iter = ((HashSet<Map<String, HashSet<Map<String, String>>>>) setProperties.iterator().next().
// get(BlueprintResourceProvider.HOST_GROUP_PROPERTY_ID)).
// iterator().next().get("components").iterator();
// iter.next();
// iter.remove();
//
// AmbariManagementController managementController = createMock(AmbariManagementController.class);
// Capture<Set<StackServiceRequest>> stackServiceRequestCapture = EasyMock.newCapture();
// Capture<Set<StackServiceComponentRequest>> serviceComponentRequestCapture = EasyMock.newCapture();
// Capture<StackConfigurationRequest> stackConfigurationRequestCapture = EasyMock.newCapture();
// Capture<StackLevelConfigurationRequest> stackLevelConfigurationRequestCapture = EasyMock.newCapture();
// Request request = createMock(Request.class);
// StackServiceResponse stackServiceResponse = createMock(StackServiceResponse.class);
// StackServiceComponentResponse stackServiceComponentResponse = createNiceMock(StackServiceComponentResponse.class);
// StackServiceComponentResponse stackServiceComponentResponse2 = createNiceMock(StackServiceComponentResponse.class);
// Set<StackServiceComponentResponse> setServiceComponents = new HashSet<StackServiceComponentResponse>();
// setServiceComponents.add(stackServiceComponentResponse);
// setServiceComponents.add(stackServiceComponentResponse2);
//
// Map<String, ServiceInfo> services = new HashMap<String, ServiceInfo>();
// ServiceInfo service = new ServiceInfo();
// service.setName("test-service");
// services.put("test-service", service);
//
// List<ComponentInfo> serviceComponents = new ArrayList<ComponentInfo>();
// ComponentInfo component1 = new ComponentInfo();
// component1.setName("component1");
// ComponentInfo component2 = new ComponentInfo();
// component2.setName("MYSQL_SERVER");
// serviceComponents.add(component1);
// serviceComponents.add(component2);
//
// // set expectations
// expect(managementController.getStackServices(capture(stackServiceRequestCapture))).andReturn(
// Collections.<StackServiceResponse>singleton(stackServiceResponse));
// expect(stackServiceResponse.getServiceName()).andReturn("test-service").anyTimes();
// expect(stackServiceResponse.getStackName()).andReturn("test-stack-name").anyTimes();
// expect(stackServiceResponse.getStackVersion()).andReturn("test-stack-version").anyTimes();
// expect(stackServiceResponse.getExcludedConfigTypes()).andReturn(Collections.<String>emptySet());
//
// expect(managementController.getStackComponents(capture(serviceComponentRequestCapture))).andReturn(setServiceComponents).anyTimes();
// expect(stackServiceComponentResponse.getCardinality()).andReturn("2").anyTimes();
// expect(stackServiceComponentResponse.getComponentName()).andReturn("component1").anyTimes();
// expect(stackServiceComponentResponse.getServiceName()).andReturn("test-service").anyTimes();
// expect(stackServiceComponentResponse.getStackName()).andReturn("test-stack-name").anyTimes();
// expect(stackServiceComponentResponse.getStackVersion()).andReturn("test-stack-version").anyTimes();
// expect(stackServiceComponentResponse2.getCardinality()).andReturn("1").anyTimes();
// expect(stackServiceComponentResponse2.getComponentName()).andReturn("MYSQL_SERVER").anyTimes();
// expect(stackServiceComponentResponse2.getServiceName()).andReturn("test-service").anyTimes();
// expect(stackServiceComponentResponse2.getStackName()).andReturn("test-stack-name").anyTimes();
// expect(stackServiceComponentResponse2.getStackVersion()).andReturn("test-stack-version").anyTimes();
//
// expect(managementController.getStackConfigurations(Collections.singleton(capture(stackConfigurationRequestCapture)))).
// andReturn(Collections.<StackConfigurationResponse>emptySet());
// expect(managementController.getStackLevelConfigurations(Collections.singleton(capture(stackLevelConfigurationRequestCapture)))).
// andReturn(Collections.<StackConfigurationResponse>emptySet());
//
// expect(metaInfo.getComponentDependencies("test-stack-name", "test-stack-version", "test-service", "MYSQL_SERVER")).
// andReturn(Collections.<DependencyInfo>emptyList()).anyTimes();
// expect(metaInfo.getComponentDependencies("test-stack-name", "test-stack-version", "test-service", "component1")).
// andReturn(Collections.<DependencyInfo>emptyList()).anyTimes();
//
// expect(request.getProperties()).andReturn(setProperties);
// expect(request.getRequestInfoProperties()).andReturn(Collections.<String, String>emptyMap());
// expect(dao.findByName(BLUEPRINT_NAME)).andReturn(null);
// expect(metaInfo.getServices("test-stack-name", "test-stack-version")).andReturn(services).anyTimes();
// expect(metaInfo.getComponentsByService("test-stack-name", "test-stack-version", "test-service")).
// andReturn(serviceComponents).anyTimes();
// expect(metaInfo.getComponentToService("test-stack-name", "test-stack-version", "component1")).
// andReturn("test-service").anyTimes();
// expect(metaInfo.getComponentToService("test-stack-name", "test-stack-version", "component2")).
// andReturn("test-service").anyTimes();
// expect(metaInfo.getService("test-stack-name", "test-stack-version", "test-service")).andReturn(service).anyTimes();
//
// replay(dao, metaInfo, request, managementController, stackServiceResponse,
// stackServiceComponentResponse, stackServiceComponentResponse2);
// // end expectations
//
// ResourceProvider provider = AbstractControllerResourceProvider.getResourceProvider(
// Resource.Type.Blueprint,
// PropertyHelper.getPropertyIds(Resource.Type.Blueprint),
// PropertyHelper.getKeyPropertyIds(Resource.Type.Blueprint),
// managementController);
//
// AbstractResourceProviderTest.TestObserver observer = new AbstractResourceProviderTest.TestObserver();
// ((ObservableResourceProvider)provider).addObserver(observer);
//
// try {
// provider.createResources(request);
// fail("Expected validation failure for MYSQL_SERVER");
// } catch (IllegalArgumentException e) {
// // expected
// }
//
// verify(dao, metaInfo, request, managementController, stackServiceResponse,
// stackServiceComponentResponse, stackServiceComponentResponse2);
// }
// @Test
// public void testCreateResource_Validate__AmbariServerComponent() throws AmbariException, ResourceAlreadyExistsException,
// SystemException, UnsupportedPropertyException, NoSuchParentResourceException
// {
// Request request = createMock(Request.class);
// AmbariManagementController managementController = createMock(AmbariManagementController.class);
// Capture<Set<StackServiceRequest>> stackServiceRequestCapture = EasyMock.newCapture();
//
// Map<String, ServiceInfo> services = new HashMap<String, ServiceInfo>();
// ServiceInfo service = new ServiceInfo();
// service.setName("test-service");
// services.put("test-service", service);
//
// List<ComponentInfo> serviceComponents = new ArrayList<ComponentInfo>();
// ComponentInfo component1 = new ComponentInfo();
// component1.setName("component1");
// ComponentInfo component2 = new ComponentInfo();
// component2.setName("component2");
// serviceComponents.add(component1);
// serviceComponents.add(component2);
//
//
// Set<Map<String, Object>> setProperties = getTestProperties();
// ((HashSet<Map<String, String>>) ((HashSet<Map<String, Object>>) setProperties.iterator().next().get(
// BlueprintResourceProvider.HOST_GROUP_PROPERTY_ID)).iterator().next().get("components")).
// iterator().next().put("name", "AMBARI_SERVER");
//
// Capture<BlueprintEntity> entityCapture = EasyMock.newCapture();
//
// // set expectations
// expect(managementController.getStackServices(capture(stackServiceRequestCapture))).andReturn(
// Collections.<StackServiceResponse>emptySet());
// expect(request.getProperties()).andReturn(setProperties);
// expect(request.getRequestInfoProperties()).andReturn(Collections.<String, String>emptyMap());
// expect(dao.findByName(BLUEPRINT_NAME)).andReturn(null);
// expect(metaInfo.getServices("test-stack-name", "test-stack-version")).andReturn(services).anyTimes();
// expect(metaInfo.getComponentsByService("test-stack-name", "test-stack-version", "test-service")).
// andReturn(serviceComponents).anyTimes();
// expect(metaInfo.getComponentToService("test-stack-name", "test-stack-version", "component1")).
// andReturn("test-service").anyTimes();
// expect(metaInfo.getService("test-stack-name", "test-stack-version", "test-service")).andReturn(service).anyTimes();
//
// dao.create(capture(entityCapture));
//
// replay(dao, metaInfo, request, managementController);
// // end expectations
//
// ResourceProvider provider = AbstractControllerResourceProvider.getResourceProvider(
// Resource.Type.Blueprint,
// PropertyHelper.getPropertyIds(Resource.Type.Blueprint),
// PropertyHelper.getKeyPropertyIds(Resource.Type.Blueprint),
// managementController);
//
// AbstractResourceProviderTest.TestObserver observer = new AbstractResourceProviderTest.TestObserver();
// ((ObservableResourceProvider)provider).addObserver(observer);
//
// provider.createResources(request);
//
// ResourceProviderEvent lastEvent = observer.getLastEvent();
// assertNotNull(lastEvent);
// assertEquals(Resource.Type.Blueprint, lastEvent.getResourceType());
// assertEquals(ResourceProviderEvent.Type.Create, lastEvent.getType());
// assertEquals(request, lastEvent.getRequest());
// assertNull(lastEvent.getPredicate());
//
// verify(dao, metaInfo, request, managementController);
// }
}