diff options
Diffstat (limited to 'tests')
| -rwxr-xr-x | tests/functional/arbiter/test_arbiter.py | 71 | 
1 files changed, 71 insertions, 0 deletions
diff --git a/tests/functional/arbiter/test_arbiter.py b/tests/functional/arbiter/test_arbiter.py index 8cbd621a..f8970ac1 100755 --- a/tests/functional/arbiter/test_arbiter.py +++ b/tests/functional/arbiter/test_arbiter.py @@ -4,12 +4,14 @@ import ddt  from glusto.core import Glusto as g  from glustolibs.gluster import volume_ops  import pytest +from unittest import skip  from openshiftstoragelibs import baseclass  from openshiftstoragelibs import exceptions  from openshiftstoragelibs import gluster_ops  from openshiftstoragelibs import heketi_ops  from openshiftstoragelibs import heketi_version +from openshiftstoragelibs import node_ops  from openshiftstoragelibs import openshift_ops  from openshiftstoragelibs import openshift_version  from openshiftstoragelibs import podcmd @@ -1489,3 +1491,72 @@ class TestArbiterVolumeCreateExpandDelete(baseclass.BaseClass):              "greater than  arbiter brick size {} before volume "              "expansion".format(                  arbiter_brick_size_after, arbiter_brick_size_before)) + +    @skip("Blocked by BZ-1848895") +    @pytest.mark.tier2 +    def test_poweroff_gluster_nodes_after_filling_inodes_arbiter_brick(self): +        """Validate io after filling up the arbiter brick and node poweroff""" + +        # Create sc with gluster arbiter info +        sc_name = self.create_storage_class(is_arbiter_vol=True) + +        # Get list of all gluster nodes and mark them unschedulable +        g_nodes = openshift_ops.oc_get_custom_resource( +            self.node, 'pod', ':.spec.nodeName', selector='glusterfs-node=pod') +        g_nodes = [node[0] for node in g_nodes] +        openshift_ops.oc_adm_manage_node( +            self.node, '--schedulable=false', nodes=g_nodes) +        self.addCleanup(openshift_ops.oc_adm_manage_node, +                        self.node, '--schedulable=true', nodes=g_nodes) + +        # Create PVC and corresponding App pod +        self.create_and_wait_for_pvc(sc_name=sc_name) +        dc_name, pod_name = self.create_dc_with_pvc( +            self.pvc_name, is_busybox=True) + +        # Get vol info +        vol_info = openshift_ops.get_gluster_vol_info_by_pvc_name( +            self.node, self.pvc_name) +        vol_name = vol_info['gluster_vol_id'] +        bricks_list = ( +            self.verify_amount_and_proportion_of_arbiter_and_data_bricks( +                vol_info)) +        arbiter_brick = bricks_list['arbiter_list'][0]['name'].split(":")[1] + +        # Fetch the host ip of the arbiter brick and free inodes data +        hosts_with_inodes_info = ( +            gluster_ops.get_gluster_vol_free_inodes_with_hosts_of_bricks( +                vol_name)) +        for node_ip, inodes_info in hosts_with_inodes_info.items(): +            for brick, inodes in inodes_info.items(): +                if arbiter_brick == brick: +                    arb_free_inodes = inodes +                    break + +        # Create masterfile of size equal to free inodes in bytes +        mount_path, filename = "/mnt/", "masterfile" +        dd_cmd = ( +            "dd if=/dev/urandom of={}{} bs=1 count={}".format( +                mount_path, filename, arb_free_inodes)) +        ret, out, err = openshift_ops.oc_rsh(self.node, pod_name, dd_cmd) +        self.assertFalse(ret, "Failed to execute command {} on pod {}".format( +                         dd_cmd, pod_name)) + +        # Split masterfile to a number which is equal to free inodes +        split_cmd = ( +            "oc exec {} -- /bin/sh -c 'cd {}; split -b 1 -a 10 {}'".format( +                pod_name, mount_path, filename)) +        self.cmd_run(split_cmd) + +        # Poweroff the node with arbiter brick +        target_ip = bricks_list['data_list'][0]['name'].split(":")[0] +        target_vm_name = node_ops.find_vm_name_by_ip_or_hostname(target_ip) +        self.power_off_gluster_node_vm(target_vm_name, target_ip) + +        # Create a file with text test +        file_cmd = ("oc exec {} -- /bin/sh -c \"echo 'test' > " +                    "/mnt/file\"".format(pod_name)) +        self.cmd_run(file_cmd) + +        # Power on gluster node and wait for the services to be up +        self.power_on_gluster_node_vm(target_vm_name, target_ip)  | 
