| /** |
| * 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.controller.internal; |
| |
| import static org.easymock.EasyMock.createMock; |
| import static org.easymock.EasyMock.createNiceMock; |
| import static org.easymock.EasyMock.expect; |
| import static org.easymock.EasyMock.verify; |
| import static org.junit.Assert.assertEquals; |
| import static org.junit.Assert.assertNotNull; |
| import static org.junit.Assert.assertNull; |
| import static org.junit.Assert.assertSame; |
| import static org.junit.Assert.assertTrue; |
| import static org.powermock.api.easymock.PowerMock.createStrictMock; |
| import static org.powermock.api.easymock.PowerMock.replay; |
| import static org.powermock.api.easymock.PowerMock.reset; |
| |
| import java.lang.reflect.Field; |
| import java.util.ArrayList; |
| import java.util.Collection; |
| import java.util.Collections; |
| import java.util.HashMap; |
| import java.util.HashSet; |
| import java.util.LinkedHashMap; |
| import java.util.List; |
| import java.util.Map; |
| import java.util.Set; |
| |
| import org.apache.ambari.server.controller.spi.ResourceProvider; |
| import org.apache.ambari.server.state.quicklinksprofile.QuickLinksProfileBuilderTest; |
| import org.apache.ambari.server.topology.Blueprint; |
| import org.apache.ambari.server.topology.BlueprintFactory; |
| import org.apache.ambari.server.topology.Configuration; |
| import org.apache.ambari.server.topology.HostGroupInfo; |
| import org.apache.ambari.server.topology.InvalidTopologyTemplateException; |
| import org.apache.ambari.server.topology.TopologyRequest; |
| import org.junit.After; |
| import org.junit.Before; |
| import org.junit.Test; |
| |
| import com.google.common.collect.Sets; |
| |
| /** |
| * Unit tests for ProvisionClusterRequest. |
| */ |
| @SuppressWarnings("unchecked") |
| public class ProvisionClusterRequestTest { |
| |
| private static final String CLUSTER_NAME = "cluster_name"; |
| private static final String BLUEPRINT_NAME = "blueprint_name"; |
| |
| private static final BlueprintFactory blueprintFactory = createStrictMock(BlueprintFactory.class); |
| private static final Blueprint blueprint = createNiceMock(Blueprint.class); |
| private static final ResourceProvider hostResourceProvider = createMock(ResourceProvider.class); |
| private static final Configuration blueprintConfig = new Configuration( |
| Collections.<String, Map<String, String>>emptyMap(), |
| Collections.<String, Map<String, Map<String, String>>>emptyMap()); |
| |
| @Before |
| public void setUp() throws Exception { |
| reset(blueprintFactory, blueprint, hostResourceProvider); |
| ProvisionClusterRequest.init(blueprintFactory); |
| // set host resource provider field |
| Class clazz = BaseClusterRequest.class; |
| Field f = clazz.getDeclaredField("hostResourceProvider"); |
| f.setAccessible(true); |
| f.set(null, hostResourceProvider); |
| |
| expect(blueprintFactory.getBlueprint(BLUEPRINT_NAME)).andReturn(blueprint).once(); |
| expect(blueprint.getConfiguration()).andReturn(blueprintConfig).anyTimes(); |
| expect(hostResourceProvider.checkPropertyIds(Collections.singleton("Hosts/host_name"))). |
| andReturn(Collections.<String>emptySet()).once(); |
| |
| replay(blueprintFactory, blueprint, hostResourceProvider); |
| } |
| |
| @After |
| public void tearDown() { |
| verify(blueprintFactory, blueprint, hostResourceProvider); |
| } |
| |
| @Test |
| public void testHostNameSpecified() throws Exception { |
| // reset host resource provider expectations to none since we are not specifying a host predicate |
| reset(hostResourceProvider); |
| replay(hostResourceProvider); |
| Map<String, Object> properties = createBlueprintRequestPropertiesNameOnly(CLUSTER_NAME, BLUEPRINT_NAME); |
| |
| ProvisionClusterRequest provisionClusterRequest = new ProvisionClusterRequest(properties, null); |
| |
| assertEquals(CLUSTER_NAME, provisionClusterRequest.getClusterName()); |
| assertEquals(TopologyRequest.Type.PROVISION, provisionClusterRequest.getType()); |
| assertEquals(String.format("Provision Cluster '%s'", CLUSTER_NAME) , provisionClusterRequest.getDescription()); |
| assertSame(blueprint, provisionClusterRequest.getBlueprint()); |
| Map<String, HostGroupInfo> hostGroupInfo = provisionClusterRequest.getHostGroupInfo(); |
| assertEquals(1, hostGroupInfo.size()); |
| |
| // group1 |
| // host info |
| HostGroupInfo group1Info = hostGroupInfo.get("group1"); |
| assertEquals("group1", group1Info.getHostGroupName()); |
| assertEquals(1, group1Info.getHostNames().size()); |
| assertTrue(group1Info.getHostNames().contains("host1.mydomain.com")); |
| assertEquals(1, group1Info.getRequestedHostCount()); |
| assertNull(group1Info.getPredicate()); |
| // configuration |
| Configuration group1Configuration = group1Info.getConfiguration(); |
| assertNull(group1Configuration.getParentConfiguration()); |
| assertEquals(1, group1Configuration.getProperties().size()); |
| Map<String, String> group1TypeProperties = group1Configuration.getProperties().get("foo-type"); |
| assertEquals(2, group1TypeProperties.size()); |
| assertEquals("prop1Value", group1TypeProperties.get("hostGroup1Prop1")); |
| assertEquals("prop2Value", group1TypeProperties.get("hostGroup1Prop2")); |
| assertTrue(group1Configuration.getAttributes().isEmpty()); |
| |
| // cluster scoped configuration |
| Configuration clusterScopeConfiguration = provisionClusterRequest.getConfiguration(); |
| assertSame(blueprintConfig, clusterScopeConfiguration.getParentConfiguration()); |
| assertEquals(1, clusterScopeConfiguration.getProperties().size()); |
| Map<String, String> clusterScopedProperties = clusterScopeConfiguration.getProperties().get("someType"); |
| assertEquals(1, clusterScopedProperties.size()); |
| assertEquals("someValue", clusterScopedProperties.get("property1")); |
| // attributes |
| Map<String, Map<String, Map<String, String>>> clusterScopedAttributes = clusterScopeConfiguration.getAttributes(); |
| assertEquals(1, clusterScopedAttributes.size()); |
| Map<String, Map<String, String>> clusterScopedTypeAttributes = clusterScopedAttributes.get("someType"); |
| assertEquals(1, clusterScopedTypeAttributes.size()); |
| Map<String, String> clusterScopedTypePropertyAttributes = clusterScopedTypeAttributes.get("attribute1"); |
| assertEquals(1, clusterScopedTypePropertyAttributes.size()); |
| assertEquals("someAttributePropValue", clusterScopedTypePropertyAttributes.get("property1")); |
| } |
| |
| @Test |
| public void testHostCountSpecified() throws Exception { |
| // reset host resource provider expectations to none since we are not specifying a host predicate |
| reset(hostResourceProvider); |
| replay(hostResourceProvider); |
| Map<String, Object> properties = createBlueprintRequestPropertiesCountOnly(CLUSTER_NAME, BLUEPRINT_NAME); |
| |
| ProvisionClusterRequest provisionClusterRequest = new ProvisionClusterRequest(properties, null); |
| |
| assertEquals(CLUSTER_NAME, provisionClusterRequest.getClusterName()); |
| assertEquals(TopologyRequest.Type.PROVISION, provisionClusterRequest.getType()); |
| assertEquals(String.format("Provision Cluster '%s'", CLUSTER_NAME) , provisionClusterRequest.getDescription()); |
| assertSame(blueprint, provisionClusterRequest.getBlueprint()); |
| Map<String, HostGroupInfo> hostGroupInfo = provisionClusterRequest.getHostGroupInfo(); |
| assertEquals(1, hostGroupInfo.size()); |
| |
| // group2 |
| HostGroupInfo group2Info = hostGroupInfo.get("group2"); |
| assertEquals("group2", group2Info.getHostGroupName()); |
| assertTrue(group2Info.getHostNames().isEmpty()); |
| assertEquals(5, group2Info.getRequestedHostCount()); |
| assertNull(group2Info.getPredicate()); |
| // configuration |
| Configuration group2Configuration = group2Info.getConfiguration(); |
| assertNull(group2Configuration.getParentConfiguration()); |
| assertEquals(1, group2Configuration.getProperties().size()); |
| Map<String, String> group2TypeProperties = group2Configuration.getProperties().get("foo-type"); |
| assertEquals(1, group2TypeProperties.size()); |
| assertEquals("prop1Value", group2TypeProperties.get("hostGroup2Prop1")); |
| //attributes |
| Map<String, Map<String, Map<String, String>>> group2Attributes = group2Configuration.getAttributes(); |
| assertEquals(1, group2Attributes.size()); |
| Map<String, Map<String, String>> group2Type1Attributes = group2Attributes.get("foo-type"); |
| assertEquals(1, group2Type1Attributes.size()); |
| Map<String, String> group2Type1Prop1Attributes = group2Type1Attributes.get("attribute1"); |
| assertEquals(1, group2Type1Prop1Attributes.size()); |
| assertEquals("attribute1Prop10-value", group2Type1Prop1Attributes.get("hostGroup2Prop10")); |
| |
| // cluster scoped configuration |
| Configuration clusterScopeConfiguration = provisionClusterRequest.getConfiguration(); |
| assertSame(blueprintConfig, clusterScopeConfiguration.getParentConfiguration()); |
| assertEquals(1, clusterScopeConfiguration.getProperties().size()); |
| Map<String, String> clusterScopedProperties = clusterScopeConfiguration.getProperties().get("someType"); |
| assertEquals(1, clusterScopedProperties.size()); |
| assertEquals("someValue", clusterScopedProperties.get("property1")); |
| // attributes |
| Map<String, Map<String, Map<String, String>>> clusterScopedAttributes = clusterScopeConfiguration.getAttributes(); |
| assertEquals(1, clusterScopedAttributes.size()); |
| Map<String, Map<String, String>> clusterScopedTypeAttributes = clusterScopedAttributes.get("someType"); |
| assertEquals(1, clusterScopedTypeAttributes.size()); |
| Map<String, String> clusterScopedTypePropertyAttributes = clusterScopedTypeAttributes.get("attribute1"); |
| assertEquals(1, clusterScopedTypePropertyAttributes.size()); |
| assertEquals("someAttributePropValue", clusterScopedTypePropertyAttributes.get("property1")); |
| } |
| |
| @Test |
| public void testMultipleGroups() throws Exception { |
| Map<String, Object> properties = createBlueprintRequestProperties(CLUSTER_NAME, BLUEPRINT_NAME); |
| ProvisionClusterRequest provisionClusterRequest = new ProvisionClusterRequest(properties, null); |
| |
| assertEquals(CLUSTER_NAME, provisionClusterRequest.getClusterName()); |
| assertEquals(TopologyRequest.Type.PROVISION, provisionClusterRequest.getType()); |
| assertEquals(String.format("Provision Cluster '%s'", CLUSTER_NAME) , provisionClusterRequest.getDescription()); |
| assertSame(blueprint, provisionClusterRequest.getBlueprint()); |
| Map<String, HostGroupInfo> hostGroupInfo = provisionClusterRequest.getHostGroupInfo(); |
| assertEquals(2, hostGroupInfo.size()); |
| |
| // group1 |
| // host info |
| HostGroupInfo group1Info = hostGroupInfo.get("group1"); |
| assertEquals("group1", group1Info.getHostGroupName()); |
| assertEquals(1, group1Info.getHostNames().size()); |
| assertTrue(group1Info.getHostNames().contains("host1.mydomain.com")); |
| assertEquals(1, group1Info.getRequestedHostCount()); |
| assertNull(group1Info.getPredicate()); |
| // configuration |
| Configuration group1Configuration = group1Info.getConfiguration(); |
| assertNull(group1Configuration.getParentConfiguration()); |
| assertEquals(1, group1Configuration.getProperties().size()); |
| Map<String, String> group1TypeProperties = group1Configuration.getProperties().get("foo-type"); |
| assertEquals(2, group1TypeProperties.size()); |
| assertEquals("prop1Value", group1TypeProperties.get("hostGroup1Prop1")); |
| assertEquals("prop2Value", group1TypeProperties.get("hostGroup1Prop2")); |
| assertTrue(group1Configuration.getAttributes().isEmpty()); |
| |
| // group2 |
| HostGroupInfo group2Info = hostGroupInfo.get("group2"); |
| assertEquals("group2", group2Info.getHostGroupName()); |
| assertTrue(group2Info.getHostNames().isEmpty()); |
| assertEquals(5, group2Info.getRequestedHostCount()); |
| assertNotNull(group2Info.getPredicate()); |
| // configuration |
| Configuration group2Configuration = group2Info.getConfiguration(); |
| assertNull(group2Configuration.getParentConfiguration()); |
| assertEquals(1, group2Configuration.getProperties().size()); |
| Map<String, String> group2TypeProperties = group2Configuration.getProperties().get("foo-type"); |
| assertEquals(1, group2TypeProperties.size()); |
| assertEquals("prop1Value", group2TypeProperties.get("hostGroup2Prop1")); |
| //attributes |
| Map<String, Map<String, Map<String, String>>> group2Attributes = group2Configuration.getAttributes(); |
| assertEquals(1, group2Attributes.size()); |
| Map<String, Map<String, String>> group2Type1Attributes = group2Attributes.get("foo-type"); |
| assertEquals(1, group2Type1Attributes.size()); |
| Map<String, String> group2Type1Prop1Attributes = group2Type1Attributes.get("attribute1"); |
| assertEquals(1, group2Type1Prop1Attributes.size()); |
| assertEquals("attribute1Prop10-value", group2Type1Prop1Attributes.get("hostGroup2Prop10")); |
| |
| // cluster scoped configuration |
| Configuration clusterScopeConfiguration = provisionClusterRequest.getConfiguration(); |
| assertSame(blueprintConfig, clusterScopeConfiguration.getParentConfiguration()); |
| assertEquals(1, clusterScopeConfiguration.getProperties().size()); |
| Map<String, String> clusterScopedProperties = clusterScopeConfiguration.getProperties().get("someType"); |
| assertEquals(1, clusterScopedProperties.size()); |
| assertEquals("someValue", clusterScopedProperties.get("property1")); |
| // attributes |
| Map<String, Map<String, Map<String, String>>> clusterScopedAttributes = clusterScopeConfiguration.getAttributes(); |
| assertEquals(1, clusterScopedAttributes.size()); |
| Map<String, Map<String, String>> clusterScopedTypeAttributes = clusterScopedAttributes.get("someType"); |
| assertEquals(1, clusterScopedTypeAttributes.size()); |
| Map<String, String> clusterScopedTypePropertyAttributes = clusterScopedTypeAttributes.get("attribute1"); |
| assertEquals(1, clusterScopedTypePropertyAttributes.size()); |
| assertEquals("someAttributePropValue", clusterScopedTypePropertyAttributes.get("property1")); |
| } |
| |
| @Test(expected= InvalidTopologyTemplateException.class) |
| public void test_NoHostGroupInfo() throws Exception { |
| Map<String, Object> properties = createBlueprintRequestProperties(CLUSTER_NAME, BLUEPRINT_NAME); |
| ((Collection)properties.get("host_groups")).clear(); |
| |
| // reset default host resource provider expectations to none |
| reset(hostResourceProvider); |
| replay(hostResourceProvider); |
| // should result in an exception |
| new ProvisionClusterRequest(properties, null); |
| } |
| |
| @Test |
| public void test_Creditentials() throws Exception { |
| Map<String, Object> properties = createBlueprintRequestProperties(CLUSTER_NAME, BLUEPRINT_NAME); |
| HashMap<String, String> credentialHashMap = new HashMap<>(); |
| credentialHashMap.put("alias", "testAlias"); |
| credentialHashMap.put("principal", "testPrincipal"); |
| credentialHashMap.put("key", "testKey"); |
| credentialHashMap.put("type", "temporary"); |
| Set<Map<String, String>> credentialsSet = new HashSet<>(); |
| credentialsSet.add(credentialHashMap); |
| properties.put("credentials", credentialsSet); |
| |
| ProvisionClusterRequest provisionClusterRequest = new ProvisionClusterRequest(properties, null); |
| |
| assertEquals(provisionClusterRequest.getCredentialsMap().get("testAlias").getAlias(), "testAlias"); |
| assertEquals(provisionClusterRequest.getCredentialsMap().get("testAlias").getPrincipal(), "testPrincipal"); |
| assertEquals(provisionClusterRequest.getCredentialsMap().get("testAlias").getKey(), "testKey"); |
| assertEquals(provisionClusterRequest.getCredentialsMap().get("testAlias").getType().name(), "TEMPORARY"); |
| } |
| |
| |
| @Test(expected=InvalidTopologyTemplateException.class) |
| public void test_CreditentialsInvalidType() throws Exception { |
| Map<String, Object> properties = createBlueprintRequestProperties(CLUSTER_NAME, BLUEPRINT_NAME); |
| HashMap<String, String> credentialHashMap = new HashMap<>(); |
| credentialHashMap.put("alias", "testAlias"); |
| credentialHashMap.put("principal", "testPrincipal"); |
| credentialHashMap.put("key", "testKey"); |
| credentialHashMap.put("type", "testType"); |
| Set<Map<String, String>> credentialsSet = new HashSet<>(); |
| credentialsSet.add(credentialHashMap); |
| properties.put("credentials", credentialsSet); |
| |
| ProvisionClusterRequest provisionClusterRequest = new ProvisionClusterRequest(properties, null); |
| } |
| |
| @Test(expected= InvalidTopologyTemplateException.class) |
| public void test_GroupInfoMissingName() throws Exception { |
| Map<String, Object> properties = createBlueprintRequestProperties(CLUSTER_NAME, BLUEPRINT_NAME); |
| ((Collection<Map<String, Object>>)properties.get("host_groups")).iterator().next().remove("name"); |
| |
| // reset default host resource provider expectations to none |
| reset(hostResourceProvider); |
| replay(hostResourceProvider); |
| // should result in an exception |
| new ProvisionClusterRequest(properties, null); |
| } |
| |
| @Test(expected= InvalidTopologyTemplateException.class) |
| public void test_NoHostsInfo() throws Exception { |
| Map<String, Object> properties = createBlueprintRequestProperties(CLUSTER_NAME, BLUEPRINT_NAME); |
| ((Collection<Map<String, Object>>)properties.get("host_groups")).iterator().next().remove("hosts"); |
| |
| // reset default host resource provider expectations to none |
| reset(hostResourceProvider); |
| replay(hostResourceProvider); |
| // should result in an exception |
| new ProvisionClusterRequest(properties, null); |
| } |
| |
| @Test(expected = InvalidTopologyTemplateException.class) |
| public void test_NoHostNameOrHostCount() throws Exception { |
| Map<String, Object> properties = createBlueprintRequestProperties(CLUSTER_NAME, BLUEPRINT_NAME); |
| // remove fqdn property for a group that contains fqdn not host_count |
| for (Map<String, Object> groupProps : (Collection<Map<String, Object>>) properties.get("host_groups")) { |
| Collection<Map<String, Object>> hostInfo = (Collection<Map<String, Object>>) groupProps.get("hosts"); |
| Map<String, Object> next = hostInfo.iterator().next(); |
| if (next.containsKey("fqdn")) { |
| next.remove("fqdn"); |
| break; |
| } |
| } |
| |
| // reset default host resource provider expectations to none |
| reset(hostResourceProvider); |
| replay(hostResourceProvider); |
| // should result in an exception |
| new ProvisionClusterRequest(properties, null); |
| } |
| |
| |
| @Test(expected = InvalidTopologyTemplateException.class) |
| public void testInvalidPredicateProperty() throws Exception { |
| reset(hostResourceProvider); |
| // checkPropertyIds() returns invalid property names |
| expect(hostResourceProvider.checkPropertyIds(Collections.singleton("Hosts/host_name"))). |
| andReturn(Collections.singleton("Hosts/host_name")); |
| replay(hostResourceProvider); |
| |
| // should result in an exception due to invalid property in host predicate |
| new ProvisionClusterRequest(createBlueprintRequestProperties(CLUSTER_NAME, BLUEPRINT_NAME), null); |
| } |
| |
| @Test(expected = InvalidTopologyTemplateException.class) |
| public void testHostNameAndCountSpecified() throws Exception { |
| // reset host resource provider expectations to none since we are not specifying a host predicate |
| reset(hostResourceProvider); |
| replay(hostResourceProvider); |
| |
| Map<String, Object> properties = createBlueprintRequestPropertiesNameOnly(CLUSTER_NAME, BLUEPRINT_NAME); |
| ((Map) ((List) properties.get("host_groups")).iterator().next()).put("host_count", "5"); |
| // should result in an exception due to both host name and host count being specified |
| new ProvisionClusterRequest(properties, null); |
| } |
| |
| @Test(expected = InvalidTopologyTemplateException.class) |
| public void testHostNameAndPredicateSpecified() throws Exception { |
| // reset host resource provider expectations to none since we are not specifying a host predicate |
| reset(hostResourceProvider); |
| replay(hostResourceProvider); |
| |
| Map<String, Object> properties = createBlueprintRequestPropertiesNameOnly(CLUSTER_NAME, BLUEPRINT_NAME); |
| ((Map) ((List) properties.get("host_groups")).iterator().next()).put("host_predicate", "Hosts/host_name=myTestHost"); |
| // should result in an exception due to both host name and host count being specified |
| new ProvisionClusterRequest(properties, null); |
| } |
| |
| @Test |
| public void testQuickLinksProfile_NoDataInRequest() throws Exception { |
| Map<String, Object> properties = createBlueprintRequestProperties(CLUSTER_NAME, BLUEPRINT_NAME); |
| ProvisionClusterRequest request = new ProvisionClusterRequest(properties, null); |
| assertNull("No quick links profile is expected", request.getQuickLinksProfileJson()); |
| } |
| |
| @Test |
| public void testQuickLinksProfile_OnlyGlobalFilterDataInRequest() throws Exception { |
| Map<String, Object> properties = createBlueprintRequestProperties(CLUSTER_NAME, BLUEPRINT_NAME); |
| |
| properties.put(ProvisionClusterRequest.QUICKLINKS_PROFILE_FILTERS_PROPERTY, |
| Sets.newHashSet(QuickLinksProfileBuilderTest.filter(null, null, true))); |
| |
| ProvisionClusterRequest request = new ProvisionClusterRequest(properties, null); |
| assertEquals("Quick links profile doesn't match expected", |
| "{\"filters\":[{\"visible\":true}],\"services\":[]}", |
| request.getQuickLinksProfileJson()); |
| } |
| |
| @Test |
| public void testQuickLinksProfile_OnlyServiceFilterDataInRequest() throws Exception { |
| Map<String, Object> properties = createBlueprintRequestProperties(CLUSTER_NAME, BLUEPRINT_NAME); |
| |
| Map<String, String> filter = QuickLinksProfileBuilderTest.filter(null, null, true); |
| Map<String, Object> hdfs = QuickLinksProfileBuilderTest.service("HDFS", null, Sets.newHashSet(filter)); |
| Set<Map<String, Object>> services = Sets.newHashSet(hdfs); |
| properties.put(ProvisionClusterRequest.QUICKLINKS_PROFILE_SERVICES_PROPERTY, services); |
| |
| ProvisionClusterRequest request = new ProvisionClusterRequest(properties, null); |
| assertEquals("Quick links profile doesn't match expected", |
| "{\"filters\":[],\"services\":[{\"name\":\"HDFS\",\"components\":[],\"filters\":[{\"visible\":true}]}]}", |
| request.getQuickLinksProfileJson()); |
| } |
| |
| @Test |
| public void testQuickLinksProfile_BothGlobalAndServiceLevelFilters() throws Exception { |
| Map<String, Object> properties = createBlueprintRequestProperties(CLUSTER_NAME, BLUEPRINT_NAME); |
| |
| properties.put(ProvisionClusterRequest.QUICKLINKS_PROFILE_FILTERS_PROPERTY, |
| Sets.newHashSet(QuickLinksProfileBuilderTest.filter(null, null, true))); |
| |
| Map<String, String> filter = QuickLinksProfileBuilderTest.filter(null, null, true); |
| Map<String, Object> hdfs = QuickLinksProfileBuilderTest.service("HDFS", null, Sets.newHashSet(filter)); |
| Set<Map<String, Object>> services = Sets.newHashSet(hdfs); |
| properties.put(ProvisionClusterRequest.QUICKLINKS_PROFILE_SERVICES_PROPERTY, services); |
| |
| ProvisionClusterRequest request = new ProvisionClusterRequest(properties, null); |
| System.out.println(request.getQuickLinksProfileJson()); |
| assertEquals("Quick links profile doesn't match expected", |
| "{\"filters\":[{\"visible\":true}],\"services\":[{\"name\":\"HDFS\",\"components\":[],\"filters\":[{\"visible\":true}]}]}", |
| request.getQuickLinksProfileJson()); |
| } |
| |
| @Test(expected = InvalidTopologyTemplateException.class) |
| public void testQuickLinksProfile_InvalidRequestData() throws Exception { |
| Map<String, Object> properties = createBlueprintRequestProperties(CLUSTER_NAME, BLUEPRINT_NAME); |
| |
| properties.put(ProvisionClusterRequest.QUICKLINKS_PROFILE_SERVICES_PROPERTY, "Hello World!"); |
| |
| ProvisionClusterRequest request = new ProvisionClusterRequest(properties, null); |
| } |
| |
| public static Map<String, Object> createBlueprintRequestProperties(String clusterName, String blueprintName) { |
| Map<String, Object> properties = new LinkedHashMap<>(); |
| |
| properties.put(ClusterResourceProvider.CLUSTER_NAME_PROPERTY_ID, clusterName); |
| properties.put(ClusterResourceProvider.BLUEPRINT_PROPERTY_ID, blueprintName); |
| |
| Collection<Map<String, Object>> hostGroups = new ArrayList<>(); |
| properties.put("host_groups", hostGroups); |
| |
| // host group 1 |
| Map<String, Object> hostGroup1Properties = new HashMap<>(); |
| hostGroups.add(hostGroup1Properties); |
| hostGroup1Properties.put("name", "group1"); |
| Collection<Map<String, String>> hostGroup1Hosts = new ArrayList<>(); |
| hostGroup1Properties.put("hosts", hostGroup1Hosts); |
| Map<String, String> hostGroup1HostProperties = new HashMap<>(); |
| hostGroup1HostProperties.put("fqdn", "host1.myDomain.com"); |
| hostGroup1Hosts.add(hostGroup1HostProperties); |
| // host group 1 scoped configuration |
| // version 1 configuration syntax |
| Collection<Map<String, String>> hostGroup1Configurations = new ArrayList<>(); |
| hostGroup1Properties.put("configurations", hostGroup1Configurations); |
| Map<String, String> hostGroup1Configuration1 = new HashMap<>(); |
| hostGroup1Configuration1.put("foo-type/hostGroup1Prop1", "prop1Value"); |
| hostGroup1Configuration1.put("foo-type/hostGroup1Prop2", "prop2Value"); |
| hostGroup1Configurations.add(hostGroup1Configuration1); |
| |
| // host group 2 |
| Map<String, Object> hostGroup2Properties = new HashMap<>(); |
| hostGroups.add(hostGroup2Properties); |
| hostGroup2Properties.put("name", "group2"); |
| hostGroup2Properties.put("host_count", "5"); |
| hostGroup2Properties.put("host_predicate", "Hosts/host_name=myTestHost"); |
| |
| // host group 2 scoped configuration |
| // version 2 configuration syntax |
| Collection<Map<String, String>> hostGroup2Configurations = new ArrayList<>(); |
| hostGroup2Properties.put("configurations", hostGroup2Configurations); |
| Map<String, String> hostGroup2Configuration1 = new HashMap<>(); |
| hostGroup2Configuration1.put("foo-type/properties/hostGroup2Prop1", "prop1Value"); |
| hostGroup2Configuration1.put("foo-type/properties_attributes/attribute1/hostGroup2Prop10", "attribute1Prop10-value"); |
| hostGroup2Configurations.add(hostGroup2Configuration1); |
| |
| // cluster scoped configuration |
| Collection<Map<String, String>> clusterConfigurations = new ArrayList<>(); |
| properties.put("configurations", clusterConfigurations); |
| |
| Map<String, String> clusterConfigurationProperties = new HashMap<>(); |
| clusterConfigurations.add(clusterConfigurationProperties); |
| clusterConfigurationProperties.put("someType/properties/property1", "someValue"); |
| clusterConfigurationProperties.put("someType/properties_attributes/attribute1/property1", "someAttributePropValue"); |
| |
| return properties; |
| } |
| |
| public static Map<String, Object> createBlueprintRequestPropertiesNameOnly(String clusterName, String blueprintName) { |
| Map<String, Object> properties = new LinkedHashMap<>(); |
| |
| properties.put(ClusterResourceProvider.CLUSTER_NAME_PROPERTY_ID, clusterName); |
| properties.put(ClusterResourceProvider.BLUEPRINT_PROPERTY_ID, blueprintName); |
| |
| Collection<Map<String, Object>> hostGroups = new ArrayList<>(); |
| properties.put("host_groups", hostGroups); |
| |
| // host group 1 |
| Map<String, Object> hostGroup1Properties = new HashMap<>(); |
| hostGroups.add(hostGroup1Properties); |
| hostGroup1Properties.put("name", "group1"); |
| Collection<Map<String, String>> hostGroup1Hosts = new ArrayList<>(); |
| hostGroup1Properties.put("hosts", hostGroup1Hosts); |
| Map<String, String> hostGroup1HostProperties = new HashMap<>(); |
| hostGroup1HostProperties.put("fqdn", "host1.myDomain.com"); |
| hostGroup1Hosts.add(hostGroup1HostProperties); |
| // host group 1 scoped configuration |
| // version 1 configuration syntax |
| Collection<Map<String, String>> hostGroup1Configurations = new ArrayList<>(); |
| hostGroup1Properties.put("configurations", hostGroup1Configurations); |
| Map<String, String> hostGroup1Configuration1 = new HashMap<>(); |
| hostGroup1Configuration1.put("foo-type/hostGroup1Prop1", "prop1Value"); |
| hostGroup1Configuration1.put("foo-type/hostGroup1Prop2", "prop2Value"); |
| hostGroup1Configurations.add(hostGroup1Configuration1); |
| |
| // cluster scoped configuration |
| Collection<Map<String, String>> clusterConfigurations = new ArrayList<>(); |
| properties.put("configurations", clusterConfigurations); |
| |
| Map<String, String> clusterConfigurationProperties = new HashMap<>(); |
| clusterConfigurations.add(clusterConfigurationProperties); |
| clusterConfigurationProperties.put("someType/properties/property1", "someValue"); |
| clusterConfigurationProperties.put("someType/properties_attributes/attribute1/property1", "someAttributePropValue"); |
| |
| return properties; |
| } |
| |
| public static Map<String, Object> createBlueprintRequestPropertiesCountOnly(String clusterName, String blueprintName) { |
| Map<String, Object> properties = new LinkedHashMap<>(); |
| |
| properties.put(ClusterResourceProvider.CLUSTER_NAME_PROPERTY_ID, clusterName); |
| properties.put(ClusterResourceProvider.BLUEPRINT_PROPERTY_ID, blueprintName); |
| |
| Collection<Map<String, Object>> hostGroups = new ArrayList<>(); |
| properties.put("host_groups", hostGroups); |
| |
| // host group 2 |
| Map<String, Object> hostGroup2Properties = new HashMap<>(); |
| hostGroups.add(hostGroup2Properties); |
| hostGroup2Properties.put("name", "group2"); |
| // count with no predicate |
| hostGroup2Properties.put("host_count", "5"); |
| |
| // host group 2 scoped configuration |
| // version 2 configuration syntax |
| Collection<Map<String, String>> hostGroup2Configurations = new ArrayList<>(); |
| hostGroup2Properties.put("configurations", hostGroup2Configurations); |
| Map<String, String> hostGroup2Configuration1 = new HashMap<>(); |
| hostGroup2Configuration1.put("foo-type/properties/hostGroup2Prop1", "prop1Value"); |
| hostGroup2Configuration1.put("foo-type/properties_attributes/attribute1/hostGroup2Prop10", "attribute1Prop10-value"); |
| hostGroup2Configurations.add(hostGroup2Configuration1); |
| |
| // cluster scoped configuration |
| Collection<Map<String, String>> clusterConfigurations = new ArrayList<>(); |
| properties.put("configurations", clusterConfigurations); |
| |
| Map<String, String> clusterConfigurationProperties = new HashMap<>(); |
| clusterConfigurations.add(clusterConfigurationProperties); |
| clusterConfigurationProperties.put("someType/properties/property1", "someValue"); |
| clusterConfigurationProperties.put("someType/properties_attributes/attribute1/property1", "someAttributePropValue"); |
| |
| return properties; |
| } |
| } |