From 83b129f2a9a60ca4ee485ac87da6eca4540d695a Mon Sep 17 00:00:00 2001 From: SushilG96 Date: Wed, 20 May 2020 14:09:46 +0530 Subject: [Test] Add TC to Compare the brick mount status from all nodes Change-Id: I7e03acd0ddf2e14b00453af180a2b4a8c45f2832 Signed-off-by: susgupta --- .../heketi/test_server_state_examine_gluster.py | 90 ++++++++++++++++++++++ 1 file changed, 90 insertions(+) (limited to 'tests') diff --git a/tests/functional/heketi/test_server_state_examine_gluster.py b/tests/functional/heketi/test_server_state_examine_gluster.py index bb2b3d41..bbba966b 100644 --- a/tests/functional/heketi/test_server_state_examine_gluster.py +++ b/tests/functional/heketi/test_server_state_examine_gluster.py @@ -1,4 +1,7 @@ +import re + import ddt +from glustolibs.gluster import volume_ops import pytest from openshiftstoragelibs.baseclass import BaseClass @@ -7,6 +10,10 @@ from openshiftstoragelibs import heketi_ops from openshiftstoragelibs import heketi_version from openshiftstoragelibs import node_ops from openshiftstoragelibs import openshift_ops +from openshiftstoragelibs import podcmd + +G_BRICK_REGEX = r'^.*:.*\/(brick_.*)\/.*$' +H_BRICK_REGEX = r'^.*\/(brick_.*)$' @ddt.ddt @@ -180,3 +187,86 @@ class TestHeketiServerStateExamineGluster(BaseClass): self.assertEqual( examine_msg, msg, "Failed to generate error report for node {} in" " gluster examine output".format(g_node)) + + @pytest.mark.tier0 + @podcmd.GlustoPod() + def test_compare_brick_mount_status(self): + """Compare the brick mount status from all nodes""" + h_node_ip_list, h_mount_point, dev_paths = [], [], [] + g_nodes, brick_list = [], [] + cmd = "df -h {} | awk '{{print $6}}' | tail -1" + h_node, h_url = self.heketi_client_node, self.heketi_server_url + + # Create a volume and fetch the gluster volume info + vol = heketi_ops.heketi_volume_create(h_node, h_url, 1, json=True) + self.addCleanup( + heketi_ops.heketi_volume_delete, h_node, h_url, vol['id']) + vol_name = vol['name'] + g_vol_info = volume_ops.get_volume_info( + 'auto_get_gluster_endpoint', vol_name) + self.assertTrue( + g_vol_info, "Failed to get the volume info of {}".format(vol_name)) + + # Fetch bricks details from gluster vol info + for brick_detail in g_vol_info[vol_name]['bricks']['brick']: + brick = re.findall(G_BRICK_REGEX, brick_detail['name']) + self.assertTrue( + brick, "Failed to get brick for volume {}".format(vol_name)) + brick_list.append(brick[0]) + + # Extract node data from examine glusterfs + h_examine_gluster = heketi_ops.heketi_examine_gluster(h_node, h_url) + h_node_details = h_examine_gluster.get("clusters")[0].get('NodesData') + self.assertTrue( + h_node_details, + "Failed to get the node details {}".format(h_node_details)) + h_brick_details = (h_node_details[0]['VolumeInfo']['Volumes'] + ['VolumeList'][0]['Bricks']['BrickList']) + + # Fetch brick ip from examine glusterfs + for i in range(len(h_brick_details)): + node_bricks = h_brick_details[i]['Name'] + self.assertTrue( + node_bricks, + "Failed to get the node bricks data {}".format(node_bricks)) + h_node_ip_list.append(node_bricks.split(":")[0]) + + # Extract mount point and mount status + for h_node_detail in h_node_details: + for node_detail in h_node_detail['BricksMountStatus']['Statuses']: + # Fetch brick from heketi examine + brick = re.findall(H_BRICK_REGEX, node_detail['MountPoint']) + self.assertTrue( + brick, + "Failed to get the brick details from " + "{}".format(node_detail)) + + # Check if the mount point is of new volume + if brick[0] in brick_list: + dev_paths.append(node_detail['Device']) + h_mount_point.append(node_detail['MountPoint']) + h_mount_status = node_detail['Mounted'] + + # verify if the Mount status is True + self.assertTrue( + h_mount_status, + "Expecting mount status to be true but found" + " {}".format(h_mount_status)) + + h_nodes_ids = heketi_ops.heketi_node_list(h_node, h_url) + for node in h_nodes_ids: + g_node = heketi_ops.heketi_node_info( + h_node, h_url, node, json=True) + g_nodes.append(g_node['hostnames']['manage'][0]) + + # Validate mount point from heketi and gluster side + for dev_path in dev_paths: + # Fetch the mount path with respect to dev path + for g_node in g_nodes: + g_mount_point = openshift_ops.cmd_run_on_gluster_pod_or_node( + self.node, cmd.format(dev_path, g_node)) + if g_mount_point: + self.assertIn( + g_mount_point, h_mount_point, + "Failed to match mount point {} from gluster side and" + " {}".format(g_mount_point, h_mount_point)) -- cgit