You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by dm...@apache.org on 2014/01/27 18:59:34 UTC

[1/2] AMBARI-4427. Unittests for hooks, GANGLIA, FALCON and SQOOP (Eugene Chekanskiy via dlysnichenko)

Updated Branches:
  refs/heads/trunk dce0e2041 -> bc102b327


http://git-wip-us.apache.org/repos/asf/ambari/blob/bc102b32/ambari-server/src/test/python/stacks/2.1.1/configs/secured.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.1.1/configs/secured.json b/ambari-server/src/test/python/stacks/2.1.1/configs/secured.json
index 1d2fa15..6ad9e32 100644
--- a/ambari-server/src/test/python/stacks/2.1.1/configs/secured.json
+++ b/ambari-server/src/test/python/stacks/2.1.1/configs/secured.json
@@ -17,7 +17,8 @@
         "jdk_name": "jdk-7u45-linux-x64.tar.gz", 
         "ambari_db_rca_username": "mapred", 
         "java_home": "/usr/jdk64/jdk1.7.0_45", 
-        "mysql_jdbc_url": "http://c6401.ambari.apache.org:8080/resources//mysql-connector-java.jar"
+        "mysql_jdbc_url": "http://c6401.ambari.apache.org:8080/resources//mysql-connector-java.jar",
+        "db_name": "ambari"
     }, 
     "commandType": "EXECUTION_COMMAND", 
     "roleParams": {}, 
@@ -382,7 +383,12 @@
             "resourcemanager_heapsize": "1024", 
             "hbase_regionserver_keytab": "/etc/security/keytabs/hbase.service.keytab", 
             "hbase_principal_name": "hbase", 
-            "hdfs_principal_name": "hdfs"
+            "hdfs_principal_name": "hdfs",
+            "falcon_user": "falcon",
+            "falcon_port": "15000",
+            "falcon_local_dir": "/hadoop/falcon",
+            "falcon_store_uri": "file:///hadoop/falcon/store",
+            "rca_enabled": "false"
         }, 
         "capacity-scheduler": {
             "yarn.scheduler.capacity.node-locality-delay": "40", 
@@ -723,6 +729,9 @@
         ], 
         "hive_mysql_host": [
             "c6402.ambari.apache.org"
+        ],
+        "falcon_server_hosts": [
+            "c6402.ambari.apache.org"
         ]
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/bc102b32/ambari-server/src/test/python/stacks/2.1.1/hooks/before-INSTALL/test_before_install.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.1.1/hooks/before-INSTALL/test_before_install.py b/ambari-server/src/test/python/stacks/2.1.1/hooks/before-INSTALL/test_before_install.py
new file mode 100644
index 0000000..30fa52c
--- /dev/null
+++ b/ambari-server/src/test/python/stacks/2.1.1/hooks/before-INSTALL/test_before_install.py
@@ -0,0 +1,87 @@
+#!/usr/bin/env python
+
+'''
+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.
+'''
+
+from stacks.utils.RMFTestCase import *
+
+
+class TestHookBeforeInstall(RMFTestCase):
+  def test_configure_default(self):
+    self.executeScript("2.1.1/hooks/before-INSTALL/scripts/hook.py",
+                       classname="BeforeConfigureHook",
+                       command="hook",
+                       config_file="default.json"
+    )
+    self.assertResourceCalled('Group', 'hadoop', )
+    self.assertResourceCalled('Group', 'users', )
+    self.assertResourceCalled('Group', 'users', )
+    self.assertResourceCalled('User', 'ambari-qa',
+                          gid='hadoop',
+                          groups=['users'], )
+    self.assertResourceCalled('File', '/tmp/changeUid.sh',
+                          content=StaticFile('changeToSecureUid.sh'),
+                          mode=0555, )
+    self.assertResourceCalled('Execute',
+                          '/tmp/changeUid.sh ambari-qa /tmp/hadoop-ambari-qa,/tmp/hsperfdata_ambari-qa,/home/ambari-qa,/tmp/ambari-qa,/tmp/sqoop-ambari-qa 2>/dev/null',
+                          not_if='test $(id -u ambari-qa) -gt 1000', )
+    self.assertResourceCalled('User', 'hbase',
+                          gid='hadoop',
+                          groups=['hadoop'], )
+    self.assertResourceCalled('File', '/tmp/changeUid.sh',
+                          content=StaticFile('changeToSecureUid.sh'),
+                          mode=0555, )
+    self.assertResourceCalled('Execute',
+                          '/tmp/changeUid.sh hbase /home/hbase,/tmp/hbase,/usr/bin/hbase,/var/log/hbase,/hadoop/hbase 2>/dev/null',
+                          not_if='test $(id -u hbase) -gt 1000', )
+    self.assertResourceCalled('Group', 'nagios', )
+    self.assertResourceCalled('User', 'nagios',
+                          gid='nagios', )
+    self.assertResourceCalled('User', 'oozie',
+                          gid='hadoop', )
+    self.assertResourceCalled('User', 'hcat',
+                          gid='hadoop', )
+    self.assertResourceCalled('User', 'hcat',
+                          gid='hadoop', )
+    self.assertResourceCalled('User', 'hive',
+                          gid='hadoop', )
+    self.assertResourceCalled('User', 'yarn',
+                          gid='hadoop', )
+    self.assertResourceCalled('Group', 'nobody', )
+    self.assertResourceCalled('Group', 'nobody', )
+    self.assertResourceCalled('User', 'nobody',
+                          gid='hadoop',
+                          groups=['nobody'], )
+    self.assertResourceCalled('User', 'nobody',
+                          gid='hadoop',
+                          groups=['nobody'], )
+    self.assertResourceCalled('User', 'hdfs',
+                          gid='hadoop',
+                          groups=['hadoop'], )
+    self.assertResourceCalled('User', 'mapred',
+                          gid='hadoop',
+                          groups=['hadoop'], )
+    self.assertResourceCalled('User', 'zookeeper',
+                          gid='hadoop', )
+    self.assertResourceCalled('User', 'storm',
+                          gid='hadoop',
+                          groups=['hadoop'], )
+    self.assertResourceCalled('Package', 'unzip', )
+    self.assertResourceCalled('Package', 'net-snmp', )
+    self.assertResourceCalled('Package', 'net-snmp-utils', )
+    self.assertNoMoreResources()

http://git-wip-us.apache.org/repos/asf/ambari/blob/bc102b32/ambari-server/src/test/python/stacks/2.1.1/hooks/before-START/test_before_start.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.1.1/hooks/before-START/test_before_start.py b/ambari-server/src/test/python/stacks/2.1.1/hooks/before-START/test_before_start.py
new file mode 100644
index 0000000..ede8d5d
--- /dev/null
+++ b/ambari-server/src/test/python/stacks/2.1.1/hooks/before-START/test_before_start.py
@@ -0,0 +1,157 @@
+#!/usr/bin/env python
+
+'''
+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.
+'''
+
+from stacks.utils.RMFTestCase import *
+
+class TestHookBeforeStart(RMFTestCase):
+  def test_configure_default(self):
+    self.executeScript("2.1.1/hooks/before-START/scripts/hook.py",
+                       classname="BeforeConfigureHook",
+                       command="hook",
+                       config_file="default.json"
+    )
+    self.assertResourceCalled('Execute', 'mkdir -p /tmp/HDP-artifacts/ ; curl -kf --retry 10 http://c6401.ambari.apache.org:8080/resources//jdk-7u45-linux-x64.tar.gz -o /tmp/HDP-artifacts//jdk-7u45-linux-x64.tar.gz',
+                              not_if = 'test -e /usr/jdk64/jdk1.7.0_45/bin/java',
+                              path = ['/bin', '/usr/bin/'],
+                              )
+    self.assertResourceCalled('Execute', 'mkdir -p /usr/jdk64 ; cd /usr/jdk64 ; tar -xf /tmp/HDP-artifacts//jdk-7u45-linux-x64.tar.gz > /dev/null 2>&1',
+                              not_if = 'test -e /usr/jdk64/jdk1.7.0_45/bin/java',
+                              path = ['/bin', '/usr/bin/'],
+                              )
+    self.assertResourceCalled('Execute', 'mkdir -p /tmp/HDP-artifacts/; curl -kf --retry 10 http://c6401.ambari.apache.org:8080/resources//UnlimitedJCEPolicyJDK7.zip -o /tmp/HDP-artifacts//UnlimitedJCEPolicyJDK7.zip',
+                              not_if = 'test -e /tmp/HDP-artifacts//UnlimitedJCEPolicyJDK7.zip',
+                              ignore_failures = True,
+                              path = ['/bin', '/usr/bin/'],
+                              )
+    self.assertResourceCalled('File', '/etc/snmp/snmpd.conf',
+                              content = Template('snmpd.conf.j2'),
+                              )
+    self.assertResourceCalled('Service', 'snmpd',
+                              action = ['restart'],
+                              )
+    self.assertResourceCalled('Execute', '/bin/echo 0 > /selinux/enforce',
+                              only_if = 'test -f /selinux/enforce',
+                              )
+    self.assertResourceCalled('Execute', 'mkdir -p /usr/lib/hadoop/lib/native/Linux-i386-32; ln -sf /usr/lib/libsnappy.so /usr/lib/hadoop/lib/native/Linux-i386-32/libsnappy.so',
+                              )
+    self.assertResourceCalled('Execute', 'mkdir -p /usr/lib/hadoop/lib/native/Linux-amd64-64; ln -sf /usr/lib64/libsnappy.so /usr/lib/hadoop/lib/native/Linux-amd64-64/libsnappy.so',
+                              )
+    self.assertResourceCalled('Directory', '/etc/hadoop/conf',
+                              owner = 'root',
+                              group = 'root',
+                              recursive = True,
+                              )
+    self.assertResourceCalled('Directory', '/var/log/hadoop',
+                              owner = 'root',
+                              group = 'root',
+                              recursive = True,
+                              )
+    self.assertResourceCalled('Directory', '/var/run/hadoop',
+                              owner = 'root',
+                              group = 'root',
+                              recursive = True,
+                              )
+    self.assertResourceCalled('Directory', '/tmp',
+                              owner = 'hdfs',
+                              recursive = True,
+                              )
+    self.assertResourceCalled('File', '/etc/security/limits.d/hdfs.conf',
+                              content = Template('hdfs.conf.j2'),
+                              owner = 'root',
+                              group = 'root',
+                              mode = 0644,
+                              )
+    self.assertResourceCalled('File', '/etc/hadoop/conf/taskcontroller.cfg',
+                              content = Template('taskcontroller.cfg.j2'),
+                              owner = 'hdfs',
+                              )
+    self.assertResourceCalled('File', '/etc/hadoop/conf/hadoop-env.sh',
+                              content = Template('hadoop-env.sh.j2'),
+                              owner = 'hdfs',
+                              )
+    self.assertResourceCalled('File', '/etc/hadoop/conf/commons-logging.properties',
+                              content = Template('commons-logging.properties.j2'),
+                              owner = 'hdfs',
+                              )
+    self.assertResourceCalled('File', '/etc/hadoop/conf/slaves',
+                              content = Template('slaves.j2'),
+                              owner = 'hdfs',
+                              )
+    self.assertResourceCalled('File', '/etc/hadoop/conf/health_check',
+                              content = Template('health_check-v2.j2'),
+                              owner = 'hdfs',
+                              )
+    self.assertResourceCalled('Execute', "sed -i 's~\\(###\\)\\?ambari.jobhistory.driver=.*~###ambari.jobhistory.driver=o~' /etc/hadoop/conf/log4j.properties",
+                              )
+    self.assertResourceCalled('Execute', "sed -i 's~\\(###\\)\\?log4j.appender.JHA=.*~###log4j.appender.JHA=org.apache.ambari.log4j.hadoop.mapreduce.jobhistory.JobHistoryAppender~' /etc/hadoop/conf/log4j.properties",
+                              )
+    self.assertResourceCalled('Execute', "sed -i 's~\\(###\\)\\?log4j.appender.JHA.driver=.*~###log4j.appender.JHA.driver=${ambari.jobhistory.driver}~' /etc/hadoop/conf/log4j.properties",
+                              )
+    self.assertResourceCalled('Execute', "sed -i 's~\\(###\\)\\?log4j.appender.JHA.database=.*~###log4j.appender.JHA.database=${ambari.jobhistory.database}~' /etc/hadoop/conf/log4j.properties",
+                              )
+    self.assertResourceCalled('Execute', "sed -i 's~\\(###\\)\\?ambari.jobhistory.logger=.*~###ambari.jobhistory.logger=DEBUG,JHA~' /etc/hadoop/conf/log4j.properties",
+                              )
+    self.assertResourceCalled('Execute', "sed -i 's~\\(###\\)\\?log4j.appender.JHA.password=.*~###log4j.appender.JHA.password=${ambari.jobhistory.password}~' /etc/hadoop/conf/log4j.properties",
+                              )
+    self.assertResourceCalled('Execute', "sed -i 's~\\(###\\)\\?ambari.jobhistory.database=.*~###ambari.jobhistory.database=j~' /etc/hadoop/conf/log4j.properties",
+                              )
+    self.assertResourceCalled('Execute', "sed -i 's~\\(###\\)\\?log4j.additivity.org.apache.hadoop.mapred.JobHistory$JobHistoryLogger=.*~###log4j.additivity.org.apache.hadoop.mapred.JobHistory$JobHistoryLogger=true~' /etc/hadoop/conf/log4j.properties",
+                              )
+    self.assertResourceCalled('Execute', "sed -i 's~\\(###\\)\\?log4j.logger.org.apache.hadoop.mapred.JobHistory$JobHistoryLogger=.*~###log4j.logger.org.apache.hadoop.mapred.JobHistory$JobHistoryLogger=${ambari.jobhistory.logger}~' /etc/hadoop/conf/log4j.properties",
+                              )
+    self.assertResourceCalled('Execute', "sed -i 's~\\(###\\)\\?log4j.appender.JHA.user=.*~###log4j.appender.JHA.user=${ambari.jobhistory.user}~' /etc/hadoop/conf/log4j.properties",
+                              )
+    self.assertResourceCalled('Execute', "sed -i 's~\\(###\\)\\?ambari.jobhistory.user=.*~###ambari.jobhistory.user=m~' /etc/hadoop/conf/log4j.properties",
+                              )
+    self.assertResourceCalled('Execute', "sed -i 's~\\(###\\)\\?ambari.jobhistory.password=.*~###ambari.jobhistory.password=m~' /etc/hadoop/conf/log4j.properties",
+                              )
+    self.assertResourceCalled('File', '/etc/hadoop/conf/hadoop-metrics2.properties',
+                              content = Template('hadoop-metrics2.properties.j2'),
+                              owner = 'hdfs',
+                              )
+    self.assertResourceCalled('XmlConfig', 'core-site.xml',
+                              owner = 'hdfs',
+                              group = 'hadoop',
+                              conf_dir = '/etc/hadoop/conf',
+                              configurations = self.getConfig()['configurations']['core-site'],
+                              )
+    self.assertResourceCalled('XmlConfig', 'mapred-site.xml',
+                              owner = 'mapred',
+                              group = 'hadoop',
+                              conf_dir = '/etc/hadoop/conf',
+                              configurations = self.getConfig()['configurations']['mapred-site'],
+                              )
+    self.assertResourceCalled('File', '/etc/hadoop/conf/task-log4j.properties',
+                              content = StaticFile('task-log4j.properties'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('XmlConfig', 'capacity-scheduler.xml',
+                              owner = 'hdfs',
+                              group = 'hadoop',
+                              conf_dir = '/etc/hadoop/conf',
+                              configurations = self.getConfig()['configurations']['capacity-scheduler'],
+                              )
+    self.assertResourceCalled('XmlConfig', 'hdfs-site.xml',
+                              owner = 'hdfs',
+                              group = 'hadoop',
+                              conf_dir = '/etc/hadoop/conf',
+                              configurations = self.getConfig()['configurations']['hdfs-site'],
+                              )
+    self.assertNoMoreResources()

http://git-wip-us.apache.org/repos/asf/ambari/blob/bc102b32/ambari-server/src/test/python/stacks/utils/RMFTestCase.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/utils/RMFTestCase.py b/ambari-server/src/test/python/stacks/utils/RMFTestCase.py
index 30e8366..d3e9172 100644
--- a/ambari-server/src/test/python/stacks/utils/RMFTestCase.py
+++ b/ambari-server/src/test/python/stacks/utils/RMFTestCase.py
@@ -80,7 +80,8 @@ class RMFTestCase(TestCase):
         with patch.object(Script, 'get_config', return_value=self.config_dict): # mocking configurations
           with patch.object(Script, 'install_packages'):
             with patch('resource_management.libraries.functions.get_kinit_path', return_value=kinit_path_local):
-              method(RMFTestCase.env)
+              with patch.object(platform, 'linux_distribution', return_value=os_type):
+                method(RMFTestCase.env)
   
   def getConfig(self):
     return self.config_dict
@@ -107,7 +108,7 @@ class RMFTestCase(TestCase):
       return val[1:]
     
     return val
-  
+
   def printResources(self):
     for resource in RMFTestCase.env.resource_list:
       print "'{0}', {1},".format(resource.__class__.__name__, self._ppformat(resource.name))

http://git-wip-us.apache.org/repos/asf/ambari/blob/bc102b32/ambari-server/src/test/python/unitTests.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/unitTests.py b/ambari-server/src/test/python/unitTests.py
index 03c67fd..b983eb9 100644
--- a/ambari-server/src/test/python/unitTests.py
+++ b/ambari-server/src/test/python/unitTests.py
@@ -114,12 +114,13 @@ def main():
   pwd = os.path.abspath(os.path.dirname(__file__))
 
   ambari_server_folder = get_parent_path(pwd,'ambari-server')
-  ambari_agent_folder = os.path.join(ambari_server_folder,os.path.normpath("../ambari-agent"))
-  ambari_common_folder = os.path.join(ambari_server_folder,os.path.normpath("../ambari-common"))
-  # append pythonpath (for running from IDE)
-  sys.path.append(ambari_common_folder + os.path.normpath("/src/test/python"))
-  sys.path.append(ambari_common_folder + os.path.normpath("/src/main/python/jinja2"))
-  sys.path.append(ambari_agent_folder + os.path.normpath("/src/main/python"))
+  ambari_agent_folder = os.path.join(ambari_server_folder,"../ambari-agent")
+  ambari_common_folder = os.path.join(ambari_server_folder,"../ambari-common")
+  sys.path.append(ambari_common_folder + "/src/main/python/jinja2")
+  sys.path.append(ambari_common_folder + "/src/test/python")
+  sys.path.append(ambari_agent_folder + "/src/main/python")
+  sys.path.append(ambari_server_folder + "/src/test/python")
+  sys.path.append(ambari_server_folder + "/src/main/python")
 
   stacks_folder = pwd+'/stacks'
   #generate test variants(path, service, stack)
@@ -130,9 +131,15 @@ def main():
       for service in os.listdir(current_stack_dir):
         current_service_dir = current_stack_dir+"/"+service
         if os.path.isdir(current_service_dir) and service not in SERVICE_EXCLUDE:
-          test_variants.append({'directory':current_service_dir,
-                                'service':service,
-                                'stack':stack})
+          if service == 'hooks':
+            for hook in os.listdir(current_service_dir):
+              test_variants.append({'directory':current_service_dir + "/" + hook,
+                                    'service':hook,
+                                    'stack':stack})
+          else:
+            test_variants.append({'directory':current_service_dir,
+                                  'service':service,
+                                  'stack':stack})
 
   #run tests for every service in every stack in separate process
   has_failures = False


[2/2] git commit: AMBARI-4427. Unittests for hooks, GANGLIA, FALCON and SQOOP (Eugene Chekanskiy via dlysnichenko)

Posted by dm...@apache.org.
AMBARI-4427. Unittests for hooks, GANGLIA, FALCON and SQOOP (Eugene Chekanskiy via dlysnichenko)


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

Branch: refs/heads/trunk
Commit: bc102b3273f3fc5809854f30a67e6844c7b10fdd
Parents: dce0e20
Author: Lisnichenko Dmitro <dl...@hortonworks.com>
Authored: Mon Jan 27 19:58:24 2014 +0200
Committer: Lisnichenko Dmitro <dl...@hortonworks.com>
Committed: Mon Jan 27 19:58:24 2014 +0200

----------------------------------------------------------------------
 .../services/GANGLIA/package/scripts/ganglia.py |   2 +-
 .../FALCON/package/scripts/falcon_client.py     |   8 +-
 .../FALCON/package/scripts/falcon_server.py     |   4 +-
 .../services/GANGLIA/package/scripts/ganglia.py |   2 +-
 .../GANGLIA/package/scripts/ganglia_server.py   |   4 +-
 .../1.3.3/GANGLIA/test_ganglia_monitor.py       | 195 ++++++++++++++++
 .../stacks/1.3.3/GANGLIA/test_ganglia_server.py | 226 +++++++++++++++++++
 .../stacks/1.3.3/SQOOP/test_service_check.py    |  48 ++++
 .../python/stacks/1.3.3/SQOOP/test_sqoop.py     |  52 +++++
 .../hooks/before-INSTALL/test_before_install.py |  78 +++++++
 .../hooks/before-START/test_before_start.py     | 150 ++++++++++++
 .../stacks/2.1.1/FALCON/test_falcon_client.py   |  38 ++++
 .../stacks/2.1.1/FALCON/test_falcon_server.py   |  94 ++++++++
 .../stacks/2.1.1/FALCON/test_service_check.py   |  42 ++++
 .../2.1.1/GANGLIA/test_ganglia_monitor.py       | 169 ++++++++++++++
 .../stacks/2.1.1/GANGLIA/test_ganglia_server.py | 214 ++++++++++++++++++
 .../stacks/2.1.1/SQOOP/test_service_check.py    |  50 ++++
 .../python/stacks/2.1.1/SQOOP/test_sqoop.py     |  52 +++++
 .../python/stacks/2.1.1/configs/default.json    |  15 +-
 .../python/stacks/2.1.1/configs/secured.json    |  13 +-
 .../hooks/before-INSTALL/test_before_install.py |  87 +++++++
 .../hooks/before-START/test_before_start.py     | 157 +++++++++++++
 .../src/test/python/stacks/utils/RMFTestCase.py |   5 +-
 ambari-server/src/test/python/unitTests.py      |  25 +-
 24 files changed, 1703 insertions(+), 27 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/bc102b32/ambari-server/src/main/resources/stacks/HDP/1.3.3/services/GANGLIA/package/scripts/ganglia.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/1.3.3/services/GANGLIA/package/scripts/ganglia.py b/ambari-server/src/main/resources/stacks/HDP/1.3.3/services/GANGLIA/package/scripts/ganglia.py
index 1eae6d0..52b79be 100644
--- a/ambari-server/src/main/resources/stacks/HDP/1.3.3/services/GANGLIA/package/scripts/ganglia.py
+++ b/ambari-server/src/main/resources/stacks/HDP/1.3.3/services/GANGLIA/package/scripts/ganglia.py
@@ -72,7 +72,7 @@ def shell_file(name):
   )
 
 
-def ganglia_TemplateConfig(name, mode=755, tag=None):
+def ganglia_TemplateConfig(name, mode=0755, tag=None):
   import params
 
   TemplateConfig(format("{params.ganglia_shell_cmds_dir}/{name}"),

http://git-wip-us.apache.org/repos/asf/ambari/blob/bc102b32/ambari-server/src/main/resources/stacks/HDP/2.1.1/services/FALCON/package/scripts/falcon_client.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.1.1/services/FALCON/package/scripts/falcon_client.py b/ambari-server/src/main/resources/stacks/HDP/2.1.1/services/FALCON/package/scripts/falcon_client.py
index ab59b6f..fd8c005 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.1.1/services/FALCON/package/scripts/falcon_client.py
+++ b/ambari-server/src/main/resources/stacks/HDP/2.1.1/services/FALCON/package/scripts/falcon_client.py
@@ -22,15 +22,13 @@ from falcon import falcon
 
 class FalconClient(Script):
   def install(self, env):
-    import params
-
     self.install_packages(env)
-    env.set_params(params)
-    self.config(env)
+    self.configure(env)
 
-  def config(self, env):
+  def configure(self, env):
     import params
 
+    env.set_params(params)
     falcon('client', action='config')
 
   def status(self, env):

http://git-wip-us.apache.org/repos/asf/ambari/blob/bc102b32/ambari-server/src/main/resources/stacks/HDP/2.1.1/services/FALCON/package/scripts/falcon_server.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.1.1/services/FALCON/package/scripts/falcon_server.py b/ambari-server/src/main/resources/stacks/HDP/2.1.1/services/FALCON/package/scripts/falcon_server.py
index fa3bc40..0460460 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.1.1/services/FALCON/package/scripts/falcon_server.py
+++ b/ambari-server/src/main/resources/stacks/HDP/2.1.1/services/FALCON/package/scripts/falcon_server.py
@@ -26,12 +26,12 @@ class FalconServer(Script):
 
     self.install_packages(env)
     env.set_params(params)
-    self.config(env)
 
   def start(self, env):
     import params
 
     env.set_params(params)
+    self.configure(env)
 
     falcon('server', action='start')
 
@@ -43,7 +43,7 @@ class FalconServer(Script):
     falcon('server', action='stop')
 
 
-  def config(self, env):
+  def configure(self, env):
     import params
 
     env.set_params(params)

http://git-wip-us.apache.org/repos/asf/ambari/blob/bc102b32/ambari-server/src/main/resources/stacks/HDP/2.1.1/services/GANGLIA/package/scripts/ganglia.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.1.1/services/GANGLIA/package/scripts/ganglia.py b/ambari-server/src/main/resources/stacks/HDP/2.1.1/services/GANGLIA/package/scripts/ganglia.py
index 75626b1..69fde27 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.1.1/services/GANGLIA/package/scripts/ganglia.py
+++ b/ambari-server/src/main/resources/stacks/HDP/2.1.1/services/GANGLIA/package/scripts/ganglia.py
@@ -63,7 +63,7 @@ def shell_file(name):
   )
 
 
-def ganglia_TemplateConfig(name, mode=755, tag=None):
+def ganglia_TemplateConfig(name, mode=0755, tag=None):
   import params
 
   TemplateConfig(format("{params.ganglia_shell_cmds_dir}/{name}"),

http://git-wip-us.apache.org/repos/asf/ambari/blob/bc102b32/ambari-server/src/main/resources/stacks/HDP/2.1.1/services/GANGLIA/package/scripts/ganglia_server.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.1.1/services/GANGLIA/package/scripts/ganglia_server.py b/ambari-server/src/main/resources/stacks/HDP/2.1.1/services/GANGLIA/package/scripts/ganglia_server.py
index ab730de..863f092 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.1.1/services/GANGLIA/package/scripts/ganglia_server.py
+++ b/ambari-server/src/main/resources/stacks/HDP/2.1.1/services/GANGLIA/package/scripts/ganglia_server.py
@@ -31,7 +31,7 @@ class GangliaServer(Script):
 
     self.install_packages(env)
     env.set_params(params)
-    self.config(env)
+    self.configure(env)
 
   def start(self, env):
     import params
@@ -52,7 +52,7 @@ class GangliaServer(Script):
     # Recursively check all existing gmetad pid files
     check_process_status(pid_file)
 
-  def config(self, env):
+  def configure(self, env):
     import params
 
     ganglia.groups_and_users()

http://git-wip-us.apache.org/repos/asf/ambari/blob/bc102b32/ambari-server/src/test/python/stacks/1.3.3/GANGLIA/test_ganglia_monitor.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/1.3.3/GANGLIA/test_ganglia_monitor.py b/ambari-server/src/test/python/stacks/1.3.3/GANGLIA/test_ganglia_monitor.py
new file mode 100644
index 0000000..8fae96a
--- /dev/null
+++ b/ambari-server/src/test/python/stacks/1.3.3/GANGLIA/test_ganglia_monitor.py
@@ -0,0 +1,195 @@
+#!/usr/bin/env python
+
+'''
+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.
+'''
+
+from stacks.utils.RMFTestCase import *
+
+
+class TestGangliaMonitor(RMFTestCase):
+
+  def test_configure_default(self):
+    self.executeScript("1.3.3/services/GANGLIA/package/scripts/ganglia_monitor.py",
+                       classname="GangliaMonitor",
+                       command="configure",
+                       config_file="default.json"
+                      )
+    self.assertResourceCalled('Group', 'hadoop',
+                              )
+    self.assertResourceCalled('Group', 'nobody',
+                              )
+    self.assertResourceCalled('Group', 'nobody',
+                              )
+    self.assertResourceCalled('User', 'nobody',
+                              groups = [u'nobody'],
+                              )
+    self.assertResourceCalled('User', 'nobody',
+                              groups = [u'nobody'],
+                              )
+    self.assertResourceCalled('Directory', '/etc/ganglia/hdp',
+                              owner = 'root',
+                              group = 'hadoop',
+                              recursive = True,
+                              )
+    self.assertResourceCalled('Directory', '/usr/libexec/hdp/ganglia',
+                              owner = 'root',
+                              group = 'root',
+                              recursive = True,
+                              )
+    self.assertResourceCalled('File', '/etc/init.d/hdp-gmetad',
+                              content = StaticFile('gmetad.init'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('File', '/etc/init.d/hdp-gmond',
+                              content = StaticFile('gmond.init'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('File', '/usr/libexec/hdp/ganglia/checkGmond.sh',
+                              content = StaticFile('checkGmond.sh'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('File', '/usr/libexec/hdp/ganglia/checkRrdcached.sh',
+                              content = StaticFile('checkRrdcached.sh'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('File', '/usr/libexec/hdp/ganglia/gmetadLib.sh',
+                              content = StaticFile('gmetadLib.sh'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('File', '/usr/libexec/hdp/ganglia/gmondLib.sh',
+                              content = StaticFile('gmondLib.sh'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('File', '/usr/libexec/hdp/ganglia/rrdcachedLib.sh',
+                              content = StaticFile('rrdcachedLib.sh'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('File', '/usr/libexec/hdp/ganglia/setupGanglia.sh',
+                              content = StaticFile('setupGanglia.sh'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('File', '/usr/libexec/hdp/ganglia/startGmetad.sh',
+                              content = StaticFile('startGmetad.sh'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('File', '/usr/libexec/hdp/ganglia/startGmond.sh',
+                              content = StaticFile('startGmond.sh'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('File', '/usr/libexec/hdp/ganglia/startRrdcached.sh',
+                              content = StaticFile('startRrdcached.sh'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('File', '/usr/libexec/hdp/ganglia/stopGmetad.sh',
+                              content = StaticFile('stopGmetad.sh'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('File', '/usr/libexec/hdp/ganglia/stopGmond.sh',
+                              content = StaticFile('stopGmond.sh'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('File', '/usr/libexec/hdp/ganglia/stopRrdcached.sh',
+                              content = StaticFile('stopRrdcached.sh'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('File', '/usr/libexec/hdp/ganglia/teardownGanglia.sh',
+                              content = StaticFile('teardownGanglia.sh'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('TemplateConfig', '/usr/libexec/hdp/ganglia/gangliaClusters.conf',
+                              owner = 'root',
+                              template_tag = None,
+                              group = 'root',
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('TemplateConfig', '/usr/libexec/hdp/ganglia/gangliaEnv.sh',
+                              owner = 'root',
+                              template_tag = None,
+                              group = 'root',
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('TemplateConfig', '/usr/libexec/hdp/ganglia/gangliaLib.sh',
+                              owner = 'root',
+                              template_tag = None,
+                              group = 'root',
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('Execute', '/usr/libexec/hdp/ganglia/setupGanglia.sh -c HDPJobTracker -o root -g hadoop',
+                              path = ['/usr/libexec/hdp/ganglia',
+                                      '/usr/sbin',
+                                      '/sbin:/usr/local/bin',
+                                      '/bin',
+                                      '/usr/bin'],
+                              )
+    self.assertResourceCalled('Execute', '/usr/libexec/hdp/ganglia/setupGanglia.sh -c HDPHistoryServer -o root -g hadoop',
+                              path = ['/usr/libexec/hdp/ganglia',
+                                      '/usr/sbin',
+                                      '/sbin:/usr/local/bin',
+                                      '/bin',
+                                      '/usr/bin'],
+                              )
+    self.assertResourceCalled('Execute', '/usr/libexec/hdp/ganglia/setupGanglia.sh -c HDPSlaves -o root -g hadoop',
+                              path = ['/usr/libexec/hdp/ganglia',
+                                      '/usr/sbin',
+                                      '/sbin:/usr/local/bin',
+                                      '/bin',
+                                      '/usr/bin'],
+                              )
+    self.assertResourceCalled('Directory', '/etc/ganglia/conf.d',
+                              owner = 'root',
+                              group = 'hadoop',
+                              )
+    self.assertResourceCalled('File', '/etc/ganglia/conf.d/modgstatus.conf',
+                              owner = 'root',
+                              group = 'hadoop',
+                              )
+    self.assertResourceCalled('File', '/etc/ganglia/conf.d/multicpu.conf',
+                              owner = 'root',
+                              group = 'hadoop',
+                              )
+    self.assertResourceCalled('File', '/etc/ganglia/gmond.conf',
+                              owner = 'root',
+                              group = 'hadoop',
+                              )
+    self.assertNoMoreResources()
+
+  def test_start_default(self):
+    self.executeScript("1.3.3/services/GANGLIA/package/scripts/ganglia_monitor.py",
+                       classname="GangliaMonitor",
+                       command="start",
+                       config_file="default.json"
+    )
+    self.assertResourceCalled('Execute', 'chkconfig gmond off',
+                              path = ['/usr/sbin:/sbin:/usr/local/bin:/bin:/usr/bin'],
+                              )
+    self.assertResourceCalled('Execute', 'service hdp-gmond start >> /tmp/gmond.log  2>&1 ; /bin/ps auwx | /bin/grep [g]mond  >> /tmp/gmond.log  2>&1',
+                              path = ['/usr/sbin:/sbin:/usr/local/bin:/bin:/usr/bin'],
+                              )
+    self.assertNoMoreResources()
+
+  def test_stop_default(self):
+    self.executeScript("1.3.3/services/GANGLIA/package/scripts/ganglia_monitor.py",
+                       classname="GangliaMonitor",
+                       command="stop",
+                       config_file="default.json"
+    )
+    self.assertResourceCalled('Execute', 'service hdp-gmond stop >> /tmp/gmond.log  2>&1 ; /bin/ps auwx | /bin/grep [g]mond  >> /tmp/gmond.log  2>&1',
+                              path = ['/usr/sbin:/sbin:/usr/local/bin:/bin:/usr/bin'],
+                              )
+    self.assertNoMoreResources()
+

http://git-wip-us.apache.org/repos/asf/ambari/blob/bc102b32/ambari-server/src/test/python/stacks/1.3.3/GANGLIA/test_ganglia_server.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/1.3.3/GANGLIA/test_ganglia_server.py b/ambari-server/src/test/python/stacks/1.3.3/GANGLIA/test_ganglia_server.py
new file mode 100644
index 0000000..3314f10
--- /dev/null
+++ b/ambari-server/src/test/python/stacks/1.3.3/GANGLIA/test_ganglia_server.py
@@ -0,0 +1,226 @@
+#!/usr/bin/env python
+
+'''
+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.
+'''
+
+from stacks.utils.RMFTestCase import *
+
+
+class TestGangliaServer(RMFTestCase):
+
+  def test_configure_default(self):
+    self.executeScript("1.3.3/services/GANGLIA/package/scripts/ganglia_server.py",
+                       classname="GangliaServer",
+                       command="configure",
+                       config_file="default.json"
+    )
+    self.assertResourceCalled('Group', 'hadoop',
+                              )
+    self.assertResourceCalled('Group', 'nobody',
+                              )
+    self.assertResourceCalled('Group', 'nobody',
+                              )
+    self.assertResourceCalled('User', 'nobody',
+                              groups = [u'nobody'],
+                              )
+    self.assertResourceCalled('User', 'nobody',
+                              groups = [u'nobody'],
+                              )
+    self.assertResourceCalled('Directory', '/usr/libexec/hdp/ganglia',
+                              owner = 'root',
+                              group = 'root',
+                              recursive = True,
+                              )
+    self.assertResourceCalled('File', '/etc/init.d/hdp-gmetad',
+                              content = StaticFile('gmetad.init'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('File', '/etc/init.d/hdp-gmond',
+                              content = StaticFile('gmond.init'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('File', '/usr/libexec/hdp/ganglia/checkGmond.sh',
+                              content = StaticFile('checkGmond.sh'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('File', '/usr/libexec/hdp/ganglia/checkRrdcached.sh',
+                              content = StaticFile('checkRrdcached.sh'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('File', '/usr/libexec/hdp/ganglia/gmetadLib.sh',
+                              content = StaticFile('gmetadLib.sh'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('File', '/usr/libexec/hdp/ganglia/gmondLib.sh',
+                              content = StaticFile('gmondLib.sh'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('File', '/usr/libexec/hdp/ganglia/rrdcachedLib.sh',
+                              content = StaticFile('rrdcachedLib.sh'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('File', '/usr/libexec/hdp/ganglia/setupGanglia.sh',
+                              content = StaticFile('setupGanglia.sh'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('File', '/usr/libexec/hdp/ganglia/startGmetad.sh',
+                              content = StaticFile('startGmetad.sh'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('File', '/usr/libexec/hdp/ganglia/startGmond.sh',
+                              content = StaticFile('startGmond.sh'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('File', '/usr/libexec/hdp/ganglia/startRrdcached.sh',
+                              content = StaticFile('startRrdcached.sh'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('File', '/usr/libexec/hdp/ganglia/stopGmetad.sh',
+                              content = StaticFile('stopGmetad.sh'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('File', '/usr/libexec/hdp/ganglia/stopGmond.sh',
+                              content = StaticFile('stopGmond.sh'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('File', '/usr/libexec/hdp/ganglia/stopRrdcached.sh',
+                              content = StaticFile('stopRrdcached.sh'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('File', '/usr/libexec/hdp/ganglia/teardownGanglia.sh',
+                              content = StaticFile('teardownGanglia.sh'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('TemplateConfig', '/usr/libexec/hdp/ganglia/gangliaClusters.conf',
+                              owner = 'root',
+                              template_tag = None,
+                              group = 'root',
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('TemplateConfig', '/usr/libexec/hdp/ganglia/gangliaEnv.sh',
+                              owner = 'root',
+                              template_tag = None,
+                              group = 'root',
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('TemplateConfig', '/usr/libexec/hdp/ganglia/gangliaLib.sh',
+                              owner = 'root',
+                              template_tag = None,
+                              group = 'root',
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('Execute', '/usr/libexec/hdp/ganglia/setupGanglia.sh -c HDPNameNode -m -o root -g hadoop',
+                              path = ['/usr/libexec/hdp/ganglia',
+                                      '/usr/sbin',
+                                      '/sbin:/usr/local/bin',
+                                      '/bin',
+                                      '/usr/bin'],
+                              )
+    self.assertResourceCalled('Execute', '/usr/libexec/hdp/ganglia/setupGanglia.sh -c HDPJobTracker -m -o root -g hadoop',
+                              path = ['/usr/libexec/hdp/ganglia',
+                                      '/usr/sbin',
+                                      '/sbin:/usr/local/bin',
+                                      '/bin',
+                                      '/usr/bin'],
+                              )
+    self.assertResourceCalled('Execute', '/usr/libexec/hdp/ganglia/setupGanglia.sh -c HDPHBaseMaster -m -o root -g hadoop',
+                              path = ['/usr/libexec/hdp/ganglia',
+                                      '/usr/sbin',
+                                      '/sbin:/usr/local/bin',
+                                      '/bin',
+                                      '/usr/bin'],
+                              )
+    self.assertResourceCalled('Execute', '/usr/libexec/hdp/ganglia/setupGanglia.sh -c HDPHistoryServer -m -o root -g hadoop',
+                              path = ['/usr/libexec/hdp/ganglia',
+                                      '/usr/sbin',
+                                      '/sbin:/usr/local/bin',
+                                      '/bin',
+                                      '/usr/bin'],
+                              )
+    self.assertResourceCalled('Execute', '/usr/libexec/hdp/ganglia/setupGanglia.sh -c HDPDataNode -m -o root -g hadoop',
+                              path = ['/usr/libexec/hdp/ganglia',
+                                      '/usr/sbin',
+                                      '/sbin:/usr/local/bin',
+                                      '/bin',
+                                      '/usr/bin'],
+                              )
+    self.assertResourceCalled('Execute', '/usr/libexec/hdp/ganglia/setupGanglia.sh -c HDPTaskTracker -m -o root -g hadoop',
+                              path = ['/usr/libexec/hdp/ganglia',
+                                      '/usr/sbin',
+                                      '/sbin:/usr/local/bin',
+                                      '/bin',
+                                      '/usr/bin'],
+                              )
+    self.assertResourceCalled('Execute', '/usr/libexec/hdp/ganglia/setupGanglia.sh -c HDPHBaseRegionServer -m -o root -g hadoop',
+                              path = ['/usr/libexec/hdp/ganglia',
+                                      '/usr/sbin',
+                                      '/sbin:/usr/local/bin',
+                                      '/bin',
+                                      '/usr/bin'],
+                              )
+    self.assertResourceCalled('Execute', '/usr/libexec/hdp/ganglia/setupGanglia.sh -t -o root -g hadoop',
+                              path = ['/usr/libexec/hdp/ganglia',
+                                      '/usr/sbin',
+                                      '/sbin:/usr/local/bin',
+                                      '/bin',
+                                      '/usr/bin'],
+                              )
+    self.assertResourceCalled('Directory', '/var/lib/ganglia/dwoo',
+                              owner = 'nobody',
+                              recursive = True,
+                              mode = 0777,
+                              )
+    self.assertResourceCalled('Directory', '/srv/www/cgi-bin',
+                              recursive = True,
+                              )
+    self.assertResourceCalled('File', '/srv/www/cgi-bin/rrd.py',
+                              content = StaticFile('rrd.py'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('File', '/etc/ganglia/gmetad.conf',
+                              owner = 'root',
+                              group = 'hadoop',
+                              )
+    self.assertNoMoreResources()
+
+  def test_start_default(self):
+    self.executeScript("1.3.3/services/GANGLIA/package/scripts/ganglia_server.py",
+                       classname="GangliaServer",
+                       command="start",
+                       config_file="default.json"
+    )
+    self.assertResourceCalled('Execute', 'service hdp-gmetad start >> /tmp/gmetad.log  2>&1 ; /bin/ps auwx | /bin/grep [g]metad  >> /tmp/gmetad.log  2>&1',
+                              path = ['/usr/sbin:/sbin:/usr/local/bin:/bin:/usr/bin'],
+                              )
+    self.assertResourceCalled('MonitorWebserver', 'restart',
+                              )
+    self.assertNoMoreResources()
+
+  def test_stop_default(self):
+    self.executeScript("1.3.3/services/GANGLIA/package/scripts/ganglia_server.py",
+                       classname="GangliaServer",
+                       command="stop",
+                       config_file="default.json"
+    )
+    self.assertResourceCalled('Execute', 'service hdp-gmetad stop >> /tmp/gmetad.log  2>&1 ; /bin/ps auwx | /bin/grep [g]metad  >> /tmp/gmetad.log  2>&1',
+                              path = ['/usr/sbin:/sbin:/usr/local/bin:/bin:/usr/bin'],
+                              )
+    self.assertResourceCalled('MonitorWebserver', 'restart',
+                              )
+    self.assertNoMoreResources()
+

http://git-wip-us.apache.org/repos/asf/ambari/blob/bc102b32/ambari-server/src/test/python/stacks/1.3.3/SQOOP/test_service_check.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/1.3.3/SQOOP/test_service_check.py b/ambari-server/src/test/python/stacks/1.3.3/SQOOP/test_service_check.py
new file mode 100644
index 0000000..87bc826
--- /dev/null
+++ b/ambari-server/src/test/python/stacks/1.3.3/SQOOP/test_service_check.py
@@ -0,0 +1,48 @@
+#!/usr/bin/env python
+
+'''
+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.
+'''
+from mock.mock import MagicMock, call, patch
+from stacks.utils.RMFTestCase import *
+
+class TestSqoopServiceCheck(RMFTestCase):
+
+  def test_service_check_secured(self):
+    self.executeScript("1.3.3/services/SQOOP/package/scripts/service_check.py",
+                       classname = "SqoopServiceCheck",
+                       command = "service_check",
+                       config_file="secured.json")
+    self.assertResourceCalled('Execute', '/usr/bin/kinit  -kt /etc/security/keytabs/smokeuser.headless.keytab ambari-qa',)
+    self.assertResourceCalled('Execute', 'sqoop version',
+                              logoutput = True,
+                              user = 'ambari-qa',)
+    self.assertNoMoreResources()
+
+  def test_service_check_default(self):
+    self.executeScript("1.3.3/services/SQOOP/package/scripts/service_check.py",
+                         classname = "SqoopServiceCheck",
+                         command = "service_check",
+                         config_file="default.json")
+    self.assertResourceCalled('Execute', 'sqoop version',
+                              logoutput = True,
+                              user = 'ambari-qa',)
+    self.assertNoMoreResources()
+
+
+
+

http://git-wip-us.apache.org/repos/asf/ambari/blob/bc102b32/ambari-server/src/test/python/stacks/1.3.3/SQOOP/test_sqoop.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/1.3.3/SQOOP/test_sqoop.py b/ambari-server/src/test/python/stacks/1.3.3/SQOOP/test_sqoop.py
new file mode 100644
index 0000000..92c0d17
--- /dev/null
+++ b/ambari-server/src/test/python/stacks/1.3.3/SQOOP/test_sqoop.py
@@ -0,0 +1,52 @@
+#!/usr/bin/env python
+
+'''
+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.
+'''
+from mock.mock import MagicMock, call, patch
+from stacks.utils.RMFTestCase import *
+
+class TestSqoop(RMFTestCase):
+
+  def test_configure_default(self):
+    self.executeScript("1.3.3/services/SQOOP/package/scripts/sqoop_client.py",
+                       classname = "SqoopClient",
+                       command = "configure",
+                       config_file="default.json"
+    )
+    self.assertResourceCalled('Link', '/usr/lib/sqoop/lib/mysql-connector-java.jar',
+                              to = '/usr/share/java/mysql-connector-java.jar',)
+    self.assertResourceCalled('Directory', '/usr/lib/sqoop/conf',
+                              owner = 'sqoop',
+                              group = 'hadoop',)
+    self.assertResourceCalled('TemplateConfig', '/usr/lib/sqoop/conf/sqoop-env.sh',
+                              owner = 'sqoop',
+                              template_tag = None,)
+    self.assertResourceCalled('File', '/usr/lib/sqoop/conf/sqoop-env-template.sh',
+                              owner = 'sqoop',
+                              group = 'hadoop',)
+    self.assertResourceCalled('File', '/usr/lib/sqoop/conf/sqoop-site-template.xml',
+                              owner = 'sqoop',
+                              group = 'hadoop',)
+    self.assertResourceCalled('File', '/usr/lib/sqoop/conf/sqoop-site.xml',
+                              owner = 'sqoop',
+                              group = 'hadoop',)
+    self.assertNoMoreResources()
+
+
+
+

http://git-wip-us.apache.org/repos/asf/ambari/blob/bc102b32/ambari-server/src/test/python/stacks/1.3.3/hooks/before-INSTALL/test_before_install.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/1.3.3/hooks/before-INSTALL/test_before_install.py b/ambari-server/src/test/python/stacks/1.3.3/hooks/before-INSTALL/test_before_install.py
new file mode 100644
index 0000000..4b385bb
--- /dev/null
+++ b/ambari-server/src/test/python/stacks/1.3.3/hooks/before-INSTALL/test_before_install.py
@@ -0,0 +1,78 @@
+#!/usr/bin/env python
+
+'''
+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.
+'''
+
+from stacks.utils.RMFTestCase import *
+
+
+class TestHookBeforeInstall(RMFTestCase):
+  def test_hook_default(self):
+    self.executeScript("1.3.3/hooks/before-INSTALL/scripts/hook.py",
+                       classname="BeforeConfigureHook",
+                       command="hook",
+                       config_file="default.json"
+    )
+    self.assertResourceCalled('Group', 'hadoop',)
+    self.assertResourceCalled('Group', 'users',)
+    self.assertResourceCalled('Group', 'users',)
+    self.assertResourceCalled('User', 'ambari-qa',
+                              gid='hadoop',
+                              groups=[u'users'],)
+    self.assertResourceCalled('File', '/tmp/changeUid.sh',
+                              content=StaticFile('changeToSecureUid.sh'),
+                              mode=0555,)
+    self.assertResourceCalled('Execute',
+                              '/tmp/changeUid.sh ambari-qa /tmp/hadoop-ambari-qa,/tmp/hsperfdata_ambari-qa,/home/ambari-qa,/tmp/ambari-qa,/tmp/sqoop-ambari-qa 2>/dev/null',
+                              not_if='test $(id -u ambari-qa) -gt 1000',)
+    self.assertResourceCalled('User', 'hbase',
+                              gid='hadoop',
+                              groups=[u'hadoop'],)
+    self.assertResourceCalled('File', '/tmp/changeUid.sh',
+                              content=StaticFile('changeToSecureUid.sh'),
+                              mode=0555,)
+    self.assertResourceCalled('Execute',
+                              '/tmp/changeUid.sh hbase /home/hbase,/tmp/hbase,/usr/bin/hbase,/var/log/hbase,/hadoop/hbase 2>/dev/null',
+                              not_if='test $(id -u hbase) -gt 1000',)
+    self.assertResourceCalled('Group', 'nagios',)
+    self.assertResourceCalled('User', 'nagios', gid='nagios',)
+    self.assertResourceCalled('User', 'oozie', gid='hadoop',)
+    self.assertResourceCalled('User', 'hcat', gid='hadoop',)
+    self.assertResourceCalled('User', 'hcat', gid='hadoop',)
+    self.assertResourceCalled('User', 'hive',
+                              gid='hadoop',)
+    self.assertResourceCalled('Group', 'nobody',)
+    self.assertResourceCalled('Group', 'nobody',)
+    self.assertResourceCalled('User', 'nobody',
+                              gid='hadoop',
+                              groups=[u'nobody'],)
+    self.assertResourceCalled('User', 'nobody',
+                              gid='hadoop',
+                              groups=[u'nobody'],)
+    self.assertResourceCalled('User', 'hdfs',
+                              gid='hadoop',
+                              groups=[u'hadoop'],)
+    self.assertResourceCalled('User', 'mapred',
+                              gid='hadoop',
+                              groups=[u'hadoop'],)
+    self.assertResourceCalled('User', 'zookeeper',
+                              gid='hadoop',)
+    self.assertResourceCalled('Package', 'unzip',)
+    self.assertResourceCalled('Package', 'net-snmp',)
+    self.assertResourceCalled('Package', 'net-snmp-utils',)
+    self.assertNoMoreResources()

http://git-wip-us.apache.org/repos/asf/ambari/blob/bc102b32/ambari-server/src/test/python/stacks/1.3.3/hooks/before-START/test_before_start.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/1.3.3/hooks/before-START/test_before_start.py b/ambari-server/src/test/python/stacks/1.3.3/hooks/before-START/test_before_start.py
new file mode 100644
index 0000000..6829655
--- /dev/null
+++ b/ambari-server/src/test/python/stacks/1.3.3/hooks/before-START/test_before_start.py
@@ -0,0 +1,150 @@
+#!/usr/bin/env python
+
+'''
+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.
+'''
+
+from stacks.utils.RMFTestCase import *
+
+class TestHookBeforeStart(RMFTestCase):
+  def test_hook_default(self):
+    self.executeScript("1.3.3/hooks/before-START/scripts/hook.py",
+                       classname="BeforeConfigureHook",
+                       command="hook",
+                       config_file="default.json"
+    )
+    self.assertResourceCalled('Execute', 'mkdir -p /tmp/HDP-artifacts/ ; curl -kf --retry 10 http://c6401.ambari.apache.org:8080/resources//jdk-7u45-linux-x64.tar.gz -o /tmp/HDP-artifacts//jdk-7u45-linux-x64.tar.gz',
+                              not_if = 'test -e /usr/jdk64/jdk1.7.0_45/bin/java',
+                              path = ['/bin', '/usr/bin/'],
+                              )
+    self.assertResourceCalled('Execute', 'mkdir -p /usr/jdk64 ; cd /usr/jdk64 ; tar -xf /tmp/HDP-artifacts//jdk-7u45-linux-x64.tar.gz > /dev/null 2>&1',
+                              not_if = 'test -e /usr/jdk64/jdk1.7.0_45/bin/java',
+                              path = ['/bin', '/usr/bin/'],
+                              )
+    self.assertResourceCalled('Execute', 'mkdir -p /tmp/HDP-artifacts/; curl -kf --retry 10 http://c6401.ambari.apache.org:8080/resources//UnlimitedJCEPolicyJDK7.zip -o /tmp/HDP-artifacts//UnlimitedJCEPolicyJDK7.zip',
+                              not_if = 'test -e /tmp/HDP-artifacts//UnlimitedJCEPolicyJDK7.zip',
+                              ignore_failures = True,
+                              path = ['/bin', '/usr/bin/'],
+                              )
+    self.assertResourceCalled('File', '/etc/snmp/snmpd.conf',
+                              content = Template('snmpd.conf.j2'),
+                              )
+    self.assertResourceCalled('Service', 'snmpd',
+                              action = ['restart'],
+                              )
+    self.assertResourceCalled('Execute', '/bin/echo 0 > /selinux/enforce',
+                              only_if = 'test -f /selinux/enforce',
+                              )
+    self.assertResourceCalled('Execute', 'mkdir -p /usr/lib/hadoop/lib/native/Linux-i386-32; ln -sf /usr/lib/libsnappy.so /usr/lib/hadoop/lib/native/Linux-i386-32/libsnappy.so',
+                              )
+    self.assertResourceCalled('Execute', 'mkdir -p /usr/lib/hadoop/lib/native/Linux-amd64-64; ln -sf /usr/lib64/libsnappy.so /usr/lib/hadoop/lib/native/Linux-amd64-64/libsnappy.so',
+                              )
+    self.assertResourceCalled('Directory', '/etc/hadoop/conf',
+                              owner = 'root',
+                              group = 'root',
+                              recursive = True,
+                              )
+    self.assertResourceCalled('Directory', '/var/log/hadoop',
+                              owner = 'root',
+                              group = 'root',
+                              recursive = True,
+                              )
+    self.assertResourceCalled('Directory', '/var/run/hadoop',
+                              owner = 'root',
+                              group = 'root',
+                              recursive = True,
+                              )
+    self.assertResourceCalled('File', '/etc/security/limits.d/hdfs.conf',
+                              content = Template('hdfs.conf.j2'),
+                              owner = 'root',
+                              group = 'root',
+                              mode = 0644,
+                              )
+    self.assertResourceCalled('File', '/etc/hadoop/conf/taskcontroller.cfg',
+                              content = Template('taskcontroller.cfg.j2'),
+                              owner = 'hdfs',
+                              )
+    self.assertResourceCalled('File', '/etc/hadoop/conf/hadoop-env.sh',
+                              content = Template('hadoop-env.sh.j2'),
+                              owner = 'hdfs',
+                              )
+    self.assertResourceCalled('File', '/etc/hadoop/conf/commons-logging.properties',
+                              content = Template('commons-logging.properties.j2'),
+                              owner = 'hdfs',
+                              )
+    self.assertResourceCalled('File', '/etc/hadoop/conf/slaves',
+                              content = Template('slaves.j2'),
+                              owner = 'hdfs',
+                              )
+    self.assertResourceCalled('File', '/etc/hadoop/conf/health_check',
+                              content = Template('health_check.j2'),
+                              owner = 'hdfs',
+                              )
+    self.assertResourceCalled('Execute', "sed -i 's~\\(###\\)\\?ambari.jobhistory.driver=.*~ambari.jobhistory.driver=org.postgresql.Driver~' /etc/hadoop/conf/log4j.properties",
+                              )
+    self.assertResourceCalled('Execute', "sed -i 's~\\(###\\)\\?log4j.appender.JHA=.*~log4j.appender.JHA=org.apache.ambari.log4j.hadoop.mapreduce.jobhistory.JobHistoryAppender~' /etc/hadoop/conf/log4j.properties",
+                              )
+    self.assertResourceCalled('Execute', "sed -i 's~\\(###\\)\\?log4j.appender.JHA.driver=.*~log4j.appender.JHA.driver=${ambari.jobhistory.driver}~' /etc/hadoop/conf/log4j.properties",
+                              )
+    self.assertResourceCalled('Execute', "sed -i 's~\\(###\\)\\?log4j.appender.JHA.database=.*~log4j.appender.JHA.database=${ambari.jobhistory.database}~' /etc/hadoop/conf/log4j.properties",
+                              )
+    self.assertResourceCalled('Execute', "sed -i 's~\\(###\\)\\?ambari.jobhistory.logger=.*~ambari.jobhistory.logger=DEBUG,JHA~' /etc/hadoop/conf/log4j.properties",
+                              )
+    self.assertResourceCalled('Execute', "sed -i 's~\\(###\\)\\?log4j.appender.JHA.password=.*~log4j.appender.JHA.password=${ambari.jobhistory.password}~' /etc/hadoop/conf/log4j.properties",
+                              )
+    self.assertResourceCalled('Execute', "sed -i 's~\\(###\\)\\?ambari.jobhistory.database=.*~ambari.jobhistory.database=jdbc:postgresql://c6401.ambari.apache.org/ambarirca~' /etc/hadoop/conf/log4j.properties",
+                              )
+    self.assertResourceCalled('Execute', "sed -i 's~\\(###\\)\\?log4j.additivity.org.apache.hadoop.mapred.JobHistory$JobHistoryLogger=.*~log4j.additivity.org.apache.hadoop.mapred.JobHistory$JobHistoryLogger=true~' /etc/hadoop/conf/log4j.properties",
+                              )
+    self.assertResourceCalled('Execute', "sed -i 's~\\(###\\)\\?log4j.logger.org.apache.hadoop.mapred.JobHistory$JobHistoryLogger=.*~log4j.logger.org.apache.hadoop.mapred.JobHistory$JobHistoryLogger=${ambari.jobhistory.logger}~' /etc/hadoop/conf/log4j.properties",
+                              )
+    self.assertResourceCalled('Execute', "sed -i 's~\\(###\\)\\?log4j.appender.JHA.user=.*~log4j.appender.JHA.user=${ambari.jobhistory.user}~' /etc/hadoop/conf/log4j.properties",
+                              )
+    self.assertResourceCalled('Execute', "sed -i 's~\\(###\\)\\?ambari.jobhistory.user=.*~ambari.jobhistory.user=mapred~' /etc/hadoop/conf/log4j.properties",
+                              )
+    self.assertResourceCalled('Execute', "sed -i 's~\\(###\\)\\?ambari.jobhistory.password=.*~ambari.jobhistory.password=mapred~' /etc/hadoop/conf/log4j.properties",
+                              )
+    self.assertResourceCalled('File', '/etc/hadoop/conf/hadoop-metrics2.properties',
+                              content = Template('hadoop-metrics2.properties.j2'),
+                              owner = 'hdfs',
+                              )
+    self.assertResourceCalled('XmlConfig', 'core-site.xml',
+                              owner = 'hdfs',
+                              group = 'hadoop',
+                              conf_dir = '/etc/hadoop/conf',
+                              configurations = self.getConfig()['configurations']['core-site'],
+                              )
+    self.assertResourceCalled('XmlConfig', 'mapred-site.xml',
+                              owner = 'mapred',
+                              group = 'hadoop',
+                              conf_dir = '/etc/hadoop/conf',
+                              configurations = self.getConfig()['configurations']['mapred-site'],
+                              )
+    self.assertResourceCalled('File', '/etc/hadoop/conf/task-log4j.properties',
+                              content = StaticFile('task-log4j.properties'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('XmlConfig', 'hdfs-site.xml',
+                              owner = 'hdfs',
+                              group = 'hadoop',
+                              conf_dir = '/etc/hadoop/conf',
+                              configurations = self.getConfig()['configurations']['hdfs-site'],
+                              )
+    self.assertResourceCalled('Link', '/usr/lib/hadoop/lib/hadoop-tools.jar',
+                              to = '/usr/lib/hadoop/hadoop-tools.jar',
+                              )
+    self.assertNoMoreResources()

http://git-wip-us.apache.org/repos/asf/ambari/blob/bc102b32/ambari-server/src/test/python/stacks/2.1.1/FALCON/test_falcon_client.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.1.1/FALCON/test_falcon_client.py b/ambari-server/src/test/python/stacks/2.1.1/FALCON/test_falcon_client.py
new file mode 100644
index 0000000..6d9eaae
--- /dev/null
+++ b/ambari-server/src/test/python/stacks/2.1.1/FALCON/test_falcon_client.py
@@ -0,0 +1,38 @@
+#!/usr/bin/env python
+
+'''
+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.
+'''
+
+from stacks.utils.RMFTestCase import *
+
+
+class TestFalconClient(RMFTestCase):
+  def test_configure_default(self):
+    self.executeScript("2.1.1/services/FALCON/package/scripts/falcon_client.py",
+                       classname="FalconClient",
+                       command="configure",
+                       config_file="default.json"
+    )
+    self.assertResourceCalled('Execute',
+                              'cd /tmp; rm -f falcon-0.4.0.2.0.6.0-76.el6.noarch.rpm; wget http://public-repo-1.hortonworks.com/HDP-LABS/Projects/Falcon/2.0.6.0-76/rpm/falcon-0.4.0.2.0.6.0-76.el6.noarch.rpm; rpm -Uvh --nodeps falcon-0.4.0.2.0.6.0-76.el6.noarch.rpm',
+                              not_if='yum list installed | grep falcon', )
+
+    self.assertResourceCalled('File', '/etc/falcon/conf/client.properties',
+                              content=Template('client.properties.j2'),
+                              mode=0644, )
+    self.assertNoMoreResources()

http://git-wip-us.apache.org/repos/asf/ambari/blob/bc102b32/ambari-server/src/test/python/stacks/2.1.1/FALCON/test_falcon_server.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.1.1/FALCON/test_falcon_server.py b/ambari-server/src/test/python/stacks/2.1.1/FALCON/test_falcon_server.py
new file mode 100644
index 0000000..bcf3674
--- /dev/null
+++ b/ambari-server/src/test/python/stacks/2.1.1/FALCON/test_falcon_server.py
@@ -0,0 +1,94 @@
+#!/usr/bin/env python
+
+'''
+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.
+'''
+
+from stacks.utils.RMFTestCase import *
+
+
+class TestFalconServer(RMFTestCase):
+
+  def test_start_default(self):
+    self.executeScript("2.1.1/services/FALCON/package/scripts/falcon_server.py",
+                       classname="FalconServer",
+                       command="start",
+                       config_file="default.json"
+    )
+    self.assertResourceCalled('Execute',
+                              'cd /tmp; rm -f falcon-0.4.0.2.0.6.0-76.el6.noarch.rpm; wget http://public-repo-1.hortonworks.com/HDP-LABS/Projects/Falcon/2.0.6.0-76/rpm/falcon-0.4.0.2.0.6.0-76.el6.noarch.rpm; rpm -Uvh --nodeps falcon-0.4.0.2.0.6.0-76.el6.noarch.rpm',
+                              not_if='yum list installed | grep falcon', )
+    self.assertResourceCalled('Directory',
+                              '/hadoop/falcon',
+                              owner='falcon',
+                              recursive=True, )
+    self.assertResourceCalled('Directory', '/hadoop/falcon/activemq',
+                              owner='falcon',
+                              recursive=True, )
+    self.assertResourceCalled('File', '/etc/falcon/conf/runtime.properties',
+                              content=Template('runtime.properties.j2'),
+                              mode=0644, )
+    self.assertResourceCalled('File', '/etc/falcon/conf/startup.properties',
+                              content=Template('startup.properties.j2'),
+                              mode=0644, )
+    self.assertResourceCalled('Execute',
+                              'cd /tmp; rm -f falcon-0.4.0.2.0.6.0-76.el6.noarch.rpm; wget http://public-repo-1.hortonworks.com/HDP-LABS/Projects/Falcon/2.0.6.0-76/rpm/falcon-0.4.0.2.0.6.0-76.el6.noarch.rpm; rpm -Uvh --nodeps falcon-0.4.0.2.0.6.0-76.el6.noarch.rpm',
+                              not_if='yum list installed | grep falcon', )
+    self.assertResourceCalled('Execute',
+                              'env JAVA_HOME=/usr/jdk64/jdk1.7.0_45 FALCON_LOG_DIR=/var/log/falcon FALCON_PID_DIR=/var/run/falcon FALCON_DATA_DIR=/hadoop/falcon/activemq /usr/lib/falcon/bin/falcon-start -port 15000',
+                              user='falcon', )
+    self.assertNoMoreResources()
+
+  def test_stop_default(self):
+    self.executeScript("2.1.1/services/FALCON/package/scripts/falcon_server.py",
+                       classname="FalconServer",
+                       command="stop",
+                       config_file="default.json"
+    )
+    self.assertResourceCalled('Execute',
+                          'cd /tmp; rm -f falcon-0.4.0.2.0.6.0-76.el6.noarch.rpm; wget http://public-repo-1.hortonworks.com/HDP-LABS/Projects/Falcon/2.0.6.0-76/rpm/falcon-0.4.0.2.0.6.0-76.el6.noarch.rpm; rpm -Uvh --nodeps falcon-0.4.0.2.0.6.0-76.el6.noarch.rpm',
+                          not_if='yum list installed | grep falcon', )
+    self.assertResourceCalled('Execute',
+                          'env JAVA_HOME=/usr/jdk64/jdk1.7.0_45 FALCON_LOG_DIR=/var/log/falcon FALCON_PID_DIR=/var/run/falcon FALCON_DATA_DIR=/hadoop/falcon/activemq /usr/lib/falcon/bin/falcon-stop',
+                          user='falcon', )
+    self.assertNoMoreResources()
+
+  def test_configure_default(self):
+    self.executeScript("2.1.1/services/FALCON/package/scripts/falcon_server.py",
+                       classname="FalconServer",
+                       command="configure",
+                       config_file="default.json"
+    )
+    self.assertResourceCalled('Execute',
+                              'cd /tmp; rm -f falcon-0.4.0.2.0.6.0-76.el6.noarch.rpm; wget http://public-repo-1.hortonworks.com/HDP-LABS/Projects/Falcon/2.0.6.0-76/rpm/falcon-0.4.0.2.0.6.0-76.el6.noarch.rpm; rpm -Uvh --nodeps falcon-0.4.0.2.0.6.0-76.el6.noarch.rpm',
+                              not_if='yum list installed | grep falcon', )
+    self.assertResourceCalled('Directory',
+                              '/hadoop/falcon',
+                              owner='falcon',
+                              recursive=True, )
+    self.assertResourceCalled('Directory', '/hadoop/falcon/activemq',
+                              owner='falcon',
+                              recursive=True, )
+    self.assertResourceCalled('File', '/etc/falcon/conf/runtime.properties',
+                              content=Template('runtime.properties.j2'),
+                              mode=0644, )
+    self.assertResourceCalled('File', '/etc/falcon/conf/startup.properties',
+                              content=Template('startup.properties.j2'),
+                              mode=0644, )
+    self.assertNoMoreResources()
+
+

http://git-wip-us.apache.org/repos/asf/ambari/blob/bc102b32/ambari-server/src/test/python/stacks/2.1.1/FALCON/test_service_check.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.1.1/FALCON/test_service_check.py b/ambari-server/src/test/python/stacks/2.1.1/FALCON/test_service_check.py
new file mode 100644
index 0000000..9ae6f67
--- /dev/null
+++ b/ambari-server/src/test/python/stacks/2.1.1/FALCON/test_service_check.py
@@ -0,0 +1,42 @@
+#!/usr/bin/env python
+
+'''
+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.
+'''
+
+from stacks.utils.RMFTestCase import *
+
+
+class TestFalconServer(RMFTestCase):
+
+  def test_service_check(self):
+    self.executeScript("2.1.1/services/FALCON/package/scripts/service_check.py",
+                       classname="FalconServiceCheck",
+                       command="service_check",
+                       config_file="default.json"
+    )
+    self.assertResourceCalled('Execute', 'env '
+                                         'JAVA_HOME=/usr/jdk64/jdk1.7.0_45 FALCON_LOG_DIR=/var/log/falcon '
+                                         'FALCON_PID_DIR=/var/run/falcon '
+                                         'FALCON_DATA_DIR=/hadoop/falcon/activemq '
+                                         '/usr/lib/falcon/bin/falcon admin -version',
+                              logoutput = True,
+                              tries = 3,
+                              user = 'ambari-qa',
+                              try_sleep = 20,)
+    self.assertNoMoreResources()
+

http://git-wip-us.apache.org/repos/asf/ambari/blob/bc102b32/ambari-server/src/test/python/stacks/2.1.1/GANGLIA/test_ganglia_monitor.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.1.1/GANGLIA/test_ganglia_monitor.py b/ambari-server/src/test/python/stacks/2.1.1/GANGLIA/test_ganglia_monitor.py
new file mode 100644
index 0000000..ee2f735
--- /dev/null
+++ b/ambari-server/src/test/python/stacks/2.1.1/GANGLIA/test_ganglia_monitor.py
@@ -0,0 +1,169 @@
+#!/usr/bin/env python
+
+'''
+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.
+'''
+
+from stacks.utils.RMFTestCase import *
+
+
+class TestGangliaMonitor(RMFTestCase):
+
+  def test_configure_default(self):
+    self.executeScript("2.1.1/services/GANGLIA/package/scripts/ganglia_monitor.py",
+                       classname="GangliaMonitor",
+                       command="configure",
+                       config_file="default.json"
+                      )
+    self.assertResourceCalled('Directory', '/etc/ganglia/hdp',
+                              owner = 'root',
+                              group = 'hadoop',
+                              recursive = True,
+                              )
+    self.assertResourceCalled('Directory', '/usr/libexec/hdp/ganglia',
+                              owner = 'root',
+                              group = 'root',
+                              recursive = True,
+                              )
+    self.assertResourceCalled('File', '/etc/init.d/hdp-gmetad',
+                              content = StaticFile('gmetad.init'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('File', '/etc/init.d/hdp-gmond',
+                              content = StaticFile('gmond.init'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('File', '/usr/libexec/hdp/ganglia/checkGmond.sh',
+                              content = StaticFile('checkGmond.sh'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('File', '/usr/libexec/hdp/ganglia/checkRrdcached.sh',
+                              content = StaticFile('checkRrdcached.sh'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('File', '/usr/libexec/hdp/ganglia/gmetadLib.sh',
+                              content = StaticFile('gmetadLib.sh'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('File', '/usr/libexec/hdp/ganglia/gmondLib.sh',
+                              content = StaticFile('gmondLib.sh'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('File', '/usr/libexec/hdp/ganglia/rrdcachedLib.sh',
+                              content = StaticFile('rrdcachedLib.sh'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('File', '/usr/libexec/hdp/ganglia/setupGanglia.sh',
+                              content = StaticFile('setupGanglia.sh'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('File', '/usr/libexec/hdp/ganglia/startGmetad.sh',
+                              content = StaticFile('startGmetad.sh'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('File', '/usr/libexec/hdp/ganglia/startGmond.sh',
+                              content = StaticFile('startGmond.sh'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('File', '/usr/libexec/hdp/ganglia/startRrdcached.sh',
+                              content = StaticFile('startRrdcached.sh'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('File', '/usr/libexec/hdp/ganglia/stopGmetad.sh',
+                              content = StaticFile('stopGmetad.sh'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('File', '/usr/libexec/hdp/ganglia/stopGmond.sh',
+                              content = StaticFile('stopGmond.sh'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('File', '/usr/libexec/hdp/ganglia/stopRrdcached.sh',
+                              content = StaticFile('stopRrdcached.sh'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('File', '/usr/libexec/hdp/ganglia/teardownGanglia.sh',
+                              content = StaticFile('teardownGanglia.sh'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('TemplateConfig', '/usr/libexec/hdp/ganglia/gangliaClusters.conf',
+                              owner = 'root',
+                              template_tag = None,
+                              group = 'root',
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('TemplateConfig', '/usr/libexec/hdp/ganglia/gangliaEnv.sh',
+                              owner = 'root',
+                              template_tag = None,
+                              group = 'root',
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('TemplateConfig', '/usr/libexec/hdp/ganglia/gangliaLib.sh',
+                              owner = 'root',
+                              template_tag = None,
+                              group = 'root',
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('Execute', '/usr/libexec/hdp/ganglia/setupGanglia.sh -c HDPNameNode -o root -g hadoop',
+                              path = ['/usr/libexec/hdp/ganglia',
+                                      '/usr/sbin',
+                                      '/sbin:/usr/local/bin',
+                                      '/bin',
+                                      '/usr/bin'],
+                              )
+    self.assertResourceCalled('Directory', '/etc/ganglia/conf.d',
+                              owner = 'root',
+                              group = 'hadoop',
+                              )
+    self.assertResourceCalled('File', '/etc/ganglia/conf.d/modgstatus.conf',
+                              owner = 'root',
+                              group = 'hadoop',
+                              )
+    self.assertResourceCalled('File', '/etc/ganglia/conf.d/multicpu.conf',
+                              owner = 'root',
+                              group = 'hadoop',
+                              )
+    self.assertResourceCalled('File', '/etc/ganglia/gmond.conf',
+                              owner = 'root',
+                              group = 'hadoop',
+                              )
+    self.assertNoMoreResources()
+
+  def test_start_default(self):
+    self.executeScript("2.1.1/services/GANGLIA/package/scripts/ganglia_monitor.py",
+                       classname="GangliaMonitor",
+                       command="start",
+                       config_file="default.json"
+    )
+    self.assertResourceCalled('Execute', 'chkconfig gmond off',
+                              path = ['/usr/sbin:/sbin:/usr/local/bin:/bin:/usr/bin'],
+                              )
+    self.assertResourceCalled('Execute', 'service hdp-gmond start >> /tmp/gmond.log  2>&1 ; /bin/ps auwx | /bin/grep [g]mond  >> /tmp/gmond.log  2>&1',
+                              path = ['/usr/sbin:/sbin:/usr/local/bin:/bin:/usr/bin'],
+                              )
+    self.assertNoMoreResources()
+
+  def test_stop_default(self):
+    self.executeScript("2.1.1/services/GANGLIA/package/scripts/ganglia_monitor.py",
+                       classname="GangliaMonitor",
+                       command="stop",
+                       config_file="default.json"
+    )
+    self.assertResourceCalled('Execute', 'service hdp-gmond stop >> /tmp/gmond.log  2>&1 ; /bin/ps auwx | /bin/grep [g]mond  >> /tmp/gmond.log  2>&1',
+                              path = ['/usr/sbin:/sbin:/usr/local/bin:/bin:/usr/bin'],
+                              )
+    self.assertNoMoreResources()
+

http://git-wip-us.apache.org/repos/asf/ambari/blob/bc102b32/ambari-server/src/test/python/stacks/2.1.1/GANGLIA/test_ganglia_server.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.1.1/GANGLIA/test_ganglia_server.py b/ambari-server/src/test/python/stacks/2.1.1/GANGLIA/test_ganglia_server.py
new file mode 100644
index 0000000..fc792ef
--- /dev/null
+++ b/ambari-server/src/test/python/stacks/2.1.1/GANGLIA/test_ganglia_server.py
@@ -0,0 +1,214 @@
+#!/usr/bin/env python
+
+'''
+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.
+'''
+
+from stacks.utils.RMFTestCase import *
+
+
+class TestGangliaServer(RMFTestCase):
+
+  def test_configure_default(self):
+    self.executeScript("2.1.1/services/GANGLIA/package/scripts/ganglia_server.py",
+                       classname="GangliaServer",
+                       command="configure",
+                       config_file="default.json"
+    )
+    self.assertResourceCalled('Directory', '/usr/libexec/hdp/ganglia',
+                              owner = 'root',
+                              group = 'root',
+                              recursive = True,
+                              )
+    self.assertResourceCalled('File', '/etc/init.d/hdp-gmetad',
+                              content = StaticFile('gmetad.init'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('File', '/etc/init.d/hdp-gmond',
+                              content = StaticFile('gmond.init'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('File', '/usr/libexec/hdp/ganglia/checkGmond.sh',
+                              content = StaticFile('checkGmond.sh'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('File', '/usr/libexec/hdp/ganglia/checkRrdcached.sh',
+                              content = StaticFile('checkRrdcached.sh'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('File', '/usr/libexec/hdp/ganglia/gmetadLib.sh',
+                              content = StaticFile('gmetadLib.sh'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('File', '/usr/libexec/hdp/ganglia/gmondLib.sh',
+                              content = StaticFile('gmondLib.sh'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('File', '/usr/libexec/hdp/ganglia/rrdcachedLib.sh',
+                              content = StaticFile('rrdcachedLib.sh'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('File', '/usr/libexec/hdp/ganglia/setupGanglia.sh',
+                              content = StaticFile('setupGanglia.sh'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('File', '/usr/libexec/hdp/ganglia/startGmetad.sh',
+                              content = StaticFile('startGmetad.sh'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('File', '/usr/libexec/hdp/ganglia/startGmond.sh',
+                              content = StaticFile('startGmond.sh'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('File', '/usr/libexec/hdp/ganglia/startRrdcached.sh',
+                              content = StaticFile('startRrdcached.sh'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('File', '/usr/libexec/hdp/ganglia/stopGmetad.sh',
+                              content = StaticFile('stopGmetad.sh'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('File', '/usr/libexec/hdp/ganglia/stopGmond.sh',
+                              content = StaticFile('stopGmond.sh'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('File', '/usr/libexec/hdp/ganglia/stopRrdcached.sh',
+                              content = StaticFile('stopRrdcached.sh'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('File', '/usr/libexec/hdp/ganglia/teardownGanglia.sh',
+                              content = StaticFile('teardownGanglia.sh'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('TemplateConfig', '/usr/libexec/hdp/ganglia/gangliaClusters.conf',
+                              owner = 'root',
+                              template_tag = None,
+                              group = 'root',
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('TemplateConfig', '/usr/libexec/hdp/ganglia/gangliaEnv.sh',
+                              owner = 'root',
+                              template_tag = None,
+                              group = 'root',
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('TemplateConfig', '/usr/libexec/hdp/ganglia/gangliaLib.sh',
+                              owner = 'root',
+                              template_tag = None,
+                              group = 'root',
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('Execute', '/usr/libexec/hdp/ganglia/setupGanglia.sh -c HDPNameNode -m -o root -g hadoop',
+                              path = ['/usr/libexec/hdp/ganglia',
+                                      '/usr/sbin',
+                                      '/sbin:/usr/local/bin',
+                                      '/bin',
+                                      '/usr/bin'],
+                              )
+    self.assertResourceCalled('Execute', '/usr/libexec/hdp/ganglia/setupGanglia.sh -c HDPHBaseMaster -m -o root -g hadoop',
+                              path = ['/usr/libexec/hdp/ganglia',
+                                      '/usr/sbin',
+                                      '/sbin:/usr/local/bin',
+                                      '/bin',
+                                      '/usr/bin'],
+                              )
+    self.assertResourceCalled('Execute', '/usr/libexec/hdp/ganglia/setupGanglia.sh -c HDPResourceManager -m -o root -g hadoop',
+                              path = ['/usr/libexec/hdp/ganglia',
+                                      '/usr/sbin',
+                                      '/sbin:/usr/local/bin',
+                                      '/bin',
+                                      '/usr/bin'],
+                              )
+    self.assertResourceCalled('Execute', '/usr/libexec/hdp/ganglia/setupGanglia.sh -c HDPNodeManager -m -o root -g hadoop',
+                              path = ['/usr/libexec/hdp/ganglia',
+                                      '/usr/sbin',
+                                      '/sbin:/usr/local/bin',
+                                      '/bin',
+                                      '/usr/bin'],
+                              )
+    self.assertResourceCalled('Execute', '/usr/libexec/hdp/ganglia/setupGanglia.sh -c HDPHistoryServer -m -o root -g hadoop',
+                              path = ['/usr/libexec/hdp/ganglia',
+                                      '/usr/sbin',
+                                      '/sbin:/usr/local/bin',
+                                      '/bin',
+                                      '/usr/bin'],
+                              )
+    self.assertResourceCalled('Execute', '/usr/libexec/hdp/ganglia/setupGanglia.sh -c HDPDataNode -m -o root -g hadoop',
+                              path = ['/usr/libexec/hdp/ganglia',
+                                      '/usr/sbin',
+                                      '/sbin:/usr/local/bin',
+                                      '/bin',
+                                      '/usr/bin'],
+                              )
+    self.assertResourceCalled('Execute', '/usr/libexec/hdp/ganglia/setupGanglia.sh -c HDPHBaseRegionServer -m -o root -g hadoop',
+                              path = ['/usr/libexec/hdp/ganglia',
+                                      '/usr/sbin',
+                                      '/sbin:/usr/local/bin',
+                                      '/bin',
+                                      '/usr/bin'],
+                              )
+    self.assertResourceCalled('Execute', '/usr/libexec/hdp/ganglia/setupGanglia.sh -t -o root -g hadoop',
+                              path = ['/usr/libexec/hdp/ganglia',
+                                      '/usr/sbin',
+                                      '/sbin:/usr/local/bin',
+                                      '/bin',
+                                      '/usr/bin'],
+                              )
+    self.assertResourceCalled('Directory', '/var/lib/ganglia/dwoo',
+                              owner = 'nobody',
+                              recursive = True,
+                              mode = 0777,
+                              )
+    self.assertResourceCalled('Directory', '/srv/www/cgi-bin',
+                              recursive = True,
+                              )
+    self.assertResourceCalled('File', '/srv/www/cgi-bin/rrd.py',
+                              content = StaticFile('rrd.py'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('File', '/etc/ganglia/gmetad.conf',
+                              owner = 'root',
+                              group = 'hadoop',
+                              )
+    self.assertNoMoreResources()
+
+  def test_start_default(self):
+    self.executeScript("2.1.1/services/GANGLIA/package/scripts/ganglia_server.py",
+                       classname="GangliaServer",
+                       command="start",
+                       config_file="default.json"
+    )
+    self.assertResourceCalled('Execute', 'service hdp-gmetad start >> /tmp/gmetad.log  2>&1 ; /bin/ps auwx | /bin/grep [g]metad  >> /tmp/gmetad.log  2>&1',
+                              path = ['/usr/sbin:/sbin:/usr/local/bin:/bin:/usr/bin'],
+                              )
+    self.assertResourceCalled('MonitorWebserver', 'restart',
+                              )
+    self.assertNoMoreResources()
+
+  def test_stop_default(self):
+    self.executeScript("2.1.1/services/GANGLIA/package/scripts/ganglia_server.py",
+                       classname="GangliaServer",
+                       command="stop",
+                       config_file="default.json"
+    )
+    self.assertResourceCalled('Execute', 'service hdp-gmetad stop >> /tmp/gmetad.log  2>&1 ; /bin/ps auwx | /bin/grep [g]metad  >> /tmp/gmetad.log  2>&1',
+                              path = ['/usr/sbin:/sbin:/usr/local/bin:/bin:/usr/bin'],
+                              )
+    self.assertResourceCalled('MonitorWebserver', 'restart',
+                              )
+    self.assertNoMoreResources()
+

http://git-wip-us.apache.org/repos/asf/ambari/blob/bc102b32/ambari-server/src/test/python/stacks/2.1.1/SQOOP/test_service_check.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.1.1/SQOOP/test_service_check.py b/ambari-server/src/test/python/stacks/2.1.1/SQOOP/test_service_check.py
new file mode 100644
index 0000000..c2aec47
--- /dev/null
+++ b/ambari-server/src/test/python/stacks/2.1.1/SQOOP/test_service_check.py
@@ -0,0 +1,50 @@
+#!/usr/bin/env python
+
+'''
+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.
+'''
+from mock.mock import MagicMock, call, patch
+from stacks.utils.RMFTestCase import *
+
+class TestSqoopServiceCheck(RMFTestCase):
+
+  def test_service_check_secured(self):
+    self.executeScript("2.1.1/services/SQOOP/package/scripts/service_check.py",
+                       classname = "SqoopServiceCheck",
+                       command = "service_check",
+                       config_file="secured.json"
+    )
+    self.assertResourceCalled('Execute', '/usr/bin/kinit  -kt /etc/security/keytabs/smokeuser.headless.keytab ambari-qa',)
+    self.assertResourceCalled('Execute', 'sqoop version',
+                              logoutput = True,
+                              user = 'ambari-qa',)
+    self.assertNoMoreResources()
+
+  def test_service_check_default(self):
+    self.executeScript("2.1.1/services/SQOOP/package/scripts/service_check.py",
+                       classname = "SqoopServiceCheck",
+                       command = "service_check",
+                       config_file="default.json"
+    )
+    self.assertResourceCalled('Execute', 'sqoop version',
+                              logoutput = True,
+                              user = 'ambari-qa',)
+    self.assertNoMoreResources()
+
+
+
+

http://git-wip-us.apache.org/repos/asf/ambari/blob/bc102b32/ambari-server/src/test/python/stacks/2.1.1/SQOOP/test_sqoop.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.1.1/SQOOP/test_sqoop.py b/ambari-server/src/test/python/stacks/2.1.1/SQOOP/test_sqoop.py
new file mode 100644
index 0000000..92c0d17
--- /dev/null
+++ b/ambari-server/src/test/python/stacks/2.1.1/SQOOP/test_sqoop.py
@@ -0,0 +1,52 @@
+#!/usr/bin/env python
+
+'''
+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.
+'''
+from mock.mock import MagicMock, call, patch
+from stacks.utils.RMFTestCase import *
+
+class TestSqoop(RMFTestCase):
+
+  def test_configure_default(self):
+    self.executeScript("1.3.3/services/SQOOP/package/scripts/sqoop_client.py",
+                       classname = "SqoopClient",
+                       command = "configure",
+                       config_file="default.json"
+    )
+    self.assertResourceCalled('Link', '/usr/lib/sqoop/lib/mysql-connector-java.jar',
+                              to = '/usr/share/java/mysql-connector-java.jar',)
+    self.assertResourceCalled('Directory', '/usr/lib/sqoop/conf',
+                              owner = 'sqoop',
+                              group = 'hadoop',)
+    self.assertResourceCalled('TemplateConfig', '/usr/lib/sqoop/conf/sqoop-env.sh',
+                              owner = 'sqoop',
+                              template_tag = None,)
+    self.assertResourceCalled('File', '/usr/lib/sqoop/conf/sqoop-env-template.sh',
+                              owner = 'sqoop',
+                              group = 'hadoop',)
+    self.assertResourceCalled('File', '/usr/lib/sqoop/conf/sqoop-site-template.xml',
+                              owner = 'sqoop',
+                              group = 'hadoop',)
+    self.assertResourceCalled('File', '/usr/lib/sqoop/conf/sqoop-site.xml',
+                              owner = 'sqoop',
+                              group = 'hadoop',)
+    self.assertNoMoreResources()
+
+
+
+

http://git-wip-us.apache.org/repos/asf/ambari/blob/bc102b32/ambari-server/src/test/python/stacks/2.1.1/configs/default.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.1.1/configs/default.json b/ambari-server/src/test/python/stacks/2.1.1/configs/default.json
index 9069853..7d4e9a6 100644
--- a/ambari-server/src/test/python/stacks/2.1.1/configs/default.json
+++ b/ambari-server/src/test/python/stacks/2.1.1/configs/default.json
@@ -12,7 +12,8 @@
         "ambari_db_rca_driver": "org.postgresql.Driver", 
         "jdk_name": "jdk-7u45-linux-x64.tar.gz", 
         "ambari_db_rca_username": "mapred", 
-        "java_home": "/usr/jdk64/jdk1.7.0_45"
+        "java_home": "/usr/jdk64/jdk1.7.0_45",
+        "db_name": "ambari"
     }, 
     "commandType": "EXECUTION_COMMAND", 
     "roleParams": {}, 
@@ -285,7 +286,12 @@
             "hadoop_heapsize": "1024", 
             "hadoop_pid_dir_prefix": "/var/run/hadoop", 
             "nagios_user": "nagios", 
-            "hbase_log_dir": "/var/log/hbase"
+            "hbase_log_dir": "/var/log/hbase",
+            "falcon_user": "falcon",
+            "falcon_port": "15000",
+            "falcon_local_dir": "/hadoop/falcon",
+            "falcon_store_uri": "file:///hadoop/falcon/store",
+            "rca_enabled": "false"
         }, 
         "capacity-scheduler": {
             "yarn.scheduler.capacity.node-locality-delay": "40", 
@@ -540,7 +546,7 @@
         ], 
         "logviewer_server_hosts": [
             "c6402.ambari.apache.org"
-        ], 
+        ],
         "hive_metastore_hosts": [
             "c6402.ambari.apache.org"
         ], 
@@ -596,6 +602,9 @@
         ], 
         "hive_mysql_host": [
             "c6402.ambari.apache.org"
+        ],
+        "falcon_server_hosts": [
+            "c6402.ambari.apache.org"
         ]
     }
 }
\ No newline at end of file