Repository: ambari
Updated Branches:
  refs/heads/trunk 18136fb6e -> 02ccb17fa


http://git-wip-us.apache.org/repos/asf/ambari/blob/02ccb17f/ambari-server/src/test/java/org/apache/ambari/server/state/ConfigHelperTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/state/ConfigHelperTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/state/ConfigHelperTest.java
index 1c01ec5..84731f0 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/state/ConfigHelperTest.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/state/ConfigHelperTest.java
@@ -17,540 +17,698 @@
  */
 package org.apache.ambari.server.state;
 
-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 com.google.inject.AbstractModule;
 import com.google.inject.Guice;
 import com.google.inject.Injector;
 import com.google.inject.persist.PersistService;
 import com.google.inject.persist.Transactional;
 import junit.framework.Assert;
 import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.actionmanager.RequestFactory;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
+import org.apache.ambari.server.controller.AmbariCustomCommandExecutionHelper;
 import org.apache.ambari.server.controller.AmbariManagementController;
 import org.apache.ambari.server.controller.ClusterRequest;
 import org.apache.ambari.server.controller.ConfigurationRequest;
+import org.apache.ambari.server.controller.spi.ClusterController;
+import org.apache.ambari.server.orm.DBAccessor;
 import org.apache.ambari.server.orm.GuiceJpaInitializer;
 import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
+import org.apache.ambari.server.security.SecurityHelper;
+import org.apache.ambari.server.state.cluster.ClusterFactory;
+import org.apache.ambari.server.state.cluster.ClustersImpl;
 import org.apache.ambari.server.state.configgroup.ConfigGroup;
 import org.apache.ambari.server.state.configgroup.ConfigGroupFactory;
+import org.apache.ambari.server.state.host.HostFactory;
+import org.apache.ambari.server.state.stack.OsFamily;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.experimental.runners.Enclosed;
+import org.junit.runner.RunWith;
 
+import javax.persistence.EntityManager;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Set;
 
+import static org.easymock.EasyMock.*;
 
 
+@RunWith(Enclosed.class)
 public class ConfigHelperTest {
-  private Clusters clusters;
-  private AmbariMetaInfo metaInfo;
-  private Injector injector;
-  private String clusterName;
-  private Cluster cluster;
-  private ConfigGroupFactory configGroupFactory;
-  private ConfigFactory configFactory;
-  private ConfigHelper configHelper;
-  private AmbariManagementController managementController;
-
-  @Before
-  public void setup() throws  Exception {
-    injector = Guice.createInjector(new InMemoryDefaultTestModule());
-    injector.getInstance(GuiceJpaInitializer.class);
-    clusters = injector.getInstance(Clusters.class);
-    metaInfo = injector.getInstance(AmbariMetaInfo.class);
-    configFactory = injector.getInstance(ConfigFactory.class);
-    configGroupFactory = injector.getInstance(ConfigGroupFactory.class);
-    configHelper = injector.getInstance(ConfigHelper.class);
-    managementController = 
injector.getInstance(AmbariManagementController.class);
-
-    metaInfo.init();
-    clusterName = "c1";
-    clusters.addCluster(clusterName);
-    cluster = clusters.getCluster(clusterName);
-    cluster.setDesiredStackVersion(new StackId("HDP-2.0.6"));
-    Assert.assertNotNull(cluster);
-    clusters.addHost("h1");
-    clusters.addHost("h2");
-    Assert.assertNotNull(clusters.getHost("h1"));
-    Assert.assertNotNull(clusters.getHost("h2"));
-    clusters.getHost("h1").persist();
-    clusters.getHost("h2").persist();
-
-    // core-site
-    ConfigurationRequest cr = new ConfigurationRequest();
-    cr.setClusterName(clusterName);
-    cr.setType("core-site");
-    cr.setVersionTag("version1");
-    cr.setProperties(new HashMap<String, String>() {{
-      put("ipc.client.connect.max.retries", "30");
-      put("fs.trash.interval", "30");
-    }});
-    cr.setPropertiesAttributes(new HashMap<String, Map<String, String>>() {{
-      Map<String, String> attrs = new HashMap<String, String>();
-      attrs.put("ipc.client.connect.max.retries", "1");
-      attrs.put("fs.trash.interval", "2");
-      put("attribute1", attrs);
-    }});
-
-    final ClusterRequest clusterRequest1 =
-      new ClusterRequest(cluster.getClusterId(), clusterName,
-        cluster.getDesiredStackVersion().getStackVersion(), null);
-
-    clusterRequest1.setDesiredConfig(Collections.singletonList(cr));
-    managementController.updateClusters(new HashSet<ClusterRequest>()
-    {{ add(clusterRequest1); }}, null);
-
-    // flume-conf
-
-    ConfigurationRequest cr2 = new ConfigurationRequest();
-    cr2.setClusterName(clusterName);
-    cr2.setType("flume-conf");
-    cr2.setVersionTag("version1");
-
-
-    final ClusterRequest clusterRequest2 =
-      new ClusterRequest(cluster.getClusterId(), clusterName,
-        cluster.getDesiredStackVersion().getStackVersion(), null);
-
-    clusterRequest2.setDesiredConfig(Collections.singletonList(cr2));
-    managementController.updateClusters(new HashSet<ClusterRequest>()
-    {{ add(clusterRequest2); }}, null);
-
-    // global
-    cr.setType("global");
-    cr.setVersionTag("version1");
-    cr.setProperties(new HashMap<String, String>() {{
-      put("dfs_namenode_name_dir", "/hadoop/hdfs/namenode");
-      put("namenode_heapsize", "1024");
-    }});
-    cr.setPropertiesAttributes(new HashMap<String, Map<String, String>>() {{
-      Map<String, String> attrs = new HashMap<String, String>();
-      attrs.put("dfs_namenode_name_dir", "3");
-      attrs.put("namenode_heapsize", "4");
-      put("attribute2", attrs);
-    }});
-
-    final ClusterRequest clusterRequest3 =
-      new ClusterRequest(cluster.getClusterId(), clusterName,
-        cluster.getDesiredStackVersion().getStackVersion(), null);
-
-    clusterRequest3.setDesiredConfig(Collections.singletonList(cr));
-    managementController.updateClusters(new HashSet<ClusterRequest>()
-    {{ add(clusterRequest3); }}, null);
-  }
+  public static class RunWithInMemoryDefaultTestModule {
+    private Clusters clusters;
+    private AmbariMetaInfo metaInfo;
+    private Injector injector;
+    private String clusterName;
+    private Cluster cluster;
+    private ConfigGroupFactory configGroupFactory;
+    private ConfigFactory configFactory;
+    private ConfigHelper configHelper;
+    private AmbariManagementController managementController;
+
+    @Before
+    public void setup() throws Exception {
+      injector = Guice.createInjector(new InMemoryDefaultTestModule());
+      injector.getInstance(GuiceJpaInitializer.class);
+      clusters = injector.getInstance(Clusters.class);
+      metaInfo = injector.getInstance(AmbariMetaInfo.class);
+      configFactory = injector.getInstance(ConfigFactory.class);
+      configGroupFactory = injector.getInstance(ConfigGroupFactory.class);
+      configHelper = injector.getInstance(ConfigHelper.class);
+      managementController = 
injector.getInstance(AmbariManagementController.class);
+
+      metaInfo.init();
+      clusterName = "c1";
+      clusters.addCluster(clusterName);
+      cluster = clusters.getCluster(clusterName);
+      cluster.setDesiredStackVersion(new StackId("HDP-2.0.6"));
+      Assert.assertNotNull(cluster);
+      clusters.addHost("h1");
+      clusters.addHost("h2");
+      Assert.assertNotNull(clusters.getHost("h1"));
+      Assert.assertNotNull(clusters.getHost("h2"));
+      clusters.getHost("h1").persist();
+      clusters.getHost("h2").persist();
+
+      // core-site
+      ConfigurationRequest cr = new ConfigurationRequest();
+      cr.setClusterName(clusterName);
+      cr.setType("core-site");
+      cr.setVersionTag("version1");
+      cr.setProperties(new HashMap<String, String>() {{
+        put("ipc.client.connect.max.retries", "30");
+        put("fs.trash.interval", "30");
+      }});
+      cr.setPropertiesAttributes(new HashMap<String, Map<String, String>>() {{
+        Map<String, String> attrs = new HashMap<String, String>();
+        attrs.put("ipc.client.connect.max.retries", "1");
+        attrs.put("fs.trash.interval", "2");
+        put("attribute1", attrs);
+      }});
 
-  @After
-  public void tearDown() {
-    injector.getInstance(PersistService.class).stop();
-  }
+      final ClusterRequest clusterRequest1 =
+          new ClusterRequest(cluster.getClusterId(), clusterName,
+              cluster.getDesiredStackVersion().getStackVersion(), null);
+
+      clusterRequest1.setDesiredConfig(Collections.singletonList(cr));
+      managementController.updateClusters(new HashSet<ClusterRequest>() {{
+        add(clusterRequest1);
+      }}, null);
 
-  @Transactional
-  private Long addConfigGroup(String name, String tag, List<String> hosts,
-         List<Config> configs) throws AmbariException {
+      // flume-conf
 
-    Map<String, Host> hostMap = new HashMap<String, Host>();
-    Map<String, Config> configMap = new HashMap<String, Config>();
+      ConfigurationRequest cr2 = new ConfigurationRequest();
+      cr2.setClusterName(clusterName);
+      cr2.setType("flume-conf");
+      cr2.setVersionTag("version1");
 
-    for (String hostname : hosts) {
-      Host host = clusters.getHost(hostname);
-      hostMap.put(host.getHostName(), host);
+
+      final ClusterRequest clusterRequest2 =
+          new ClusterRequest(cluster.getClusterId(), clusterName,
+              cluster.getDesiredStackVersion().getStackVersion(), null);
+
+      clusterRequest2.setDesiredConfig(Collections.singletonList(cr2));
+      managementController.updateClusters(new HashSet<ClusterRequest>() {{
+        add(clusterRequest2);
+      }}, null);
+
+      // global
+      cr.setType("global");
+      cr.setVersionTag("version1");
+      cr.setProperties(new HashMap<String, String>() {{
+        put("dfs_namenode_name_dir", "/hadoop/hdfs/namenode");
+        put("namenode_heapsize", "1024");
+      }});
+      cr.setPropertiesAttributes(new HashMap<String, Map<String, String>>() {{
+        Map<String, String> attrs = new HashMap<String, String>();
+        attrs.put("dfs_namenode_name_dir", "3");
+        attrs.put("namenode_heapsize", "4");
+        put("attribute2", attrs);
+      }});
+
+      final ClusterRequest clusterRequest3 =
+          new ClusterRequest(cluster.getClusterId(), clusterName,
+              cluster.getDesiredStackVersion().getStackVersion(), null);
+
+      clusterRequest3.setDesiredConfig(Collections.singletonList(cr));
+      managementController.updateClusters(new HashSet<ClusterRequest>() {{
+        add(clusterRequest3);
+      }}, null);
     }
 
-    for (Config config : configs) {
-      configMap.put(config.getType(), config);
+    @After
+    public void tearDown() {
+      injector.getInstance(PersistService.class).stop();
     }
 
-    ConfigGroup configGroup = configGroupFactory.createNew(cluster, name,
-      tag, "", configMap, hostMap);
+    @Transactional
+    private Long addConfigGroup(String name, String tag, List<String> hosts,
+                                List<Config> configs) throws AmbariException {
 
-    configGroup.persist();
-    cluster.addConfigGroup(configGroup);
+      Map<String, Host> hostMap = new HashMap<String, Host>();
+      Map<String, Config> configMap = new HashMap<String, Config>();
 
-    return configGroup.getId();
-  }
+      for (String hostname : hosts) {
+        Host host = clusters.getHost(hostname);
+        hostMap.put(host.getHostName(), host);
+      }
 
-  @Test
-  public void testEffectiveTagsForHost() throws Exception {
-    final Config config = new ConfigImpl("core-site");
-    config.setTag("version122");
+      for (Config config : configs) {
+        configMap.put(config.getType(), config);
+      }
 
-    Map<String, String> properties = new HashMap<String, String>();
-    properties.put("a", "b");
-    properties.put("c", "d");
-    config.setProperties(properties);
+      ConfigGroup configGroup = configGroupFactory.createNew(cluster, name,
+          tag, "", configMap, hostMap);
 
-    Long groupId = addConfigGroup("g1", "t1", new ArrayList<String>() {{
-      add("h1");}}, new ArrayList<Config>() {{ add(config); }});
+      configGroup.persist();
+      cluster.addConfigGroup(configGroup);
 
-    Assert.assertNotNull(groupId);
+      return configGroup.getId();
+    }
 
-    Map<String, Map<String, String>> configTags = configHelper
-      .getEffectiveDesiredTags(cluster, "h1");
+    @Test
+    public void testEffectiveTagsForHost() throws Exception {
+      final Config config = new ConfigImpl("core-site");
+      config.setTag("version122");
 
-    Assert.assertNotNull(configTags);
-    Map<String, String> tagsWithOverrides = configTags.get("core-site");
-    Assert.assertNotNull(tagsWithOverrides);
-    
Assert.assertTrue(tagsWithOverrides.containsKey(ConfigHelper.CLUSTER_DEFAULT_TAG));
-    Assert.assertEquals("version1", 
tagsWithOverrides.get(ConfigHelper.CLUSTER_DEFAULT_TAG));
-    Assert.assertTrue(tagsWithOverrides.containsKey(groupId.toString()));
-    Assert.assertEquals("version122", 
tagsWithOverrides.get(groupId.toString()));
-  }
+      Map<String, String> properties = new HashMap<String, String>();
+      properties.put("a", "b");
+      properties.put("c", "d");
+      config.setProperties(properties);
 
-  @Test
-  public void testEffectivePropertiesWithOverrides() throws Exception {
-    final Config config1 = new ConfigImpl("core-site");
-    config1.setTag("version122");
+      Long groupId = addConfigGroup("g1", "t1", new ArrayList<String>() {{
+        add("h1");
+      }}, new ArrayList<Config>() {{
+        add(config);
+      }});
+
+      Assert.assertNotNull(groupId);
 
-    Map<String, String> properties = new HashMap<String, String>();
-    properties.put("a", "b");
-    properties.put("c", "d");
-    config1.setProperties(properties);
+      Map<String, Map<String, String>> configTags = configHelper
+          .getEffectiveDesiredTags(cluster, "h1");
 
-    final Config config2 = new ConfigImpl("global");
-    config2.setTag("version122");
-    Map<String, String> properties2 = new HashMap<String, String>();
-    properties2.put("namenode_heapsize", "1111");
-    config2.setProperties(properties2);
+      Assert.assertNotNull(configTags);
+      Map<String, String> tagsWithOverrides = configTags.get("core-site");
+      Assert.assertNotNull(tagsWithOverrides);
+      
Assert.assertTrue(tagsWithOverrides.containsKey(ConfigHelper.CLUSTER_DEFAULT_TAG));
+      Assert.assertEquals("version1", 
tagsWithOverrides.get(ConfigHelper.CLUSTER_DEFAULT_TAG));
+      Assert.assertTrue(tagsWithOverrides.containsKey(groupId.toString()));
+      Assert.assertEquals("version122", 
tagsWithOverrides.get(groupId.toString()));
+    }
 
-    Long groupId = addConfigGroup("g1", "t1", new ArrayList<String>() {{
-        add("h1");}}, new ArrayList<Config>() {{ add(config1); add(config2);
+    @Test
+    public void testEffectivePropertiesWithOverrides() throws Exception {
+      final Config config1 = new ConfigImpl("core-site");
+      config1.setTag("version122");
+
+      Map<String, String> properties = new HashMap<String, String>();
+      properties.put("a", "b");
+      properties.put("c", "d");
+      config1.setProperties(properties);
+
+      final Config config2 = new ConfigImpl("global");
+      config2.setTag("version122");
+      Map<String, String> properties2 = new HashMap<String, String>();
+      properties2.put("namenode_heapsize", "1111");
+      config2.setProperties(properties2);
+
+      Long groupId = addConfigGroup("g1", "t1", new ArrayList<String>() {{
+        add("h1");
+      }}, new ArrayList<Config>() {{
+        add(config1);
+        add(config2);
       }});
 
-    Assert.assertNotNull(groupId);
-
-    Map<String, Map<String, String>> propertyMap = configHelper
-      .getEffectiveConfigProperties(cluster,
-        configHelper.getEffectiveDesiredTags(cluster, "h1"));
-
-    Assert.assertNotNull(propertyMap);
-    Assert.assertTrue(propertyMap.containsKey("global"));
-    Map<String, String> globalProps = propertyMap.get("global");
-    Assert.assertEquals("1111", globalProps.get("namenode_heapsize"));
-    Assert.assertEquals("/hadoop/hdfs/namenode", 
globalProps.get("dfs_namenode_name_dir"));
-    Assert.assertTrue(propertyMap.containsKey("core-site"));
-    Map<String, String> coreProps = propertyMap.get("core-site");
-    Assert.assertTrue(coreProps.containsKey("a"));
-    Assert.assertTrue(coreProps.containsKey("c"));
-    Assert.assertEquals("30", coreProps.get("ipc.client.connect.max.retries"));
-  }
+      Assert.assertNotNull(groupId);
+
+      Map<String, Map<String, String>> propertyMap = configHelper
+          .getEffectiveConfigProperties(cluster,
+              configHelper.getEffectiveDesiredTags(cluster, "h1"));
+
+      Assert.assertNotNull(propertyMap);
+      Assert.assertTrue(propertyMap.containsKey("global"));
+      Map<String, String> globalProps = propertyMap.get("global");
+      Assert.assertEquals("1111", globalProps.get("namenode_heapsize"));
+      Assert.assertEquals("/hadoop/hdfs/namenode", 
globalProps.get("dfs_namenode_name_dir"));
+      Assert.assertTrue(propertyMap.containsKey("core-site"));
+      Map<String, String> coreProps = propertyMap.get("core-site");
+      Assert.assertTrue(coreProps.containsKey("a"));
+      Assert.assertTrue(coreProps.containsKey("c"));
+      Assert.assertEquals("30", 
coreProps.get("ipc.client.connect.max.retries"));
+    }
 
-  @Test
-  public void testEffectivePropertiesAttributesWithOverrides() throws 
Exception {
-    final Config config1 = new ConfigImpl("core-site");
-    config1.setTag("version122");
-
-    Map<String, String> attributes = new HashMap<String, String>();
-    attributes.put("fs.trash.interval", "11");
-    attributes.put("b", "y");
-    Map<String, Map<String, String>> config1Attributes = new HashMap<String, 
Map<String, String>>();
-    config1Attributes.put("attribute1", attributes);
-    config1.setPropertiesAttributes(config1Attributes);
-
-    final Config config2 = new ConfigImpl("global");
-    config2.setTag("version122");
-    attributes = new HashMap<String, String>();
-    attributes.put("namenode_heapsize", "z");
-    attributes.put("c", "q");
-    Map<String, Map<String, String>> config2Attributes = new HashMap<String, 
Map<String, String>>();
-    config2Attributes.put("attribute2", attributes);
-    config2.setPropertiesAttributes(config2Attributes);
-
-    Long groupId = addConfigGroup("g1", "t1", new ArrayList<String>() {{
-      add("h1");}}, new ArrayList<Config>() {{ add(config1); add(config2);
-    }});
-
-    Assert.assertNotNull(groupId);
-
-    Map<String, Map<String, Map<String, String>>> effectiveAttributes = 
configHelper
-        .getEffectiveConfigAttributes(cluster,
-          configHelper.getEffectiveDesiredTags(cluster, "h1"));
-
-    Assert.assertNotNull(effectiveAttributes);
-    Assert.assertEquals(3, effectiveAttributes.size());
-
-    Assert.assertTrue(effectiveAttributes.containsKey("global"));
-    Map<String, Map<String, String>> globalAttrs = 
effectiveAttributes.get("global");
-    Assert.assertEquals(1, globalAttrs.size());
-    Assert.assertTrue(globalAttrs.containsKey("attribute2"));
-    Map<String, String> attribute2Occurances = globalAttrs.get("attribute2");
-    Assert.assertEquals(3, attribute2Occurances.size());
-    Assert.assertTrue(attribute2Occurances.containsKey("namenode_heapsize"));
-    Assert.assertEquals("z", attribute2Occurances.get("namenode_heapsize"));
-    
Assert.assertTrue(attribute2Occurances.containsKey("dfs_namenode_name_dir"));
-    Assert.assertEquals("3", 
attribute2Occurances.get("dfs_namenode_name_dir"));
-    Assert.assertTrue(attribute2Occurances.containsKey("c"));
-    Assert.assertEquals("q", attribute2Occurances.get("c"));
-
-    Assert.assertTrue(effectiveAttributes.containsKey("core-site"));
-    Map<String, Map<String, String>> coreAttrs = 
effectiveAttributes.get("core-site");
-    Assert.assertEquals(1, coreAttrs.size());
-    Assert.assertTrue(coreAttrs.containsKey("attribute1"));
-    Map<String, String> attribute1Occurances = coreAttrs.get("attribute1");
-    Assert.assertEquals(3, attribute1Occurances.size());
-    
Assert.assertTrue(attribute1Occurances.containsKey("ipc.client.connect.max.retries"));
-    Assert.assertEquals("1", 
attribute1Occurances.get("ipc.client.connect.max.retries"));
-    Assert.assertTrue(attribute1Occurances.containsKey("fs.trash.interval"));
-    Assert.assertEquals("11", attribute1Occurances.get("fs.trash.interval"));
-    Assert.assertTrue(attribute1Occurances.containsKey("b"));
-    Assert.assertEquals("y", attribute1Occurances.get("b"));
-  }
+    @Test
+    public void testEffectivePropertiesAttributesWithOverrides() throws 
Exception {
+      final Config config1 = new ConfigImpl("core-site");
+      config1.setTag("version122");
+
+      Map<String, String> attributes = new HashMap<String, String>();
+      attributes.put("fs.trash.interval", "11");
+      attributes.put("b", "y");
+      Map<String, Map<String, String>> config1Attributes = new HashMap<String, 
Map<String, String>>();
+      config1Attributes.put("attribute1", attributes);
+      config1.setPropertiesAttributes(config1Attributes);
+
+      final Config config2 = new ConfigImpl("global");
+      config2.setTag("version122");
+      attributes = new HashMap<String, String>();
+      attributes.put("namenode_heapsize", "z");
+      attributes.put("c", "q");
+      Map<String, Map<String, String>> config2Attributes = new HashMap<String, 
Map<String, String>>();
+      config2Attributes.put("attribute2", attributes);
+      config2.setPropertiesAttributes(config2Attributes);
+
+      Long groupId = addConfigGroup("g1", "t1", new ArrayList<String>() {{
+        add("h1");
+      }}, new ArrayList<Config>() {{
+        add(config1);
+        add(config2);
+      }});
 
-  @Test
-  public void testCloneAttributesMap() throws Exception {
-    // init
-    Map<String, Map<String, String>> targetAttributesMap = new HashMap<String, 
Map<String, String>>();
-    Map<String, String> attributesValues = new HashMap<String, String>();
-    attributesValues.put("a", "1");
-    attributesValues.put("b", "2");
-    attributesValues.put("f", "3");
-    attributesValues.put("q", "4");
-    targetAttributesMap.put("attr", attributesValues);
-    Map<String, Map<String, String>> sourceAttributesMap = new HashMap<String, 
Map<String, String>>();
-    attributesValues = new HashMap<String, String>();
-    attributesValues.put("a", "5");
-    attributesValues.put("f", "6");
-    sourceAttributesMap.put("attr", attributesValues);
-    attributesValues = new HashMap<String, String>();
-    attributesValues.put("f", "7");
-    attributesValues.put("q", "8");
-    sourceAttributesMap.put("attr1", attributesValues);
-
-    // eval
-    configHelper.cloneAttributesMap(sourceAttributesMap, targetAttributesMap);
-
-    // verification
-    Assert.assertEquals(2, targetAttributesMap.size());
-    Assert.assertTrue(targetAttributesMap.containsKey("attr"));
-    Assert.assertTrue(targetAttributesMap.containsKey("attr1"));
-    Map<String, String> attributes = targetAttributesMap.get("attr");
-    Assert.assertEquals(4, attributes.size());
-    Assert.assertEquals("5", attributes.get("a"));
-    Assert.assertEquals("2", attributes.get("b"));
-    Assert.assertEquals("6", attributes.get("f"));
-    Assert.assertEquals("4", attributes.get("q"));
-    attributes = targetAttributesMap.get("attr1");
-    Assert.assertEquals(2, attributes.size());
-    Assert.assertEquals("7", attributes.get("f"));
-    Assert.assertEquals("8", attributes.get("q"));
-  }
+      Assert.assertNotNull(groupId);
+
+      Map<String, Map<String, Map<String, String>>> effectiveAttributes = 
configHelper
+          .getEffectiveConfigAttributes(cluster,
+              configHelper.getEffectiveDesiredTags(cluster, "h1"));
+
+      Assert.assertNotNull(effectiveAttributes);
+      Assert.assertEquals(3, effectiveAttributes.size());
+
+      Assert.assertTrue(effectiveAttributes.containsKey("global"));
+      Map<String, Map<String, String>> globalAttrs = 
effectiveAttributes.get("global");
+      Assert.assertEquals(1, globalAttrs.size());
+      Assert.assertTrue(globalAttrs.containsKey("attribute2"));
+      Map<String, String> attribute2Occurances = globalAttrs.get("attribute2");
+      Assert.assertEquals(3, attribute2Occurances.size());
+      Assert.assertTrue(attribute2Occurances.containsKey("namenode_heapsize"));
+      Assert.assertEquals("z", attribute2Occurances.get("namenode_heapsize"));
+      
Assert.assertTrue(attribute2Occurances.containsKey("dfs_namenode_name_dir"));
+      Assert.assertEquals("3", 
attribute2Occurances.get("dfs_namenode_name_dir"));
+      Assert.assertTrue(attribute2Occurances.containsKey("c"));
+      Assert.assertEquals("q", attribute2Occurances.get("c"));
+
+      Assert.assertTrue(effectiveAttributes.containsKey("core-site"));
+      Map<String, Map<String, String>> coreAttrs = 
effectiveAttributes.get("core-site");
+      Assert.assertEquals(1, coreAttrs.size());
+      Assert.assertTrue(coreAttrs.containsKey("attribute1"));
+      Map<String, String> attribute1Occurances = coreAttrs.get("attribute1");
+      Assert.assertEquals(3, attribute1Occurances.size());
+      
Assert.assertTrue(attribute1Occurances.containsKey("ipc.client.connect.max.retries"));
+      Assert.assertEquals("1", 
attribute1Occurances.get("ipc.client.connect.max.retries"));
+      Assert.assertTrue(attribute1Occurances.containsKey("fs.trash.interval"));
+      Assert.assertEquals("11", attribute1Occurances.get("fs.trash.interval"));
+      Assert.assertTrue(attribute1Occurances.containsKey("b"));
+      Assert.assertEquals("y", attribute1Occurances.get("b"));
+    }
 
-  @Test
-  public void testCloneAttributesMap_sourceIsNull() throws Exception {
-    // init
-    Map<String, Map<String, String>> targetAttributesMap = new HashMap<String, 
Map<String, String>>();
-    Map<String, String> attributesValues = new HashMap<String, String>();
-    attributesValues.put("a", "1");
-    attributesValues.put("b", "2");
-    attributesValues.put("f", "3");
-    attributesValues.put("q", "4");
-    targetAttributesMap.put("attr", attributesValues);
-    Map<String, Map<String, String>> sourceAttributesMap = null;
-
-    // eval
-    configHelper.cloneAttributesMap(sourceAttributesMap, targetAttributesMap);
-
-    // verification
-    // No exception should be thrown
-    // targetMap should not be changed
-    Assert.assertEquals(1, targetAttributesMap.size());
-    Assert.assertTrue(targetAttributesMap.containsKey("attr"));
-    Map<String, String> attributes = targetAttributesMap.get("attr");
-    Assert.assertEquals(4, attributes.size());
-    Assert.assertEquals("1", attributes.get("a"));
-    Assert.assertEquals("2", attributes.get("b"));
-    Assert.assertEquals("3", attributes.get("f"));
-    Assert.assertEquals("4", attributes.get("q"));
-  }
+    @Test
+    public void testCloneAttributesMap() throws Exception {
+      // init
+      Map<String, Map<String, String>> targetAttributesMap = new 
HashMap<String, Map<String, String>>();
+      Map<String, String> attributesValues = new HashMap<String, String>();
+      attributesValues.put("a", "1");
+      attributesValues.put("b", "2");
+      attributesValues.put("f", "3");
+      attributesValues.put("q", "4");
+      targetAttributesMap.put("attr", attributesValues);
+      Map<String, Map<String, String>> sourceAttributesMap = new 
HashMap<String, Map<String, String>>();
+      attributesValues = new HashMap<String, String>();
+      attributesValues.put("a", "5");
+      attributesValues.put("f", "6");
+      sourceAttributesMap.put("attr", attributesValues);
+      attributesValues = new HashMap<String, String>();
+      attributesValues.put("f", "7");
+      attributesValues.put("q", "8");
+      sourceAttributesMap.put("attr1", attributesValues);
+
+      // eval
+      configHelper.cloneAttributesMap(sourceAttributesMap, 
targetAttributesMap);
+
+      // verification
+      Assert.assertEquals(2, targetAttributesMap.size());
+      Assert.assertTrue(targetAttributesMap.containsKey("attr"));
+      Assert.assertTrue(targetAttributesMap.containsKey("attr1"));
+      Map<String, String> attributes = targetAttributesMap.get("attr");
+      Assert.assertEquals(4, attributes.size());
+      Assert.assertEquals("5", attributes.get("a"));
+      Assert.assertEquals("2", attributes.get("b"));
+      Assert.assertEquals("6", attributes.get("f"));
+      Assert.assertEquals("4", attributes.get("q"));
+      attributes = targetAttributesMap.get("attr1");
+      Assert.assertEquals(2, attributes.size());
+      Assert.assertEquals("7", attributes.get("f"));
+      Assert.assertEquals("8", attributes.get("q"));
+    }
 
-  @Test
-  public void testCloneAttributesMap_targetIsNull() throws Exception {
-    // init
-    Map<String, Map<String, String>> targetAttributesMap = null;
-    Map<String, Map<String, String>> sourceAttributesMap = new HashMap<String, 
Map<String, String>>();
-    Map<String, String> attributesValues = new HashMap<String, String>();
-    attributesValues.put("a", "5");
-    attributesValues.put("f", "6");
-    sourceAttributesMap.put("attr", attributesValues);
-    attributesValues = new HashMap<String, String>();
-    attributesValues.put("f", "7");
-    attributesValues.put("q", "8");
-    sourceAttributesMap.put("attr1", attributesValues);
-
-    // eval
-    configHelper.cloneAttributesMap(sourceAttributesMap, targetAttributesMap);
-
-    // verification
-    // No exception should be thrown
-    // sourceMap should not be changed
-    Assert.assertEquals(2, sourceAttributesMap.size());
-    Assert.assertTrue(sourceAttributesMap.containsKey("attr"));
-    Assert.assertTrue(sourceAttributesMap.containsKey("attr1"));
-    Map<String, String> attributes = sourceAttributesMap.get("attr");
-    Assert.assertEquals(2, attributes.size());
-    Assert.assertEquals("5", attributes.get("a"));
-    Assert.assertEquals("6", attributes.get("f"));
-    attributes = sourceAttributesMap.get("attr1");
-    Assert.assertEquals(2, attributes.size());
-    Assert.assertEquals("7", attributes.get("f"));
-    Assert.assertEquals("8", attributes.get("q"));
-  }
+    @Test
+    public void testCloneAttributesMap_sourceIsNull() throws Exception {
+      // init
+      Map<String, Map<String, String>> targetAttributesMap = new 
HashMap<String, Map<String, String>>();
+      Map<String, String> attributesValues = new HashMap<String, String>();
+      attributesValues.put("a", "1");
+      attributesValues.put("b", "2");
+      attributesValues.put("f", "3");
+      attributesValues.put("q", "4");
+      targetAttributesMap.put("attr", attributesValues);
+      Map<String, Map<String, String>> sourceAttributesMap = null;
+
+      // eval
+      configHelper.cloneAttributesMap(sourceAttributesMap, 
targetAttributesMap);
+
+      // verification
+      // No exception should be thrown
+      // targetMap should not be changed
+      Assert.assertEquals(1, targetAttributesMap.size());
+      Assert.assertTrue(targetAttributesMap.containsKey("attr"));
+      Map<String, String> attributes = targetAttributesMap.get("attr");
+      Assert.assertEquals(4, attributes.size());
+      Assert.assertEquals("1", attributes.get("a"));
+      Assert.assertEquals("2", attributes.get("b"));
+      Assert.assertEquals("3", attributes.get("f"));
+      Assert.assertEquals("4", attributes.get("q"));
+    }
 
-  @Test
-  public void testMergeAttributes() throws Exception {
-    Map<String, Map<String, String>> persistedAttributes = new HashMap<String, 
Map<String, String>>();
-    Map<String, String> persistedFinalAttrs = new HashMap<String, String>();
-    persistedFinalAttrs.put("a", "true");
-    persistedFinalAttrs.put("c", "true");
-    persistedFinalAttrs.put("d", "true");
-    persistedAttributes.put("final", persistedFinalAttrs);
-    Map<String, Map<String, String>> confGroupAttributes = new HashMap<String, 
Map<String, String>>();
-    Map<String, String> confGroupFinalAttrs = new HashMap<String, String>();
-    confGroupFinalAttrs.put("b", "true");
-    confGroupAttributes.put("final", confGroupFinalAttrs);
-    Map<String, String> confGroupProperties = new HashMap<String, String>();
-    confGroupProperties.put("a", "any");
-    confGroupProperties.put("b", "any");
-    confGroupProperties.put("c", "any");
-
-    Config overrideConfig = new ConfigImpl(cluster, "type", 
confGroupProperties, confGroupAttributes, injector);
-
-    Map<String, Map<String, String>> result
-        = configHelper.overrideAttributes(overrideConfig, persistedAttributes);
-
-    Assert.assertNotNull(result);
-    Assert.assertEquals(1, result.size());
-    Map<String, String> finalResultAttributes = result.get("final");
-    Assert.assertNotNull(finalResultAttributes);
-    Assert.assertEquals(2, finalResultAttributes.size());
-    Assert.assertEquals("true", finalResultAttributes.get("b"));
-    Assert.assertEquals("true", finalResultAttributes.get("d"));
-  }
+    @Test
+    public void testCloneAttributesMap_targetIsNull() throws Exception {
+      // init
+      Map<String, Map<String, String>> targetAttributesMap = null;
+      Map<String, Map<String, String>> sourceAttributesMap = new 
HashMap<String, Map<String, String>>();
+      Map<String, String> attributesValues = new HashMap<String, String>();
+      attributesValues.put("a", "5");
+      attributesValues.put("f", "6");
+      sourceAttributesMap.put("attr", attributesValues);
+      attributesValues = new HashMap<String, String>();
+      attributesValues.put("f", "7");
+      attributesValues.put("q", "8");
+      sourceAttributesMap.put("attr1", attributesValues);
+
+      // eval
+      configHelper.cloneAttributesMap(sourceAttributesMap, 
targetAttributesMap);
+
+      // verification
+      // No exception should be thrown
+      // sourceMap should not be changed
+      Assert.assertEquals(2, sourceAttributesMap.size());
+      Assert.assertTrue(sourceAttributesMap.containsKey("attr"));
+      Assert.assertTrue(sourceAttributesMap.containsKey("attr1"));
+      Map<String, String> attributes = sourceAttributesMap.get("attr");
+      Assert.assertEquals(2, attributes.size());
+      Assert.assertEquals("5", attributes.get("a"));
+      Assert.assertEquals("6", attributes.get("f"));
+      attributes = sourceAttributesMap.get("attr1");
+      Assert.assertEquals(2, attributes.size());
+      Assert.assertEquals("7", attributes.get("f"));
+      Assert.assertEquals("8", attributes.get("q"));
+    }
 
-  @Test
-  public void testMergeAttributes_noAttributeOverrides() throws Exception {
-    Map<String, Map<String, String>> persistedAttributes = new HashMap<String, 
Map<String, String>>();
-    Map<String, String> persistedFinalAttrs = new HashMap<String, String>();
-    persistedFinalAttrs.put("a", "true");
-    persistedFinalAttrs.put("c", "true");
-    persistedFinalAttrs.put("d", "true");
-    persistedAttributes.put("final", persistedFinalAttrs);
-    Map<String, Map<String, String>> confGroupAttributes = new HashMap<String, 
Map<String, String>>();
-    Map<String, String> confGroupProperties = new HashMap<String, String>();
-    confGroupProperties.put("a", "any");
-    confGroupProperties.put("b", "any");
-    confGroupProperties.put("c", "any");
-
-    Config overrideConfig = new ConfigImpl(cluster, "type", 
confGroupProperties, confGroupAttributes, injector);
-
-    Map<String, Map<String, String>> result
-        = configHelper.overrideAttributes(overrideConfig, persistedAttributes);
-
-    Assert.assertNotNull(result);
-    Assert.assertEquals(1, result.size());
-    Map<String, String> finalResultAttributes = result.get("final");
-    Assert.assertNotNull(finalResultAttributes);
-    Assert.assertEquals(1, finalResultAttributes.size());
-    Assert.assertEquals("true", finalResultAttributes.get("d"));
-  }
+    @Test
+    public void testMergeAttributes() throws Exception {
+      Map<String, Map<String, String>> persistedAttributes = new 
HashMap<String, Map<String, String>>();
+      Map<String, String> persistedFinalAttrs = new HashMap<String, String>();
+      persistedFinalAttrs.put("a", "true");
+      persistedFinalAttrs.put("c", "true");
+      persistedFinalAttrs.put("d", "true");
+      persistedAttributes.put("final", persistedFinalAttrs);
+      Map<String, Map<String, String>> confGroupAttributes = new 
HashMap<String, Map<String, String>>();
+      Map<String, String> confGroupFinalAttrs = new HashMap<String, String>();
+      confGroupFinalAttrs.put("b", "true");
+      confGroupAttributes.put("final", confGroupFinalAttrs);
+      Map<String, String> confGroupProperties = new HashMap<String, String>();
+      confGroupProperties.put("a", "any");
+      confGroupProperties.put("b", "any");
+      confGroupProperties.put("c", "any");
+
+      Config overrideConfig = new ConfigImpl(cluster, "type", 
confGroupProperties, confGroupAttributes, injector);
+
+      Map<String, Map<String, String>> result
+          = configHelper.overrideAttributes(overrideConfig, 
persistedAttributes);
+
+      Assert.assertNotNull(result);
+      Assert.assertEquals(1, result.size());
+      Map<String, String> finalResultAttributes = result.get("final");
+      Assert.assertNotNull(finalResultAttributes);
+      Assert.assertEquals(2, finalResultAttributes.size());
+      Assert.assertEquals("true", finalResultAttributes.get("b"));
+      Assert.assertEquals("true", finalResultAttributes.get("d"));
+    }
 
-  @Test
-  public void testMergeAttributes_nullAttributes() throws Exception {
-    Map<String, Map<String, String>> persistedAttributes = new HashMap<String, 
Map<String, String>>();
-    Map<String, String> persistedFinalAttrs = new HashMap<String, String>();
-    persistedFinalAttrs.put("a", "true");
-    persistedFinalAttrs.put("c", "true");
-    persistedFinalAttrs.put("d", "true");
-    persistedAttributes.put("final", persistedFinalAttrs);
-    Map<String, String> confGroupProperties = new HashMap<String, String>();
-    confGroupProperties.put("a", "any");
-    confGroupProperties.put("b", "any");
-    confGroupProperties.put("c", "any");
-
-    Config overrideConfig = new ConfigImpl(cluster, "type", 
confGroupProperties, null, injector);
-
-    Map<String, Map<String, String>> result
-        = configHelper.overrideAttributes(overrideConfig, persistedAttributes);
-
-    Assert.assertNotNull(result);
-    Assert.assertEquals(1, result.size());
-    Map<String, String> finalResultAttributes = result.get("final");
-    Assert.assertNotNull(finalResultAttributes);
-    Assert.assertEquals(3, finalResultAttributes.size());
-    Assert.assertEquals("true", finalResultAttributes.get("a"));
-    Assert.assertEquals("true", finalResultAttributes.get("c"));
-    Assert.assertEquals("true", finalResultAttributes.get("d"));
-  }
+    @Test
+    public void testMergeAttributes_noAttributeOverrides() throws Exception {
+      Map<String, Map<String, String>> persistedAttributes = new 
HashMap<String, Map<String, String>>();
+      Map<String, String> persistedFinalAttrs = new HashMap<String, String>();
+      persistedFinalAttrs.put("a", "true");
+      persistedFinalAttrs.put("c", "true");
+      persistedFinalAttrs.put("d", "true");
+      persistedAttributes.put("final", persistedFinalAttrs);
+      Map<String, Map<String, String>> confGroupAttributes = new 
HashMap<String, Map<String, String>>();
+      Map<String, String> confGroupProperties = new HashMap<String, String>();
+      confGroupProperties.put("a", "any");
+      confGroupProperties.put("b", "any");
+      confGroupProperties.put("c", "any");
+
+      Config overrideConfig = new ConfigImpl(cluster, "type", 
confGroupProperties, confGroupAttributes, injector);
+
+      Map<String, Map<String, String>> result
+          = configHelper.overrideAttributes(overrideConfig, 
persistedAttributes);
+
+      Assert.assertNotNull(result);
+      Assert.assertEquals(1, result.size());
+      Map<String, String> finalResultAttributes = result.get("final");
+      Assert.assertNotNull(finalResultAttributes);
+      Assert.assertEquals(1, finalResultAttributes.size());
+      Assert.assertEquals("true", finalResultAttributes.get("d"));
+    }
+
+    @Test
+    public void testMergeAttributes_nullAttributes() throws Exception {
+      Map<String, Map<String, String>> persistedAttributes = new 
HashMap<String, Map<String, String>>();
+      Map<String, String> persistedFinalAttrs = new HashMap<String, String>();
+      persistedFinalAttrs.put("a", "true");
+      persistedFinalAttrs.put("c", "true");
+      persistedFinalAttrs.put("d", "true");
+      persistedAttributes.put("final", persistedFinalAttrs);
+      Map<String, String> confGroupProperties = new HashMap<String, String>();
+      confGroupProperties.put("a", "any");
+      confGroupProperties.put("b", "any");
+      confGroupProperties.put("c", "any");
+
+      Config overrideConfig = new ConfigImpl(cluster, "type", 
confGroupProperties, null, injector);
+
+      Map<String, Map<String, String>> result
+          = configHelper.overrideAttributes(overrideConfig, 
persistedAttributes);
+
+      Assert.assertNotNull(result);
+      Assert.assertEquals(1, result.size());
+      Map<String, String> finalResultAttributes = result.get("final");
+      Assert.assertNotNull(finalResultAttributes);
+      Assert.assertEquals(3, finalResultAttributes.size());
+      Assert.assertEquals("true", finalResultAttributes.get("a"));
+      Assert.assertEquals("true", finalResultAttributes.get("c"));
+      Assert.assertEquals("true", finalResultAttributes.get("d"));
+    }
+
+    @Test
+    public void testMergeAttributes_nullProperties() throws Exception {
+      Map<String, Map<String, String>> persistedAttributes = new 
HashMap<String, Map<String, String>>();
+      Map<String, String> persistedFinalAttrs = new HashMap<String, String>();
+      persistedFinalAttrs.put("a", "true");
+      persistedFinalAttrs.put("c", "true");
+      persistedFinalAttrs.put("d", "true");
+      persistedAttributes.put("final", persistedFinalAttrs);
+      Map<String, Map<String, String>> confGroupAttributes = new 
HashMap<String, Map<String, String>>();
+      Map<String, String> confGroupFinalAttrs = new HashMap<String, String>();
+      confGroupFinalAttrs.put("b", "true");
+      confGroupAttributes.put("final", confGroupFinalAttrs);
+
+      Config overrideConfig = new ConfigImpl(cluster, "type", null, 
confGroupAttributes, injector);
+
+      Map<String, Map<String, String>> result
+          = configHelper.overrideAttributes(overrideConfig, 
persistedAttributes);
+
+      Assert.assertNotNull(result);
+      Assert.assertEquals(1, result.size());
+      Map<String, String> finalResultAttributes = result.get("final");
+      Assert.assertNotNull(finalResultAttributes);
+      Assert.assertEquals(4, finalResultAttributes.size());
+      Assert.assertEquals("true", finalResultAttributes.get("a"));
+      Assert.assertEquals("true", finalResultAttributes.get("b"));
+      Assert.assertEquals("true", finalResultAttributes.get("c"));
+      Assert.assertEquals("true", finalResultAttributes.get("d"));
+    }
 
-  @Test
-  public void testMergeAttributes_nullProperties() throws Exception {
-    Map<String, Map<String, String>> persistedAttributes = new HashMap<String, 
Map<String, String>>();
-    Map<String, String> persistedFinalAttrs = new HashMap<String, String>();
-    persistedFinalAttrs.put("a", "true");
-    persistedFinalAttrs.put("c", "true");
-    persistedFinalAttrs.put("d", "true");
-    persistedAttributes.put("final", persistedFinalAttrs);
-    Map<String, Map<String, String>> confGroupAttributes = new HashMap<String, 
Map<String, String>>();
-    Map<String, String> confGroupFinalAttrs = new HashMap<String, String>();
-    confGroupFinalAttrs.put("b", "true");
-    confGroupAttributes.put("final", confGroupFinalAttrs);
-
-    Config overrideConfig = new ConfigImpl(cluster, "type", null, 
confGroupAttributes, injector);
-
-    Map<String, Map<String, String>> result
-        = configHelper.overrideAttributes(overrideConfig, persistedAttributes);
-
-    Assert.assertNotNull(result);
-    Assert.assertEquals(1, result.size());
-    Map<String, String> finalResultAttributes = result.get("final");
-    Assert.assertNotNull(finalResultAttributes);
-    Assert.assertEquals(4, finalResultAttributes.size());
-    Assert.assertEquals("true", finalResultAttributes.get("a"));
-    Assert.assertEquals("true", finalResultAttributes.get("b"));
-    Assert.assertEquals("true", finalResultAttributes.get("c"));
-    Assert.assertEquals("true", finalResultAttributes.get("d"));
+    @Test
+    public void testCalculateIsStaleConfigs() throws Exception {
+
+      Map<String, HostConfig> schReturn = new HashMap<String, HostConfig>();
+      HostConfig hc = new HostConfig();
+      // Put a different version to check for change
+      hc.setDefaultVersionTag("version2");
+      schReturn.put("flume-conf", hc);
+      // set up mocks
+      ServiceComponentHost sch = createNiceMock(ServiceComponentHost.class);
+      // set up expectations
+      expect(sch.getActualConfigs()).andReturn(schReturn).times(3);
+      expect(sch.getHostName()).andReturn("h1").times(6);
+      expect(sch.getClusterId()).andReturn(1l).times(3);
+      expect(sch.getServiceName()).andReturn("FLUME").times(3);
+      
expect(sch.getServiceComponentName()).andReturn("FLUME_HANDLER").times(3);
+      replay(sch);
+      // Cluster level config changes
+      Assert.assertTrue(configHelper.isStaleConfigs(sch));
+      HostConfig hc2 = new HostConfig();
+      hc2.setDefaultVersionTag("version1");
+      schReturn.put("flume-conf", hc2);
+      // invalidate cache to test new sch
+      configHelper.invalidateStaleConfigsCache();
+      // Cluster level same configs
+      Assert.assertFalse(configHelper.isStaleConfigs(sch));
+      // Cluster level same configs but group specific configs for host have 
been updated
+      List<String> hosts = new ArrayList<String>();
+      hosts.add("h1");
+      List<Config> configs = new ArrayList<Config>();
+      configs.add(new ConfigImpl("flume-conf"));
+      addConfigGroup("configGroup1", "FLUME", hosts, configs);
+      Assert.assertTrue(configHelper.isStaleConfigs(sch));
+      verify(sch);
+    }
   }
 
-  @Test
-  public void testCalculateIsStaleConfigs() throws Exception {
-
-    Map<String, HostConfig> schReturn = new HashMap<String, HostConfig>();
-    HostConfig hc = new HostConfig();
-    // Put a different version to check for change
-    hc.setDefaultVersionTag("version2");
-    schReturn.put("flume-conf", hc);
-    // set up mocks
-    ServiceComponentHost sch = createNiceMock(ServiceComponentHost.class);
-    // set up expectations
-    expect(sch.getActualConfigs()).andReturn(schReturn).times(3);
-    expect(sch.getHostName()).andReturn("h1").times(6);
-    expect(sch.getClusterId()).andReturn(1l).times(3);
-    expect(sch.getServiceName()).andReturn("FLUME").times(3);
-    expect(sch.getServiceComponentName()).andReturn("FLUME_HANDLER").times(3);
-    replay(sch);
-    // Cluster level config changes
-    Assert.assertTrue(configHelper.isStaleConfigs(sch));
-    HostConfig hc2 = new HostConfig();
-    hc2.setDefaultVersionTag("version1");
-    schReturn.put("flume-conf", hc2);
-    // invalidate cache to test new sch
-    configHelper.invalidateStaleConfigsCache();
-    // Cluster level same configs
-    Assert.assertFalse(configHelper.isStaleConfigs(sch));
-    // Cluster level same configs but group specific configs for host have 
been updated
-    List<String> hosts = new ArrayList<String>();
-    hosts.add("h1");
-    List<Config> configs = new ArrayList<Config>();
-    configs.add(new ConfigImpl("flume-conf"));
-    addConfigGroup("configGroup1", "FLUME", hosts, configs);
-    Assert.assertTrue(configHelper.isStaleConfigs(sch));
-    verify(sch);
+  public static class RunWithCustomModule {
+    private Injector injector;
+
+    @Before
+    public void setup() throws Exception {
+      injector = Guice.createInjector(new AbstractModule() {
+
+        @Override
+        protected void configure() {
+          final AmbariMetaInfo mockMetaInfo = 
createNiceMock(AmbariMetaInfo.class);
+          final ClusterController clusterController = 
createStrictMock(ClusterController.class);
+
+          
bind(EntityManager.class).toInstance(createNiceMock(EntityManager.class));
+          bind(DBAccessor.class).toInstance(createNiceMock(DBAccessor.class));
+          
bind(ClusterFactory.class).toInstance(createNiceMock(ClusterFactory.class));
+          
bind(HostFactory.class).toInstance(createNiceMock(HostFactory.class));
+          
bind(SecurityHelper.class).toInstance(createNiceMock(SecurityHelper.class));
+          bind(OsFamily.class).toInstance(createNiceMock(OsFamily.class));
+          
bind(AmbariCustomCommandExecutionHelper.class).toInstance(createNiceMock(AmbariCustomCommandExecutionHelper.class));
+          
bind(AmbariManagementController.class).toInstance(createNiceMock(AmbariManagementController.class));
+          bind(AmbariMetaInfo.class).toInstance(mockMetaInfo);
+          
bind(RequestFactory.class).toInstance(createNiceMock(RequestFactory.class));
+          bind(Clusters.class).toInstance(createNiceMock(ClustersImpl.class));
+          bind(ClusterController.class).toInstance(clusterController);
+        }
+      });
+
+    }
+
+    @Test
+    public void testGetServiceProperties_SimpleInvocation() throws Exception {
+      Cluster mockCluster = createStrictMock(Cluster.class);
+      StackId mockStackVersion = createStrictMock(StackId.class);
+      AmbariMetaInfo mockAmbariMetaInfo = 
injector.getInstance(AmbariMetaInfo.class);
+      ServiceInfo mockServiceInfo = createStrictMock(ServiceInfo.class);
+
+      PropertyInfo mockPropertyInfo1 = createStrictMock(PropertyInfo.class);
+      PropertyInfo mockPropertyInfo2 = createStrictMock(PropertyInfo.class);
+
+      List<PropertyInfo> serviceProperties = Arrays.asList(mockPropertyInfo1, 
mockPropertyInfo2);
+
+      
expect(mockCluster.getCurrentStackVersion()).andReturn(mockStackVersion).once();
+
+      expect(mockStackVersion.getStackName()).andReturn("HDP").once();
+      expect(mockStackVersion.getStackVersion()).andReturn("2.2").once();
+
+      expect(mockAmbariMetaInfo.getService("HDP", "2.2", 
"SERVICE")).andReturn(mockServiceInfo).once();
+
+      
expect(mockServiceInfo.getProperties()).andReturn(serviceProperties).once();
+
+      replay(mockAmbariMetaInfo, mockCluster, mockStackVersion, 
mockServiceInfo, mockPropertyInfo1, mockPropertyInfo2);
+
+      mockAmbariMetaInfo.init();
+
+      Set<PropertyInfo> result = injector.getInstance(ConfigHelper.class)
+          .getServiceProperties(mockCluster, "SERVICE");
+
+      Assert.assertNotNull(result);
+      Assert.assertEquals(2, result.size());
+
+      verify(mockAmbariMetaInfo, mockCluster, mockStackVersion, 
mockServiceInfo, mockPropertyInfo1, mockPropertyInfo2);
+    }
+
+    @Test
+    public void testGetServiceProperties_DoNoRemoveExcluded() throws Exception 
{
+      StackId mockStackVersion = createStrictMock(StackId.class);
+      AmbariMetaInfo mockAmbariMetaInfo = 
injector.getInstance(AmbariMetaInfo.class);
+      ServiceInfo mockServiceInfo = createStrictMock(ServiceInfo.class);
+
+      PropertyInfo mockPropertyInfo1 = createStrictMock(PropertyInfo.class);
+      PropertyInfo mockPropertyInfo2 = createStrictMock(PropertyInfo.class);
+
+      List<PropertyInfo> serviceProperties = Arrays.asList(mockPropertyInfo1, 
mockPropertyInfo2);
+
+      expect(mockStackVersion.getStackName()).andReturn("HDP").once();
+      expect(mockStackVersion.getStackVersion()).andReturn("2.2").once();
+
+      expect(mockAmbariMetaInfo.getService("HDP", "2.2", 
"SERVICE")).andReturn(mockServiceInfo).once();
+
+      
expect(mockServiceInfo.getProperties()).andReturn(serviceProperties).once();
+
+      replay(mockAmbariMetaInfo, mockStackVersion, mockServiceInfo, 
mockPropertyInfo1, mockPropertyInfo2);
+
+      mockAmbariMetaInfo.init();
+
+      Set<PropertyInfo> result = injector.getInstance(ConfigHelper.class)
+          .getServiceProperties(mockStackVersion, "SERVICE", false);
+
+      Assert.assertNotNull(result);
+      Assert.assertEquals(2, result.size());
+
+      verify(mockAmbariMetaInfo, mockStackVersion, mockServiceInfo, 
mockPropertyInfo1, mockPropertyInfo2);
+    }
+
+    @Test
+    public void testGetServiceProperties_RemoveExcluded() throws Exception {
+      StackId mockStackVersion = createStrictMock(StackId.class);
+      AmbariMetaInfo mockAmbariMetaInfo = 
injector.getInstance(AmbariMetaInfo.class);
+      ServiceInfo mockServiceInfo = createStrictMock(ServiceInfo.class);
+
+      PropertyInfo mockPropertyInfo1 = createStrictMock(PropertyInfo.class);
+      PropertyInfo mockPropertyInfo2 = createStrictMock(PropertyInfo.class);
+
+      List<PropertyInfo> serviceProperties = Arrays.asList(mockPropertyInfo1, 
mockPropertyInfo2);
+
+      expect(mockStackVersion.getStackName()).andReturn("HDP").once();
+      expect(mockStackVersion.getStackVersion()).andReturn("2.2").once();
+
+      expect(mockAmbariMetaInfo.getService("HDP", "2.2", 
"SERVICE")).andReturn(mockServiceInfo).once();
+
+      
expect(mockServiceInfo.getProperties()).andReturn(serviceProperties).once();
+      
expect(mockServiceInfo.getExcludedConfigTypes()).andReturn(Collections.singleton("excluded-type")).once();
+
+      
expect(mockPropertyInfo1.getFilename()).andReturn("included-type.xml").times(2);
+
+      
expect(mockPropertyInfo2.getFilename()).andReturn("excluded-type.xml").once();
+
+      replay(mockAmbariMetaInfo, mockStackVersion, mockServiceInfo, 
mockPropertyInfo1, mockPropertyInfo2);
+
+      mockAmbariMetaInfo.init();
+
+      Set<PropertyInfo> result = injector.getInstance(ConfigHelper.class)
+          .getServiceProperties(mockStackVersion, "SERVICE", true);
+
+      Assert.assertNotNull(result);
+      Assert.assertEquals(1, result.size());
+      Assert.assertEquals("included-type.xml", 
result.iterator().next().getFilename());
+
+      verify(mockAmbariMetaInfo, mockStackVersion, mockServiceInfo, 
mockPropertyInfo1, mockPropertyInfo2);
+    }
   }
 }

Reply via email to