diff options
Diffstat (limited to 'tests/functional/common/heketi/heketi_tests/test_create_heketi_volume_size_60.py')
-rw-r--r-- | tests/functional/common/heketi/heketi_tests/test_create_heketi_volume_size_60.py | 199 |
1 files changed, 199 insertions, 0 deletions
diff --git a/tests/functional/common/heketi/heketi_tests/test_create_heketi_volume_size_60.py b/tests/functional/common/heketi/heketi_tests/test_create_heketi_volume_size_60.py new file mode 100644 index 00000000..62448b92 --- /dev/null +++ b/tests/functional/common/heketi/heketi_tests/test_create_heketi_volume_size_60.py @@ -0,0 +1,199 @@ +#!/usr/bin/python + +from __future__ import division +import math + +from glusto.core import Glusto as g +from glustolibs.gluster.exceptions import ConfigError +from glustolibs.gluster.volume_ops import get_volume_list, get_volume_info +from cnslibs.common.heketi_libs import HeketiClientSetupBaseClass +from cnslibs.common.heketi_ops import (heketi_node_list, + heketi_node_info, + heketi_volume_create, + heketi_volume_list, + heketi_volume_info, + heketi_volume_delete, + heketi_topology_info) +from cnslibs.common import heketi_ops, podcmd +from cnslibs.common.openshift_ops import oc_rsh, get_ocp_gluster_pod_names + + +class TestHeketiVolume(HeketiClientSetupBaseClass): + + def get_free_space(self): + """ + Get free space in each devices + """ + free_spaces = [] + heketi_node_id_list = [] + device_list = [] + heketi_node_list_string = heketi_node_list( + self.heketi_client_node, self.heketi_server_url) + for line in heketi_node_list_string.strip().split("\n"): + heketi_node_id_list.append(line.strip().split( + "Cluster")[0].strip().split(":")[1]) + for node_id in heketi_node_id_list: + node_info_dict = heketi_node_info(self.heketi_client_node, + self.heketi_server_url, + node_id, json=True) + total_free_space = 0 + for device in node_info_dict["devices"]: + total_free_space += device["storage"]["free"] + free_spaces.append(total_free_space) + min_free_space = min(free_spaces) + total_free_space = sum(free_spaces)/(1024**2) + optimum_space = min_free_space / (1024 * 1024 * 10) + free_space = int(math.floor(optimum_space)) + total_free_space = int(math.floor(total_free_space)) + + return total_free_space, free_spaces + + @podcmd.GlustoPod() + def test_to_create_distribute_replicated_vol(self): + """ + Create distribute replicate heketi + volume and run heketi-cli volume info + """ + + hosts = [] + size = 610 + g.log.info("Creating a heketi volume") + out = heketi_volume_create(self.heketi_client_node, + self.heketi_server_url, + size, json=True) + self.assertTrue(out, ("Failed to create " + "heketi volume of size %s" % str(size))) + g.log.info("Successfully created heketi volume" + " of size %s" % str(size)) + volume_id = out["bricks"][0]["volume"] + self.addCleanup(self.delete_volumes, volume_id) + + # Correct the backupvol file servers are updated + gluster_servers = [] + g.log.info("Checking backupvol file servers are updated") + mount_node = (out["mount"]["glusterfs"] + ["device"].strip().split(":")[0]) + hosts.append(mount_node) + backup_volfile_server_list = (out["mount"]["glusterfs"]["options"] ["backup-volfile-servers"].strip().split(",")) + for backup_volfile_server in backup_volfile_server_list: + hosts.append(backup_volfile_server) + for gluster_server in g.config["gluster_servers"].keys(): + gluster_servers.append(g.config["gluster_servers"] + [gluster_server]["storage"]) + self.assertEqual(set(hosts), set(gluster_servers)) + g.log.info("Correctly updated backupvol file servers") + + # Retrieve heketi volume info + g.log.info("Retrieving heketi volume info") + out = heketi_ops.heketi_volume_info(self.heketi_client_node, + self.heketi_server_url, + volume_id, json=True) + self.assertTrue(out, ("Failed to get heketi volume info")) + g.log.info("Successfully got the heketi volume info") + name = out["name"] + + # Get gluster volume info + g.log.info("Get gluster volume info") + if self.deployment_type == "cns": + gluster_pod = get_ocp_gluster_pod_names( + self.heketi_client_node)[1] + p = podcmd.Pod(self.heketi_client_node, gluster_pod) + out = get_volume_info(p, volname=name) + else: + out = get_volume_info(self.heketi_client_node, + volname=name) + self.assertTrue(out, ("Failed to get volume info")) + g.log.info("Successfully got the volume info") + self.assertEqual(out[name]["typeStr"], "Distributed-Replicate", + "Not a Distributed-Replicate volume") + + @podcmd.GlustoPod() + def test_to_create_and_delete_dist_rep_vol(self): + """ + Create distribute replicate heketi + volume and delete it and check the available + space + """ + + size = 610 + g.log.info("Creating a heketi volume") + out = heketi_volume_create(self.heketi_client_node, + self.heketi_server_url, + size, json=True) + self.assertTrue(out, ("Failed to create " + "heketi volume of size %s" % str(size))) + g.log.info("Successfully created heketi volume" + " of size %s" % str(size)) + volume_id = out["bricks"][0]["volume"] + name = out["name"] + + # Get gluster volume info + g.log.info("Get gluster volume info") + if self.deployment_type == "cns": + gluster_pod = get_ocp_gluster_pod_names( + self.heketi_client_node)[1] + p = podcmd.Pod(self.heketi_client_node, gluster_pod) + out = get_volume_info(p, volname=name) + else: + out = get_volume_info(self.heketi_client_node, + volname=name) + self.assertTrue(out, ("Failed to get volume info")) + g.log.info("Successfully got the volume info") + self.assertEqual(out[name]["typeStr"], "Distributed-Replicate", + "Not a Distributed-Replicate volume") + + # Get the free space + # After creating heketi volume + free_space_after_creating_vol, _ = self.get_free_space() + + # Delete heketi volumes of size 60gb which was created + g.log.info("Deleting heketi volumes") + out = heketi_volume_delete(self.heketi_client_node, + self.heketi_server_url, + volume_id) + if not out: + raise ExecutionError("Failed to delete " + "heketi volume %s" % volume_id) + g.log.info("Heketi volume successfully deleted %s" % out) + + # Check the heketi volume list + g.log.info("List heketi volumes") + volumes = heketi_volume_list(self.heketi_client_node, + self.heketi_server_url, + json=True) + self.assertTrue(volumes, ("Failed to list heketi volumes")) + g.log.info("Heketi volumes successfully listed") + + # Check the gluster volume list + g.log.info("Get the gluster volume list") + if self.deployment_type == "cns": + gluster_pod = get_ocp_gluster_pod_names( + self.heketi_client_node)[1] + p = podcmd.Pod(self.heketi_client_node, gluster_pod) + out = get_volume_list(p) + else: + out = get_volume_list(self.heketi_client_node) + self.assertTrue(out, ("Unable to get volume list")) + g.log.info("Successfully got the volume list" % out) + + # Check the volume count are equal + if (len(volumes["volumes"]) != len(out)): + raise ExecutionError("Heketi volume list %s is" + " not equal to gluster" + " volume list %s" % ((volumes), (out))) + g.log.info("Heketi volumes list %s and" + " gluster volumes list %s" % ((volumes), (out))) + + # Get the used space + # After deleting heketi volume + free_space_after_deleting_vol, _ = self.get_free_space() + + # Compare the free size before and after deleting volume + g.log.info("Comparing the free space before and after" + " deleting volume") + self.assertTrue(free_space_after_creating_vol < free_space_after_deleting_vol) + g.log.info("Volume successfully deleted and space is" + " reallocated. Free space after creating" + " volume %s, Free space after deleting" + " volume %s" % ((free_space_after_creating_vol), + (free_space_after_deleting_vol))) |