summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkshithijiyer <kshithij.ki@gmail.com>2019-03-28 16:40:33 +0530
committerAkarsha Rai <akrai@redhat.com>2019-04-12 09:29:36 +0000
commitd93888ca2a94fe27dc2da9830683c42842a87e5d (patch)
treeaab103768f60f5d29a4b91b7b7c95dd62ebfe5b0
parent685b2b1a0fbfef68ba3b6c031609290e3d90b42b (diff)
Adding test to run gluster commands when glusterd is down on one node
Change-Id: Ibf41c11a4e98baeaad658ee10ba8a807318504be Signed-off-by: kshithijiyer <kshithij.ki@gmail.com>
-rw-r--r--tests/functional/glusterd/test_ops_when_one_node_is_down.py102
1 files changed, 102 insertions, 0 deletions
diff --git a/tests/functional/glusterd/test_ops_when_one_node_is_down.py b/tests/functional/glusterd/test_ops_when_one_node_is_down.py
new file mode 100644
index 0000000..a18f572
--- /dev/null
+++ b/tests/functional/glusterd/test_ops_when_one_node_is_down.py
@@ -0,0 +1,102 @@
+# Copyright (C) 2019 Red Hat, Inc. <http://www.redhat.com>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along`
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+from time import sleep
+from random import randint
+from glusto.core import Glusto as g
+from glustolibs.gluster.gluster_base_class import GlusterBaseClass, runs_on
+from glustolibs.gluster.exceptions import ExecutionError
+from glustolibs.gluster.gluster_init import stop_glusterd, start_glusterd
+from glustolibs.gluster.peer_ops import peer_status, is_peer_connected
+from glustolibs.gluster.volume_ops import volume_list, volume_info
+from glustolibs.gluster.volume_libs import (cleanup_volume, setup_volume)
+
+
+@runs_on([['replicated'], ['glusterfs']])
+class TestOpsWhenOneNodeIsDown(GlusterBaseClass):
+
+ def setUp(self):
+
+ GlusterBaseClass.setUp.im_func(self)
+
+ # Create and start a volume.
+ ret = setup_volume(self.mnode, self.all_servers_info, self.volume)
+ if ret:
+ ExecutionError("Failed to create and start volume")
+
+ def tearDown(self):
+
+ # Starting glusterd on node where stopped.
+ ret = start_glusterd(self.servers[self.random_server])
+ if ret:
+ ExecutionError("Failed to start glusterd.")
+ g.log.info("Successfully started glusterd.")
+
+ # Checking if peer is connected.
+ counter = 0
+ while counter < 30:
+ ret = is_peer_connected(self.mnode, self.servers)
+ counter += 1
+ if ret:
+ break
+ sleep(3)
+ if not ret:
+ ExecutionError("Peer is not in connected state.")
+ g.log.info("Peers is in connected state.")
+
+ # Stopping and deleting volume.
+ ret = cleanup_volume(self.mnode, self.volname)
+ if not ret:
+ raise ExecutionError("Unable to delete volume % s" % self.volname)
+ g.log.info("Volume deleted successfully : %s", self.volname)
+
+ GlusterBaseClass.tearDown.im_func(self)
+
+ def test_ops_when_one_node_is_down(self):
+
+ # pylint: disable=too-many-statements
+ """
+ Test Case:
+ 1) Create a N node gluster cluster.
+ 2) Stop gluster on one node.
+ 3) Execute gluster peer status on other node.
+ 4) Execute gluster v list on other node.
+ 5) Execute gluster v info on other node.
+ """
+
+ # Fetching a random server from list.
+ self.random_server = randint(1, len(self.servers)-1)
+
+ # Stopping glusterd on one node.
+ ret = stop_glusterd(self.servers[self.random_server])
+ self.assertTrue(ret, "Failed to stop glusterd on one node.")
+ g.log.info("Successfully stopped glusterd on one node.")
+
+ # Running peer status on another node.
+ ret, _, err = peer_status(self.mnode)
+ self.assertEqual(ret, 0, ("Failed to get peer status from %s with "
+ "error message %s" % (self.mnode, err)))
+ g.log.info("Successfully got peer status from %s.", self.mnode)
+
+ # Running volume list on another node.
+ ret, _, _ = volume_list(self.mnode)
+ self.assertEqual(ret, 0, "Failed to get volume list.")
+ g.log.info("Successfully got volume list from %s.", self.mnode)
+
+ # Running volume info on another node.
+ ret, _, _ = volume_info(self.mnode)
+ self.assertEqual(ret, 0, "Failed to get volume info.")
+ g.log.info("Successfully got volume info from %s.", self.mnode)