summaryrefslogtreecommitdiffstats
path: root/tests/functional
diff options
context:
space:
mode:
authorvamahaja <vamahaja@redhat.com>2019-09-11 14:46:59 +0530
committervponomar <vponomar@redhat.com>2019-09-19 11:45:44 +0000
commita214cf6781d48594afc84d08e865d59bdcbe8fe1 (patch)
tree484092c4cc0f318871ed4c4299e663edf0b0489e /tests/functional
parent764d7bd68ec0b4ea9229c381b3b4195367b44b83 (diff)
Merge heketi node operation tests in one class and fix library
Fix consists of - - Use "**kwargs" approach in the "heketi_node_list" function as it is done in lots of other functions. - Parse the CLI output in the "heketi_node_list" function using regex instead of the splitting and stripping strings. - Combine test cases related to the same feature into one module - test_heketi_node_operations.py - Remove redundant checks which already exist in common libraries. - Remove unnecessary logging. Change-Id: I815ddfbbacb765140229e7630ec87a6bbaa6255b Signed-off-by: vamahaja <vamahaja@redhat.com>
Diffstat (limited to 'tests/functional')
-rw-r--r--tests/functional/heketi/test_heketi_node_operations.py108
-rw-r--r--tests/functional/heketi/test_node_enable_disable.py141
-rw-r--r--tests/functional/heketi/test_node_info.py80
3 files changed, 108 insertions, 221 deletions
diff --git a/tests/functional/heketi/test_heketi_node_operations.py b/tests/functional/heketi/test_heketi_node_operations.py
new file mode 100644
index 00000000..6386be6f
--- /dev/null
+++ b/tests/functional/heketi/test_heketi_node_operations.py
@@ -0,0 +1,108 @@
+from glustolibs.gluster import peer_ops
+
+from openshiftstoragelibs import baseclass
+from openshiftstoragelibs import heketi_ops
+from openshiftstoragelibs import podcmd
+
+
+class TestHeketiNodeOperations(baseclass.BaseClass):
+ """Class to test heketi node operations
+ """
+
+ @podcmd.GlustoPod()
+ def test_heketi_node_list(self):
+ """Test node list operation
+ """
+ h_client, h_server = self.heketi_client_node, self.heketi_server_url
+
+ # List heketi nodes
+ node_ips = []
+ heketi_node_id_list = heketi_ops.heketi_node_list(h_client, h_server)
+
+ for node_id in heketi_node_id_list:
+ node_info = heketi_ops.heketi_node_info(
+ h_client, h_server, node_id, json=True)
+ node_ips.append(node_info["hostnames"]["storage"])
+
+ # Compare the node listed in previous step
+ hostnames = []
+ list_of_pools = peer_ops.get_pool_list('auto_get_gluster_endpoint')
+ self.assertTrue(
+ list_of_pools,
+ "Failed to get the pool list from gluster pods/nodes")
+ for pool in list_of_pools:
+ hostnames.append(pool["hostname"])
+ self.assertEqual(
+ len(heketi_node_id_list), len(list_of_pools),
+ "Heketi volume list %s is not equal to gluster volume list %s"
+ % (node_ips, hostnames))
+
+ def test_heketi_node_info(self):
+ """Test heketi node info operation
+ """
+ h_client, h_server = self.heketi_client_node, self.heketi_server_url
+
+ # List heketi node
+ heketi_node_id_list = heketi_ops.heketi_node_list(h_client, h_server)
+ self.assertTrue(heketi_node_id_list, "Node Id list is empty.")
+
+ for node_id in heketi_node_id_list:
+ node_info = heketi_ops.heketi_node_info(
+ h_client, h_server, node_id, json=True)
+ self.assertTrue(node_info, "Failed to retrieve the node info")
+ self.assertEqual(
+ node_info["id"], node_id,
+ "Failed to match node ID. Exp: %s, Act: %s" % (
+ node_id, node_info["id"]))
+
+ def test_heketi_node_states_enable_disable(self):
+ """Test node enable and disable functionality
+ """
+ h_client, h_server = self.heketi_client_node, self.heketi_server_url
+
+ node_list = heketi_ops.heketi_node_list(h_client, h_server)
+ online_hosts = []
+ for node_id in node_list:
+ node_info = heketi_ops.heketi_node_info(
+ h_client, h_server, node_id, json=True)
+ if node_info["state"] == "online":
+ online_hosts.append(node_info)
+
+ if len(online_hosts) < 3:
+ raise self.skipTest(
+ "This test can run only if online hosts are more than 2")
+
+ # Disable n-3 nodes, in case we have n nodes
+ for node_info in online_hosts[3:]:
+ node_id = node_info["id"]
+ heketi_ops.heketi_node_disable(h_client, h_server, node_id)
+ self.addCleanup(
+ heketi_ops.heketi_node_enable, h_client, h_server, node_id)
+
+ # Create volume when 3 nodes are online
+ vol_size = 1
+ vol_info = heketi_ops.heketi_volume_create(
+ h_client, h_server, vol_size, json=True)
+ self.addCleanup(
+ heketi_ops.heketi_volume_delete,
+ h_client, h_server, vol_info['id'])
+
+ node_id = online_hosts[0]['id']
+ try:
+ heketi_ops.heketi_node_disable(h_client, h_server, node_id)
+
+ # Try to create a volume, volume creation should fail
+ with self.assertRaises(AssertionError):
+ heketi_volume = heketi_ops.heketi_volume_create(
+ h_client, h_server, vol_size)
+ self.addCleanup(
+ heketi_ops.heketi_volume_delete,
+ h_client, h_server, heketi_volume["id"])
+ finally:
+ # Enable heketi node
+ heketi_ops.heketi_node_enable(h_client, h_server, node_id)
+
+ # Create volume when heketi node is enabled
+ vol_info = heketi_ops.heketi_volume_create(
+ h_client, h_server, vol_size, json=True)
+ heketi_ops.heketi_volume_delete(h_client, h_server, vol_info['id'])
diff --git a/tests/functional/heketi/test_node_enable_disable.py b/tests/functional/heketi/test_node_enable_disable.py
deleted file mode 100644
index 2d88ffb7..00000000
--- a/tests/functional/heketi/test_node_enable_disable.py
+++ /dev/null
@@ -1,141 +0,0 @@
-"""Test cases to disable and enable node in heketi."""
-from glusto.core import Glusto as g
-
-from openshiftstoragelibs.baseclass import BaseClass
-from openshiftstoragelibs.heketi_ops import (
- heketi_node_disable,
- heketi_node_enable,
- heketi_node_info,
- heketi_node_list,
- heketi_volume_create,
- heketi_volume_delete,
-)
-
-
-class TestHeketiNodeState(BaseClass):
- """Test node enable and disable functionality."""
-
- def enable_node(self, node_id):
- """
- Enable node through heketi-cli.
-
- :param node_id: str node ID
- """
- out = heketi_node_enable(self.heketi_client_node,
- self.heketi_server_url,
- node_id)
-
- self.assertNotEqual(out, False,
- "Failed to enable node of"
- " id %s" % node_id)
-
- def disable_node(self, node_id):
- """
- Disable node through heketi-cli.
-
- :param node_id: str node ID
- """
- out = heketi_node_disable(self.heketi_client_node,
- self.heketi_server_url,
- node_id)
-
- self.assertNotEqual(out, False,
- "Failed to disable node of"
- " id %s" % node_id)
-
- def get_node_info(self, node_id):
- """
- Get node information from node_id.
-
- :param node_id: str node ID
- :return node_info: list node information
- """
- node_info = heketi_node_info(
- self.heketi_client_node, self.heketi_server_url,
- node_id, json=True)
- self.assertNotEqual(node_info, False,
- "Node info on %s failed" % node_id)
- return node_info
-
- def get_online_nodes(self, node_list):
- """
- Get online nodes information from node_list.
-
- :param node_list: list of node ID's
- :return: list node information of online nodes
- """
- online_hosts_info = []
-
- for node in node_list:
- node_info = self.get_node_info(node)
- if node_info["state"] == "online":
- online_hosts_info.append(node_info)
-
- return online_hosts_info
-
- def test_node_state(self):
- """
- Test node enable and disable functionality.
-
- If we have 4 gluster servers, if we disable 1/4 nodes from heketi
- and create a volume, the volume creation should be successful.
-
- If we disable 2/4 nodes from heketi-cli and create a volume
- the volume creation should fail.
-
- If we enable back one gluster server and create a volume
- the volume creation should be successful.
- """
- g.log.info("Disable node in heketi")
- node_list = heketi_node_list(self.heketi_client_node,
- self.heketi_server_url)
- self.assertTrue(node_list, "Failed to list heketi nodes")
- g.log.info("Successfully got the list of nodes")
- online_hosts = self.get_online_nodes(node_list)
-
- if len(online_hosts) < 3:
- raise self.skipTest(
- "This test can run only if online hosts are more "
- "than 2")
- # if we have n nodes, disable n-3 nodes
- for node_info in online_hosts[3:]:
- node_id = node_info["id"]
- g.log.info("going to disable node id %s", node_id)
- self.disable_node(node_id)
- self.addCleanup(self.enable_node, node_id)
-
- vol_size = 1
- # create volume when 3 nodes are online
- vol_info = heketi_volume_create(self.heketi_client_node,
- self.heketi_server_url, vol_size,
- json=True)
- self.addCleanup(
- heketi_volume_delete, self.heketi_client_node,
- self.heketi_server_url, vol_info['id'])
-
- node_id = online_hosts[0]['id']
- g.log.info("going to disable node id %s", node_id)
- self.disable_node(node_id)
- self.addCleanup(self.enable_node, node_id)
-
- # try to create a volume, volume creation should fail
- with self.assertRaises(AssertionError):
- out = heketi_volume_create(
- self.heketi_client_node, self.heketi_server_url, vol_size)
- self.addCleanup(
- heketi_volume_delete, self.heketi_client_node,
- self.heketi_server_url, out["id"])
- self.assertFalse(True, "Volume creation didn't fail: %s" % out)
-
- g.log.info("Volume creation failed as expected.")
-
- # enable node
- self.enable_node(node_id)
-
- # create volume when node is enabled
- vol_info = heketi_volume_create(self.heketi_client_node,
- self.heketi_server_url, vol_size,
- json=True)
- self.addCleanup(
- heketi_volume_delete, self.heketi_client_node,
- self.heketi_server_url, vol_info['id'])
diff --git a/tests/functional/heketi/test_node_info.py b/tests/functional/heketi/test_node_info.py
deleted file mode 100644
index 5bf7270f..00000000
--- a/tests/functional/heketi/test_node_info.py
+++ /dev/null
@@ -1,80 +0,0 @@
-from glusto.core import Glusto as g
-from glustolibs.gluster.exceptions import ExecutionError
-from glustolibs.gluster.peer_ops import get_pool_list
-
-from openshiftstoragelibs.baseclass import BaseClass
-from openshiftstoragelibs import heketi_ops, podcmd
-
-
-class TestHeketiVolume(BaseClass):
- """
- Class to test heketi volume create
- """
-
- @podcmd.GlustoPod()
- def test_to_get_list_of_nodes(self):
- """
- Listing all nodes and compare the
- node listed in previous step
- """
-
- # List all list
- ip = []
- g.log.info("Listing the node id")
- heketi_node_id_list = heketi_ops.heketi_node_list(
- self.heketi_client_node, self.heketi_server_url)
-
- g.log.info("Successfully listed the node")
-
- if (len(heketi_node_id_list) == 0):
- raise ExecutionError("Node list empty")
-
- for node_id in heketi_node_id_list:
- g.log.info("Retrieve the node info")
- node_info = heketi_ops.heketi_node_info(
- self.heketi_client_node, self.heketi_server_url,
- node_id, json=True)
- self.assertTrue(node_info, ("Failed to "
- "retrieve the node info"))
- g.log.info("Successfully retrieved the node info %s" % node_id)
- ip.append(node_info["hostnames"]["storage"])
-
- # Compare the node listed in previous step
- hostname = []
-
- g.log.info("Get the pool list")
- list_of_pools = get_pool_list('auto_get_gluster_endpoint')
- self.assertTrue(list_of_pools, ("Failed to get the "
- "pool list from gluster pods/nodes"))
- g.log.info("Successfully got the pool list from gluster pods/nodes")
- for pool in list_of_pools:
- hostname.append(pool["hostname"])
-
- if (len(heketi_node_id_list) != len(list_of_pools)):
- raise ExecutionError(
- "Heketi volume list %s is not equal "
- "to gluster volume list %s" % ((ip), (hostname)))
- g.log.info("The node IP's from node info and list"
- " is : %s/n and pool list from gluster"
- " pods/nodes is %s" % ((ip), (hostname)))
-
- def test_to_retrieve_node_info(self):
- """
- List and retrieve node related info
- """
-
- # List all list
- g.log.info("Listing the node id")
- heketi_node_id_list = heketi_ops.heketi_node_list(
- self.heketi_client_node, self.heketi_server_url)
- self.assertTrue(heketi_node_id_list, ("Node Id list is empty."))
- g.log.info("Successfully listed the node")
-
- for node_id in heketi_node_id_list:
- g.log.info("Retrieve the node info")
- node_info = heketi_ops.heketi_node_info(
- self.heketi_client_node, self.heketi_server_url,
- node_id, json=True)
- self.assertTrue(node_info, ("Failed to "
- "retrieve the node info"))
- g.log.info("Successfully retrieved the node info %s" % node_id)