summaryrefslogtreecommitdiffstats
path: root/tests/functional/heketi
diff options
context:
space:
mode:
authorAditya Ramteke <adityaramteke05icr@gmail.com>2019-07-28 18:19:32 +0530
committeradityaramteke <adityaramteke05icr@gmail.com>2019-11-19 15:09:11 +0530
commite7264123e6463f418df8c6d7b75f91e504294ecb (patch)
tree8c9f4574cbe5e22ac57bb5dce3f3b4b638f8e202 /tests/functional/heketi
parent87b8bd30728f013dd114e449c7595eedb33f0ce9 (diff)
Add test for inconsistencies in targetcli when BHV is down
Confirm no inconsistencies occur in targetcli when block devices are created with one block hosting volume down. Change-Id: I2a755ef2a88c6e6ca5326be3787ac07c0fb7db26
Diffstat (limited to 'tests/functional/heketi')
-rw-r--r--tests/functional/heketi/test_block_volumes_heketi.py87
1 files changed, 86 insertions, 1 deletions
diff --git a/tests/functional/heketi/test_block_volumes_heketi.py b/tests/functional/heketi/test_block_volumes_heketi.py
index cf165905..4cdb9145 100644
--- a/tests/functional/heketi/test_block_volumes_heketi.py
+++ b/tests/functional/heketi/test_block_volumes_heketi.py
@@ -1,8 +1,17 @@
import ddt
+from glusto.core import Glusto as g
from glustolibs.gluster.block_libs import get_block_list
-from glustolibs.gluster.volume_ops import get_volume_info
+from glustolibs.gluster.volume_ops import (
+ get_volume_info,
+ volume_start,
+ volume_stop,
+)
from openshiftstoragelibs.baseclass import BaseClass
+from openshiftstoragelibs import exceptions
+from openshiftstoragelibs.gluster_ops import (
+ get_block_hosting_volume_name,
+)
from openshiftstoragelibs.heketi_ops import (
get_block_hosting_volume_list,
get_total_free_space,
@@ -18,7 +27,9 @@ from openshiftstoragelibs.heketi_ops import (
hello_heketi,
)
from openshiftstoragelibs.openshift_ops import (
+ cmd_run_on_gluster_pod_or_node,
get_default_block_hosting_volume_size,
+ restart_service_on_gluster_pod_or_node,
wait_for_service_status_on_gluster_pod_or_node,
)
from openshiftstoragelibs import podcmd
@@ -342,3 +353,77 @@ class TestBlockVolumeOps(BaseClass):
# Check if all blockhosting volumes are deleted from heketi
self.assertFalse(new_bhv_list)
+
+ @podcmd.GlustoPod()
+ def test_targetcli_when_block_hosting_volume_down(self):
+ """Validate no inconsistencies occur in targetcli when block volumes
+ are created with one block hosting volume down."""
+ h_node, h_server = self.heketi_client_node, self.heketi_server_url
+ cmd = ("targetcli ls | egrep '%s' || echo unavailable")
+ error_msg = (
+ "targetcli has inconsistencies when block devices are "
+ "created with one block hosting volume %s is down")
+
+ # Delete BHV which has no BV or fill it completely
+ bhv_list = get_block_hosting_volume_list(h_node, h_server).keys()
+ for bhv in bhv_list:
+ bhv_info = heketi_volume_info(h_node, h_server, bhv, json=True)
+ if not bhv_info["blockinfo"].get("blockvolume", []):
+ heketi_volume_delete(h_node, h_server, bhv)
+ continue
+ free_size = bhv_info["blockinfo"].get("freesize", 0)
+ if free_size:
+ bv = heketi_volume_create(
+ h_node, h_server, free_size, json=True)
+ self.addCleanup(
+ heketi_blockvolume_delete, h_node, h_server, bv["id"])
+
+ # Create BV
+ bv = heketi_blockvolume_create(h_node, h_server, 2, json=True)
+ self.addCleanup(heketi_blockvolume_delete, h_node, h_server, bv["id"])
+
+ # Bring down BHV
+ bhv_name = get_block_hosting_volume_name(h_node, h_server, bv["id"])
+ ret, out, err = volume_stop("auto_get_gluster_endpoint", bhv_name)
+ if ret != 0:
+ err_msg = "Failed to stop gluster volume %s. error: %s" % (
+ bhv_name, err)
+ g.log.error(err_msg)
+ raise AssertionError(err_msg)
+ self.addCleanup(
+ podcmd.GlustoPod()(volume_start), "auto_get_gluster_endpoint",
+ bhv_name)
+
+ ocp_node = self.ocp_master_node[0]
+ gluster_block_svc = "gluster-block-target"
+ self.addCleanup(
+ wait_for_service_status_on_gluster_pod_or_node,
+ ocp_node, gluster_block_svc,
+ "active", "exited", gluster_node=self.gluster_servers[0])
+ self.addCleanup(
+ restart_service_on_gluster_pod_or_node, ocp_node,
+ gluster_block_svc, self.gluster_servers[0])
+ for condition in ("continue", "break"):
+ restart_service_on_gluster_pod_or_node(
+ ocp_node, gluster_block_svc,
+ gluster_node=self.gluster_servers[0])
+ wait_for_service_status_on_gluster_pod_or_node(
+ ocp_node, gluster_block_svc,
+ "active", "exited", gluster_node=self.gluster_servers[0])
+
+ targetcli = cmd_run_on_gluster_pod_or_node(
+ ocp_node, cmd % bv["id"], self.gluster_servers[0])
+ if condition == "continue":
+ self.assertEqual(
+ targetcli, "unavailable", error_msg % bhv_name)
+ else:
+ self.assertNotEqual(
+ targetcli, "unavailable", error_msg % bhv_name)
+ break
+
+ # Bring up the same BHV
+ ret, out, err = volume_start("auto_get_gluster_endpoint", bhv_name)
+ if ret != 0:
+ err = "Failed to start gluster volume %s on %s. error: %s" % (
+ bhv_name, h_node, err)
+ raise exceptions.ExecutionError(err)