You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ao...@apache.org on 2014/01/20 17:32:23 UTC

git commit: AMBARI-4352. Write unnitests for ZOOKEEPER install script on HDP1 and HDP2 (Arsen Babych via aonishuk)

Updated Branches:
  refs/heads/trunk c3a1a5923 -> aae72dfaf


AMBARI-4352. Write unnitests for ZOOKEEPER install script on HDP1 and
HDP2 (Arsen Babych via aonishuk)


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

Branch: refs/heads/trunk
Commit: aae72dfafcc09369a9134306af5e996fff517682
Parents: c3a1a59
Author: Andrew Onischuk <ao...@hortonworks.com>
Authored: Mon Jan 20 08:31:40 2014 -0800
Committer: Andrew Onischuk <ao...@hortonworks.com>
Committed: Mon Jan 20 08:31:40 2014 -0800

----------------------------------------------------------------------
 .../1.3.3/ZOOKEEPER/test_zookeeper_client.py    | 142 +++++++++++++
 .../1.3.3/ZOOKEEPER/test_zookeeper_server.py    | 210 +++++++++++++++++++
 .../python/stacks/1.3.3/configs/default.json    |   2 +-
 .../python/stacks/1.3.3/configs/secured.json    |   2 +-
 .../2.1.1/ZOOKEEPER/test_zookeeper_client.py    | 142 +++++++++++++
 .../2.1.1/ZOOKEEPER/test_zookeeper_server.py    | 210 +++++++++++++++++++
 6 files changed, 706 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/aae72dfa/ambari-server/src/test/python/stacks/1.3.3/ZOOKEEPER/test_zookeeper_client.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/1.3.3/ZOOKEEPER/test_zookeeper_client.py b/ambari-server/src/test/python/stacks/1.3.3/ZOOKEEPER/test_zookeeper_client.py
new file mode 100644
index 0000000..7eacc6a
--- /dev/null
+++ b/ambari-server/src/test/python/stacks/1.3.3/ZOOKEEPER/test_zookeeper_client.py
@@ -0,0 +1,142 @@
+#!/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 TestZookeeperClient(RMFTestCase):
+
+  def test_configure_default(self):
+    self.executeScript("1.3.3/services/ZOOKEEPER/package/scripts/zookeeper_client.py",
+                       classname = "ZookeeperClient",
+                       command = "configure",
+                       config_file="default.json"
+    )
+
+    self.assertResourceCalled('Directory', '/etc/zookeeper/conf',
+      owner = 'zookeeper',
+      group = 'hadoop',
+      recursive = True
+    )
+
+    self.assertResourceCalled('File', '/etc/zookeeper/conf/zoo.cfg',
+      owner = 'zookeeper',
+      content = Template('zoo.cfg.j2'),
+      group = 'hadoop'
+    )
+
+    self.assertResourceCalled('File', '/etc/zookeeper/conf/zookeeper-env.sh',
+      owner = 'zookeeper',
+      content = Template('zookeeper-env.sh.j2'),
+      group = 'hadoop'
+    )
+
+    self.assertResourceCalled('File', '/etc/zookeeper/conf/configuration.xsl',
+      owner = 'zookeeper',
+      content = Template('configuration.xsl.j2'),
+      group = 'hadoop'
+    )
+
+    self.assertResourceCalled('Directory', '/var/run/zookeeper',
+      owner = 'zookeeper',
+      group = 'hadoop',
+      recursive = True
+    )
+
+    self.assertResourceCalled('Directory', '/var/log/zookeeper',
+      owner = 'zookeeper',
+      group = 'hadoop',
+      recursive = True
+    )
+
+    self.assertResourceCalled('Directory', '/hadoop/zookeeper',
+      owner = 'zookeeper',
+      group = 'hadoop',
+      recursive = True
+    )
+
+    self.assertResourceCalled('File', '/etc/zookeeper/conf/log4j.properties',
+      owner = 'zookeeper',
+      content = Template('log4j.properties.j2'),
+      group = 'hadoop'
+    )
+
+    self.assertResourceCalled('File', '/etc/zookeeper/conf/zoo_sample.cfg',
+      owner = 'zookeeper',
+      group = 'hadoop'
+    )
+
+  def test_configure_secured(self):
+
+    self.executeScript("1.3.3/services/ZOOKEEPER/package/scripts/zookeeper_client.py",
+                       classname = "ZookeeperClient",
+                       command = "configure",
+                       config_file="secured.json"
+    )
+
+    self.assertResourceCalled('Directory', '/etc/zookeeper/conf',
+      owner='zookeeper',
+      group='hadoop',
+      recursive=True
+    )
+
+    self.assertResourceCalled('File', '/etc/zookeeper/conf/zoo.cfg',
+      owner='zookeeper',
+      content=Template('zoo.cfg.j2'),
+      group='hadoop',
+    )
+    self.assertResourceCalled('File', '/etc/zookeeper/conf/zookeeper-env.sh',
+      owner='zookeeper',
+      content=Template('zookeeper-env.sh.j2'),
+      group='hadoop',
+    )
+    self.assertResourceCalled('File', '/etc/zookeeper/conf/configuration.xsl',
+      owner='zookeeper',
+      content=Template('configuration.xsl.j2'),
+      group='hadoop',
+    )
+    self.assertResourceCalled('Directory', '/var/run/zookeeper',
+      owner='zookeeper',
+      group='hadoop',
+      recursive=True,
+    )
+    self.assertResourceCalled('Directory', '/var/log/zookeeper',
+      owner='zookeeper',
+      group='hadoop',
+      recursive=True,
+    )
+    self.assertResourceCalled('Directory', '/hadoop/zookeeper',
+      owner='zookeeper',
+      group='hadoop',
+      recursive=True,
+    )
+    self.assertResourceCalled('File', '/etc/zookeeper/conf/log4j.properties',
+      owner='zookeeper',
+      content=Template('log4j.properties.j2'),
+      group='hadoop',
+    )
+    self.assertResourceCalled('File', '/etc/zookeeper/conf/zookeeper_client_jaas.conf',
+      owner='zookeeper',
+      content=Template('zookeeper_client_jaas.conf.j2'),
+      group='hadoop',
+    )
+    self.assertResourceCalled('File', '/etc/zookeeper/conf/zoo_sample.cfg',
+      owner='zookeeper',
+      group='hadoop',
+    )
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/aae72dfa/ambari-server/src/test/python/stacks/1.3.3/ZOOKEEPER/test_zookeeper_server.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/1.3.3/ZOOKEEPER/test_zookeeper_server.py b/ambari-server/src/test/python/stacks/1.3.3/ZOOKEEPER/test_zookeeper_server.py
new file mode 100644
index 0000000..021a1e8
--- /dev/null
+++ b/ambari-server/src/test/python/stacks/1.3.3/ZOOKEEPER/test_zookeeper_server.py
@@ -0,0 +1,210 @@
+#!/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, patch
+from stacks.utils.RMFTestCase import *
+
+class TestZookeeperServer(RMFTestCase):
+
+  def test_configure_default(self):
+    self.executeScript("1.3.3/services/ZOOKEEPER/package/scripts/zookeeper_server.py",
+                   classname = "ZookeeperServer",
+                   command = "configure",
+                   config_file="default.json"
+    )
+
+    self.assert_configure_default()
+    self.assertNoMoreResources()
+
+  def test_start_default(self):
+    self.executeScript("1.3.3/services/ZOOKEEPER/package/scripts/zookeeper_server.py",
+                   classname = "ZookeeperServer",
+                   command = "start",
+                   config_file="default.json"
+    )
+
+    self.assert_configure_default()
+    self.assertResourceCalled('Execute', 'source /etc/zookeeper/conf/zookeeper-env.sh ; env ZOOCFGDIR=/etc/zookeeper/conf ZOOCFG=zoo.cfg /usr/lib/zookeeper/bin/zkServer.sh start',
+                    not_if = 'ls /var/run/zookeeper/zookeeper_server.pid >/dev/null 2>&1 && ps `cat /var/run/zookeeper/zookeeper_server.pid` >/dev/null 2>&1',
+                    user = 'zookeeper'
+    )
+    self.assertNoMoreResources()
+
+  def test_stop_default(self):
+    self.executeScript("1.3.3/services/ZOOKEEPER/package/scripts/zookeeper_server.py",
+                  classname = "ZookeeperServer",
+                  command = "stop",
+                  config_file="default.json"
+    )
+
+    self.assertResourceCalled('Execute', 'source /etc/zookeeper/conf/zookeeper-env.sh ; env ZOOCFGDIR=/etc/zookeeper/conf ZOOCFG=zoo.cfg /usr/lib/zookeeper/bin/zkServer.sh stop',
+      user = 'zookeeper',
+    )
+    self.assertResourceCalled('Execute', 'rm -f /var/run/zookeeper/zookeeper_server.pid')
+    self.assertNoMoreResources()
+
+  def test_configure_secured(self):
+    self.executeScript("1.3.3/services/ZOOKEEPER/package/scripts/zookeeper_server.py",
+                  classname = "ZookeeperServer",
+                  command = "configure",
+                  config_file="secured.json"
+    )
+
+    self.assert_configure_secured()
+    self.assertNoMoreResources()
+
+  def test_start_secured(self):
+    self.executeScript("1.3.3/services/ZOOKEEPER/package/scripts/zookeeper_server.py",
+                  classname = "ZookeeperServer",
+                  command = "start",
+                  config_file="secured.json"
+    )
+
+    self.assert_configure_secured()
+    self.assertResourceCalled('Execute', 'source /etc/zookeeper/conf/zookeeper-env.sh ; env ZOOCFGDIR=/etc/zookeeper/conf ZOOCFG=zoo.cfg /usr/lib/zookeeper/bin/zkServer.sh start',
+                  not_if = 'ls /var/run/zookeeper/zookeeper_server.pid >/dev/null 2>&1 && ps `cat /var/run/zookeeper/zookeeper_server.pid` >/dev/null 2>&1',
+                  user = 'zookeeper'
+    )
+    self.assertNoMoreResources()
+
+  def test_stop_secured(self):
+    self.executeScript("1.3.3/services/ZOOKEEPER/package/scripts/zookeeper_server.py",
+                  classname = "ZookeeperServer",
+                  command = "stop",
+                  config_file="secured.json"
+    )
+
+    self.assertResourceCalled('Execute', 'source /etc/zookeeper/conf/zookeeper-env.sh ; env ZOOCFGDIR=/etc/zookeeper/conf ZOOCFG=zoo.cfg /usr/lib/zookeeper/bin/zkServer.sh stop',
+                  user = 'zookeeper',
+    )
+
+    self.assertResourceCalled('Execute', 'rm -f /var/run/zookeeper/zookeeper_server.pid')
+    self.assertNoMoreResources()
+
+  def assert_configure_default(self):
+
+    self.assertResourceCalled('Directory', '/etc/zookeeper/conf',
+      owner = 'zookeeper',
+      group = 'hadoop',
+      recursive = True,
+    )
+    self.assertResourceCalled('File', '/etc/zookeeper/conf/zoo.cfg',
+      owner = 'zookeeper',
+      content = Template('zoo.cfg.j2'),
+      group = 'hadoop',
+    )
+    self.assertResourceCalled('File', '/etc/zookeeper/conf/zookeeper-env.sh',
+      owner = 'zookeeper',
+      content = Template('zookeeper-env.sh.j2'),
+      group = 'hadoop',
+    )
+    self.assertResourceCalled('File', '/etc/zookeeper/conf/configuration.xsl',
+      owner = 'zookeeper',
+      content = Template('configuration.xsl.j2'),
+      group = 'hadoop',
+    )
+    self.assertResourceCalled('Directory', '/var/run/zookeeper',
+      owner = 'zookeeper',
+      group = 'hadoop',
+      recursive = True,
+    )
+    self.assertResourceCalled('Directory', '/var/log/zookeeper',
+      owner = 'zookeeper',
+      group = 'hadoop',
+      recursive = True,
+    )
+    self.assertResourceCalled('Directory', '/hadoop/zookeeper',
+      owner = 'zookeeper',
+      group = 'hadoop',
+      recursive = True,
+    )
+    self.assertResourceCalled('File', '/hadoop/zookeeper/myid',
+      content = '1',
+      mode = 420,
+    )
+    self.assertResourceCalled('File', '/etc/zookeeper/conf/log4j.properties',
+      owner = 'zookeeper',
+      content = Template('log4j.properties.j2'),
+      group = 'hadoop',
+    )
+    self.assertResourceCalled('File', '/etc/zookeeper/conf/zoo_sample.cfg',
+      owner = 'zookeeper',
+      group = 'hadoop',
+    )
+
+
+  def assert_configure_secured(self):
+    self.assertResourceCalled('Directory', '/etc/zookeeper/conf',
+      owner = 'zookeeper',
+      group = 'hadoop',
+      recursive = True,
+    )
+    self.assertResourceCalled('File', '/etc/zookeeper/conf/zoo.cfg',
+      owner = 'zookeeper',
+      content = Template('zoo.cfg.j2'),
+      group = 'hadoop',
+    )
+    self.assertResourceCalled('File', '/etc/zookeeper/conf/zookeeper-env.sh',
+      owner = 'zookeeper',
+      content = Template('zookeeper-env.sh.j2'),
+      group = 'hadoop',
+    )
+    self.assertResourceCalled('File', '/etc/zookeeper/conf/configuration.xsl',
+      owner = 'zookeeper',
+      content = Template('configuration.xsl.j2'),
+      group = 'hadoop',
+    )
+    self.assertResourceCalled('Directory', '/var/run/zookeeper',
+      owner = 'zookeeper',
+      group = 'hadoop',
+      recursive = True,
+    )
+    self.assertResourceCalled('Directory', '/var/log/zookeeper',
+      owner = 'zookeeper',
+      group = 'hadoop',
+      recursive = True,
+    )
+    self.assertResourceCalled('Directory', '/hadoop/zookeeper',
+      owner = 'zookeeper',
+      group = 'hadoop',
+      recursive = True,
+    )
+    self.assertResourceCalled('File', '/hadoop/zookeeper/myid',
+      content = '1',
+      mode = 420,
+    )
+    self.assertResourceCalled('File', '/etc/zookeeper/conf/log4j.properties',
+      owner = 'zookeeper',
+      content = Template('log4j.properties.j2'),
+      group = 'hadoop',
+    )
+    self.assertResourceCalled('File', '/etc/zookeeper/conf/zookeeper_jaas.conf',
+      owner = 'zookeeper',
+      content = Template('zookeeper_jaas.conf.j2'),
+      group = 'hadoop',
+    )
+    self.assertResourceCalled('File', '/etc/zookeeper/conf/zookeeper_client_jaas.conf',
+      owner = 'zookeeper',
+      content = Template('zookeeper_client_jaas.conf.j2'),
+      group = 'hadoop',
+    )
+    self.assertResourceCalled('File', '/etc/zookeeper/conf/zoo_sample.cfg',
+      owner = 'zookeeper',
+      group = 'hadoop',
+    )
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/aae72dfa/ambari-server/src/test/python/stacks/1.3.3/configs/default.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/1.3.3/configs/default.json b/ambari-server/src/test/python/stacks/1.3.3/configs/default.json
index ac8143a..556853a 100644
--- a/ambari-server/src/test/python/stacks/1.3.3/configs/default.json
+++ b/ambari-server/src/test/python/stacks/1.3.3/configs/default.json
@@ -431,7 +431,7 @@
             "c6402.ambari.apache.org"
         ], 
         "zookeeper_hosts": [
-            "c6401.ambari.apache.org"
+            "c6402.ambari.apache.org"
         ], 
         "hs_host": [
             "c6402.ambari.apache.org"

http://git-wip-us.apache.org/repos/asf/ambari/blob/aae72dfa/ambari-server/src/test/python/stacks/1.3.3/configs/secured.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/1.3.3/configs/secured.json b/ambari-server/src/test/python/stacks/1.3.3/configs/secured.json
index 8da0779..fac4974 100644
--- a/ambari-server/src/test/python/stacks/1.3.3/configs/secured.json
+++ b/ambari-server/src/test/python/stacks/1.3.3/configs/secured.json
@@ -536,7 +536,7 @@
             "c6402.ambari.apache.org"
         ], 
         "zookeeper_hosts": [
-            "c6401.ambari.apache.org"
+            "c6402.ambari.apache.org"
         ], 
         "hs_host": [
             "c6402.ambari.apache.org"

http://git-wip-us.apache.org/repos/asf/ambari/blob/aae72dfa/ambari-server/src/test/python/stacks/2.1.1/ZOOKEEPER/test_zookeeper_client.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.1.1/ZOOKEEPER/test_zookeeper_client.py b/ambari-server/src/test/python/stacks/2.1.1/ZOOKEEPER/test_zookeeper_client.py
new file mode 100644
index 0000000..a5d6a8a
--- /dev/null
+++ b/ambari-server/src/test/python/stacks/2.1.1/ZOOKEEPER/test_zookeeper_client.py
@@ -0,0 +1,142 @@
+#!/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 TestZookeeperClient(RMFTestCase):
+
+  def test_configure_default(self):
+    self.executeScript("2.1.1/services/ZOOKEEPER/package/scripts/zookeeper_client.py",
+                       classname = "ZookeeperClient",
+                       command = "configure",
+                       config_file="default.json"
+    )
+
+    self.assertResourceCalled('Directory', '/etc/zookeeper/conf',
+      owner = 'zookeeper',
+      group = 'hadoop',
+      recursive = True
+    )
+
+    self.assertResourceCalled('File', '/etc/zookeeper/conf/zoo.cfg',
+      owner = 'zookeeper',
+      content = Template('zoo.cfg.j2'),
+      group = 'hadoop'
+    )
+
+    self.assertResourceCalled('File', '/etc/zookeeper/conf/zookeeper-env.sh',
+      owner = 'zookeeper',
+      content = Template('zookeeper-env.sh.j2'),
+      group = 'hadoop'
+    )
+
+    self.assertResourceCalled('File', '/etc/zookeeper/conf/configuration.xsl',
+      owner = 'zookeeper',
+      content = Template('configuration.xsl.j2'),
+      group = 'hadoop'
+    )
+
+    self.assertResourceCalled('Directory', '/var/run/zookeeper',
+      owner = 'zookeeper',
+      group = 'hadoop',
+      recursive = True
+    )
+
+    self.assertResourceCalled('Directory', '/var/log/zookeeper',
+      owner = 'zookeeper',
+      group = 'hadoop',
+      recursive = True
+    )
+
+    self.assertResourceCalled('Directory', '/hadoop/zookeeper',
+      owner = 'zookeeper',
+      group = 'hadoop',
+      recursive = True
+    )
+
+    self.assertResourceCalled('File', '/etc/zookeeper/conf/log4j.properties',
+      owner = 'zookeeper',
+      content = Template('log4j.properties.j2'),
+      group = 'hadoop'
+    )
+
+    self.assertResourceCalled('File', '/etc/zookeeper/conf/zoo_sample.cfg',
+      owner = 'zookeeper',
+      group = 'hadoop'
+    )
+
+  def test_configure_secured(self):
+
+    self.executeScript("2.1.1/services/ZOOKEEPER/package/scripts/zookeeper_client.py",
+                       classname = "ZookeeperClient",
+                       command = "configure",
+                       config_file="secured.json"
+    )
+
+    self.assertResourceCalled('Directory', '/etc/zookeeper/conf',
+      owner='zookeeper',
+      group='hadoop',
+      recursive=True
+    )
+
+    self.assertResourceCalled('File', '/etc/zookeeper/conf/zoo.cfg',
+      owner='zookeeper',
+      content=Template('zoo.cfg.j2'),
+      group='hadoop',
+    )
+    self.assertResourceCalled('File', '/etc/zookeeper/conf/zookeeper-env.sh',
+      owner='zookeeper',
+      content=Template('zookeeper-env.sh.j2'),
+      group='hadoop',
+    )
+    self.assertResourceCalled('File', '/etc/zookeeper/conf/configuration.xsl',
+      owner='zookeeper',
+      content=Template('configuration.xsl.j2'),
+      group='hadoop',
+    )
+    self.assertResourceCalled('Directory', '/var/run/zookeeper',
+      owner='zookeeper',
+      group='hadoop',
+      recursive=True,
+    )
+    self.assertResourceCalled('Directory', '/var/log/zookeeper',
+      owner='zookeeper',
+      group='hadoop',
+      recursive=True,
+    )
+    self.assertResourceCalled('Directory', '/hadoop/zookeeper',
+      owner='zookeeper',
+      group='hadoop',
+      recursive=True,
+    )
+    self.assertResourceCalled('File', '/etc/zookeeper/conf/log4j.properties',
+      owner='zookeeper',
+      content=Template('log4j.properties.j2'),
+      group='hadoop',
+    )
+    self.assertResourceCalled('File', '/etc/zookeeper/conf/zookeeper_client_jaas.conf',
+      owner='zookeeper',
+      content=Template('zookeeper_client_jaas.conf.j2'),
+      group='hadoop',
+    )
+    self.assertResourceCalled('File', '/etc/zookeeper/conf/zoo_sample.cfg',
+      owner='zookeeper',
+      group='hadoop',
+    )
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/aae72dfa/ambari-server/src/test/python/stacks/2.1.1/ZOOKEEPER/test_zookeeper_server.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.1.1/ZOOKEEPER/test_zookeeper_server.py b/ambari-server/src/test/python/stacks/2.1.1/ZOOKEEPER/test_zookeeper_server.py
new file mode 100644
index 0000000..48c8382
--- /dev/null
+++ b/ambari-server/src/test/python/stacks/2.1.1/ZOOKEEPER/test_zookeeper_server.py
@@ -0,0 +1,210 @@
+#!/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, patch
+from stacks.utils.RMFTestCase import *
+
+class TestZookeeperServer(RMFTestCase):
+
+  def test_configure_default(self):
+    self.executeScript("2.1.1/services/ZOOKEEPER/package/scripts/zookeeper_server.py",
+                   classname = "ZookeeperServer",
+                   command = "configure",
+                   config_file="default.json"
+    )
+
+    self.assert_configure_default()
+    self.assertNoMoreResources()
+
+  def test_start_default(self):
+    self.executeScript("2.1.1/services/ZOOKEEPER/package/scripts/zookeeper_server.py",
+                   classname = "ZookeeperServer",
+                   command = "start",
+                   config_file="default.json"
+    )
+
+    self.assert_configure_default()
+    self.assertResourceCalled('Execute', 'source /etc/zookeeper/conf/zookeeper-env.sh ; env ZOOCFGDIR=/etc/zookeeper/conf ZOOCFG=zoo.cfg /usr/lib/zookeeper/bin/zkServer.sh start',
+                    not_if = 'ls /var/run/zookeeper/zookeeper_server.pid >/dev/null 2>&1 && ps `cat /var/run/zookeeper/zookeeper_server.pid` >/dev/null 2>&1',
+                    user = 'zookeeper'
+    )
+    self.assertNoMoreResources()
+
+  def test_stop_default(self):
+    self.executeScript("2.1.1/services/ZOOKEEPER/package/scripts/zookeeper_server.py",
+                  classname = "ZookeeperServer",
+                  command = "stop",
+                  config_file="default.json"
+    )
+
+    self.assertResourceCalled('Execute', 'source /etc/zookeeper/conf/zookeeper-env.sh ; env ZOOCFGDIR=/etc/zookeeper/conf ZOOCFG=zoo.cfg /usr/lib/zookeeper/bin/zkServer.sh stop',
+      user = 'zookeeper',
+    )
+    self.assertResourceCalled('Execute', 'rm -f /var/run/zookeeper/zookeeper_server.pid')
+    self.assertNoMoreResources()
+
+  def test_configure_secured(self):
+    self.executeScript("2.1.1/services/ZOOKEEPER/package/scripts/zookeeper_server.py",
+                  classname = "ZookeeperServer",
+                  command = "configure",
+                  config_file="secured.json"
+    )
+
+    self.assert_configure_secured()
+    self.assertNoMoreResources()
+
+  def test_start_secured(self):
+    self.executeScript("2.1.1/services/ZOOKEEPER/package/scripts/zookeeper_server.py",
+                  classname = "ZookeeperServer",
+                  command = "start",
+                  config_file="secured.json"
+    )
+
+    self.assert_configure_secured()
+    self.assertResourceCalled('Execute', 'source /etc/zookeeper/conf/zookeeper-env.sh ; env ZOOCFGDIR=/etc/zookeeper/conf ZOOCFG=zoo.cfg /usr/lib/zookeeper/bin/zkServer.sh start',
+                  not_if = 'ls /var/run/zookeeper/zookeeper_server.pid >/dev/null 2>&1 && ps `cat /var/run/zookeeper/zookeeper_server.pid` >/dev/null 2>&1',
+                  user = 'zookeeper'
+    )
+    self.assertNoMoreResources()
+
+  def test_stop_secured(self):
+    self.executeScript("2.1.1/services/ZOOKEEPER/package/scripts/zookeeper_server.py",
+                  classname = "ZookeeperServer",
+                  command = "stop",
+                  config_file="secured.json"
+    )
+
+    self.assertResourceCalled('Execute', 'source /etc/zookeeper/conf/zookeeper-env.sh ; env ZOOCFGDIR=/etc/zookeeper/conf ZOOCFG=zoo.cfg /usr/lib/zookeeper/bin/zkServer.sh stop',
+                  user = 'zookeeper',
+    )
+
+    self.assertResourceCalled('Execute', 'rm -f /var/run/zookeeper/zookeeper_server.pid')
+    self.assertNoMoreResources()
+
+  def assert_configure_default(self):
+
+    self.assertResourceCalled('Directory', '/etc/zookeeper/conf',
+      owner = 'zookeeper',
+      group = 'hadoop',
+      recursive = True,
+    )
+    self.assertResourceCalled('File', '/etc/zookeeper/conf/zoo.cfg',
+      owner = 'zookeeper',
+      content = Template('zoo.cfg.j2'),
+      group = 'hadoop',
+    )
+    self.assertResourceCalled('File', '/etc/zookeeper/conf/zookeeper-env.sh',
+      owner = 'zookeeper',
+      content = Template('zookeeper-env.sh.j2'),
+      group = 'hadoop',
+    )
+    self.assertResourceCalled('File', '/etc/zookeeper/conf/configuration.xsl',
+      owner = 'zookeeper',
+      content = Template('configuration.xsl.j2'),
+      group = 'hadoop',
+    )
+    self.assertResourceCalled('Directory', '/var/run/zookeeper',
+      owner = 'zookeeper',
+      group = 'hadoop',
+      recursive = True,
+    )
+    self.assertResourceCalled('Directory', '/var/log/zookeeper',
+      owner = 'zookeeper',
+      group = 'hadoop',
+      recursive = True,
+    )
+    self.assertResourceCalled('Directory', '/hadoop/zookeeper',
+      owner = 'zookeeper',
+      group = 'hadoop',
+      recursive = True,
+    )
+    self.assertResourceCalled('File', '/hadoop/zookeeper/myid',
+      content = '1',
+      mode = 420,
+    )
+    self.assertResourceCalled('File', '/etc/zookeeper/conf/log4j.properties',
+      owner = 'zookeeper',
+      content = Template('log4j.properties.j2'),
+      group = 'hadoop',
+    )
+    self.assertResourceCalled('File', '/etc/zookeeper/conf/zoo_sample.cfg',
+      owner = 'zookeeper',
+      group = 'hadoop',
+    )
+
+
+  def assert_configure_secured(self):
+    self.assertResourceCalled('Directory', '/etc/zookeeper/conf',
+      owner = 'zookeeper',
+      group = 'hadoop',
+      recursive = True,
+    )
+    self.assertResourceCalled('File', '/etc/zookeeper/conf/zoo.cfg',
+      owner = 'zookeeper',
+      content = Template('zoo.cfg.j2'),
+      group = 'hadoop',
+    )
+    self.assertResourceCalled('File', '/etc/zookeeper/conf/zookeeper-env.sh',
+      owner = 'zookeeper',
+      content = Template('zookeeper-env.sh.j2'),
+      group = 'hadoop',
+    )
+    self.assertResourceCalled('File', '/etc/zookeeper/conf/configuration.xsl',
+      owner = 'zookeeper',
+      content = Template('configuration.xsl.j2'),
+      group = 'hadoop',
+    )
+    self.assertResourceCalled('Directory', '/var/run/zookeeper',
+      owner = 'zookeeper',
+      group = 'hadoop',
+      recursive = True,
+    )
+    self.assertResourceCalled('Directory', '/var/log/zookeeper',
+      owner = 'zookeeper',
+      group = 'hadoop',
+      recursive = True,
+    )
+    self.assertResourceCalled('Directory', '/hadoop/zookeeper',
+      owner = 'zookeeper',
+      group = 'hadoop',
+      recursive = True,
+    )
+    self.assertResourceCalled('File', '/hadoop/zookeeper/myid',
+      content = '1',
+      mode = 420,
+    )
+    self.assertResourceCalled('File', '/etc/zookeeper/conf/log4j.properties',
+      owner = 'zookeeper',
+      content = Template('log4j.properties.j2'),
+      group = 'hadoop',
+    )
+    self.assertResourceCalled('File', '/etc/zookeeper/conf/zookeeper_jaas.conf',
+      owner = 'zookeeper',
+      content = Template('zookeeper_jaas.conf.j2'),
+      group = 'hadoop',
+    )
+    self.assertResourceCalled('File', '/etc/zookeeper/conf/zookeeper_client_jaas.conf',
+      owner = 'zookeeper',
+      content = Template('zookeeper_client_jaas.conf.j2'),
+      group = 'hadoop',
+    )
+    self.assertResourceCalled('File', '/etc/zookeeper/conf/zoo_sample.cfg',
+      owner = 'zookeeper',
+      group = 'hadoop',
+    )
\ No newline at end of file