From aea011ba00315fc7771808d4192824d36679ce77 Mon Sep 17 00:00:00 2001 From: Valerii Ponomarov Date: Wed, 26 Dec 2018 21:49:08 +0530 Subject: Refactor and enable 'test_device_remove_basic_validation' tc It was skipped some time ago due to the bug. Now this bug is fixed. So, we need to unskip it. So, do it, in addition to the required refactor. Change-Id: I7c426e9cd3dc38ed48e5b91870bc10bd63998694 --- .../common/heketi/test_heketi_device_operations.py | 52 ++++++++++-- .../common/heketi/test_heketi_volume_operations.py | 96 ---------------------- 2 files changed, 43 insertions(+), 105 deletions(-) (limited to 'tests') diff --git a/tests/functional/common/heketi/test_heketi_device_operations.py b/tests/functional/common/heketi/test_heketi_device_operations.py index 202da90f..718ed80b 100644 --- a/tests/functional/common/heketi/test_heketi_device_operations.py +++ b/tests/functional/common/heketi/test_heketi_device_operations.py @@ -1,5 +1,6 @@ import json +import ddt from glusto.core import Glusto as g from cnslibs.common.heketi_libs import HeketiBaseClass @@ -17,6 +18,7 @@ from cnslibs.common.heketi_ops import (heketi_node_enable, heketi_topology_info) +@ddt.ddt class TestHeketiDeviceOperations(HeketiBaseClass): """Test Heketi device enable/disable and remove functionality.""" @@ -168,8 +170,10 @@ class TestHeketiDeviceOperations(HeketiBaseClass): "None of '%s' volume bricks is present on the '%s' device." % ( vol_info['id'], online_device_id)) - def test_device_remove_operation(self): - """Test case CNS-766. Test device remove functionality.""" + @ddt.data(True, False) + def test_device_remove_operation(self, delete_device): + """Test cases CNS-623,766.""" + gluster_server_0 = g.config["gluster_servers"].values()[0] try: device_name = gluster_server_0["additional_devices"][0] @@ -206,6 +210,7 @@ class TestHeketiDeviceOperations(HeketiBaseClass): device["storage"]["total"] < lowest_device_size): lowest_device_size = device["storage"]["total"] lowest_device_id = device["id"] + lowest_device_name = device["name"] if lowest_device_id is None: self.skipTest( "Didn't find suitable device for disablement on '%s' node." % ( @@ -260,15 +265,41 @@ class TestHeketiDeviceOperations(HeketiBaseClass): # Need to disable device before removing heketi_device_disable( - self.heketi_client_node, self.heketi_server_url, lowest_device_id) - self.addCleanup(heketi_device_enable, self.heketi_client_node, - self.heketi_server_url, lowest_device_id) + self.heketi_client_node, self.heketi_server_url, + lowest_device_id) + if not delete_device: + self.addCleanup(heketi_device_enable, self.heketi_client_node, + self.heketi_server_url, lowest_device_id) # Remove device from Heketi - heketi_device_remove( - self.heketi_client_node, self.heketi_server_url, lowest_device_id) - self.addCleanup(heketi_device_disable, self.heketi_client_node, - self.heketi_server_url, lowest_device_id) + try: + heketi_device_remove( + self.heketi_client_node, self.heketi_server_url, + lowest_device_id) + except Exception: + if delete_device: + self.addCleanup(heketi_device_enable, self.heketi_client_node, + self.heketi_server_url, lowest_device_id) + raise + if not delete_device: + self.addCleanup(heketi_device_disable, self.heketi_client_node, + self.heketi_server_url, lowest_device_id) + + if delete_device: + try: + heketi_device_delete( + self.heketi_client_node, self.heketi_server_url, + lowest_device_id) + except Exception: + self.addCleanup(heketi_device_enable, self.heketi_client_node, + self.heketi_server_url, lowest_device_id) + self.addCleanup(heketi_device_disable, self.heketi_client_node, + self.heketi_server_url, lowest_device_id) + raise + self.addCleanup( + heketi_device_add, + self.heketi_client_node, self.heketi_server_url, + lowest_device_name, node_id) # Create volume vol_info = heketi_volume_create(self.heketi_client_node, @@ -278,6 +309,9 @@ class TestHeketiDeviceOperations(HeketiBaseClass): "Failed to create heketi volume of size %d" % vol_size)) self.addCleanup(self.delete_volumes, vol_info['id']) + if delete_device: + return + # Check that none of volume's bricks is present on the device present = self.check_any_of_bricks_present_in_device( vol_info['bricks'], lowest_device_id) diff --git a/tests/functional/common/heketi/test_heketi_volume_operations.py b/tests/functional/common/heketi/test_heketi_volume_operations.py index ac7df139..404d11cb 100644 --- a/tests/functional/common/heketi/test_heketi_volume_operations.py +++ b/tests/functional/common/heketi/test_heketi_volume_operations.py @@ -5,7 +5,6 @@ from cnslibs.common.heketi_ops import (heketi_volume_delete, heketi_volume_create, heketi_volume_expand, heketi_volume_info, - heketi_topology_info, heketi_device_add, heketi_device_enable, heketi_device_disable, @@ -229,98 +228,3 @@ class TestHeketiVolumeOperations(HeketiBaseClass): self.assertNotEqual( device_enable, False, "Device %s could not be enabled" % device["id"]) - - @skip("Blocked by BZ-1629889") - def test_device_remove_basic_validation(self): - """ - Test to create volume after a device removal and with new device added. - """ - - vol_info = heketi_volume_create(self.heketi_client_node, - self.heketi_server_url, - self.volume_size, json=True) - self.assertTrue(vol_info, ("Failed to create heketi volume of size %s" - % self.volume_size)) - self.addCleanup(self.volume_cleanup, vol_info['id']) - - self.assertEqual(vol_info['size'], self.volume_size, - ("Failed to create volume with default options." - "Expected Size: %s, Actual Size: %s" - % (self.volume_size, vol_info['size']))) - - # 1. Device addition - gluster_srvrs = self.gluster_servers - - device_name = (g.config["gluster_servers"][gluster_srvrs[0]] - ["additional_devices"][0]) - manage_hostname = (g.config["gluster_servers"] - [gluster_srvrs[0]]["manage"]) - # Now, get node id of corresponding hostname - topo_info = heketi_topology_info(self.heketi_client_node, - self.heketi_server_url, - json=True) - - self.assertNotEqual( - topo_info["clusters"][0]["nodes"], [], - "Nodes don't exist, empty cluster") - - node_id = None - for node in topo_info["clusters"][0]["nodes"]: - if manage_hostname == node['hostnames']["manage"][0]: - node_id = node["id"] - break - self.assertNotEqual( - node_id, None, - "No information about node_id for %s" % manage_hostname) - self.add_device(device_name, node_id) - - # get other device id for deletion - topo_info = heketi_topology_info(self.heketi_client_node, - self.heketi_server_url, - json=True) - - self.assertNotEqual( - topo_info["clusters"][0]["nodes"], [], - "No information about nodes") - - device_id_flag1 = False - device_id_flag2 = False - - for node in topo_info["clusters"][0]["nodes"]: - if node["id"] != node_id: - continue - self.assertNotEqual( - node["devices"], [], - "Device list empty for node %s" % node_id) - for device in node["devices"]: - device_id = device["id"] - if device_name != device["name"]: - device_id_flag1 = True - else: - self.addCleanup(self.detach_devices_attached, device_id) - device_id_flag2 = True - if device_id_flag1 and device_id_flag2: - break - break - - self.detach_devices_attached(device_id) - - # Check whether deleted device removed from topology info. - topo_info = heketi_topology_info(self.heketi_client_node, - self.heketi_server_url, - json=True) - match = False - for device in topo_info["clusters"][0]["nodes"][0]["devices"]: - if device_id == device["id"]: - match = True - break - self.assertFalse(match, "Device:%s still present in topology" - % device_id) - - # Volume creation after device update - vol_info = heketi_volume_create(self.heketi_client_node, - self.heketi_server_url, - self.volume_size, json=True) - self.assertTrue(vol_info, ("Failed to create heketi volume of size %s" - % self.volume_size)) - self.addCleanup(self.volume_cleanup, vol_info['id']) -- cgit