diff options
author | Apeksha D Khakharia <akhakhar@redhat.com> | 2018-05-18 18:21:08 +0530 |
---|---|---|
committer | Apeksha D Khakharia <akhakhar@redhat.com> | 2018-10-18 13:05:39 +0530 |
commit | f3bf3c89c5c2ab0117ac5723c60ec4692ab5e334 (patch) | |
tree | fa90b54aa9d25712eb58d770127d0a7fdecf9f7b /tests/functional/common/provisioning/test_pv_resize.py | |
parent | 8c53dc0b520d88513598c3e8e06a40e1e3a64f7c (diff) |
CNS: adding libraries and 2 testcases for pv resize
Change-Id: Idae22a28e4da867fd0567cbec49760d6f3a374f6
Signed-off-by: Apeksha D Khakharia <akhakhar@redhat.com>
Diffstat (limited to 'tests/functional/common/provisioning/test_pv_resize.py')
-rw-r--r-- | tests/functional/common/provisioning/test_pv_resize.py | 129 |
1 files changed, 129 insertions, 0 deletions
diff --git a/tests/functional/common/provisioning/test_pv_resize.py b/tests/functional/common/provisioning/test_pv_resize.py new file mode 100644 index 00000000..1e92efe9 --- /dev/null +++ b/tests/functional/common/provisioning/test_pv_resize.py @@ -0,0 +1,129 @@ +import ddt +from cnslibs.common.cns_libs import ( + enable_pvc_resize) +from cnslibs.common.heketi_ops import ( + verify_volume_name_prefix) +from cnslibs.common.openshift_ops import ( + resize_pvc, + get_pod_name_from_dc, + get_pv_name_from_pvc, + oc_create_app_dc_with_io, + oc_create_pvc, + oc_create_secret, + oc_create_sc, + oc_delete, + oc_rsh, + oc_version, + scale_dc_pod_amount_and_wait, + verify_pv_size, + verify_pvc_size, + verify_pvc_status_is_bound, + wait_for_pod_be_ready, + wait_for_resource_absence) +from cnslibs.cns.cns_baseclass import CnsBaseClass +from glusto.core import Glusto as g + + +@ddt.ddt +class TestPvResizeClass(CnsBaseClass): + ''' + Class that contain test cases for + pv resize + ''' + @classmethod + def setUpClass(cls): + super(TestPvResizeClass, cls).setUpClass() + version = oc_version(cls.ocp_master_node[0]) + if any(v in version for v in ("3.6", "3.7", "3.8")): + return + enable_pvc_resize(cls.ocp_master_node[0]) + + def setUp(self): + super(TestPvResizeClass, self).setUp() + version = oc_version(self.ocp_master_node[0]) + if any(v in version for v in ("3.6", "3.7", "3.8")): + msg = ("pv resize is not available in openshift " + "version %s " % version) + g.log.error(msg) + raise self.skipTest(msg) + + def _create_storage_class(self, volname_prefix=False): + sc = self.cns_storage_class['storage_class1'] + secret = self.cns_secret['secret1'] + + # create secret + self.secret_name = oc_create_secret( + self.ocp_master_node[0], + namespace=secret['namespace'], + data_key=self.heketi_cli_key, + secret_type=secret['type']) + self.addCleanup( + oc_delete, self.ocp_master_node[0], 'secret', self.secret_name) + + # create storageclass + self.sc_name = oc_create_sc( + self.ocp_master_node[0], provisioner='kubernetes.io/glusterfs', + resturl=sc['resturl'], restuser=sc['restuser'], + secretnamespace=sc['secretnamespace'], + secretname=self.secret_name, + allow_volume_expansion=True, + **({"volumenameprefix": sc['volumenameprefix']} + if volname_prefix else {}) + ) + self.addCleanup(oc_delete, self.ocp_master_node[0], 'sc', self.sc_name) + + return self.sc_name + + @ddt.data(False, True) + def test_pv_resize_with_prefix_for_name(self, volname_prefix=False): + """testcases CNS-1037 and CNS-1038 """ + dir_path = "/mnt/" + self._create_storage_class(volname_prefix) + node = self.ocp_master_node[0] + + # Create PVC + pvc_name = oc_create_pvc(node, self.sc_name, pvc_size=1) + self.addCleanup(wait_for_resource_absence, + node, 'pvc', pvc_name) + self.addCleanup(oc_delete, node, 'pvc', pvc_name) + verify_pvc_status_is_bound(node, pvc_name) + + # Create DC with POD and attached PVC to it. + dc_name = oc_create_app_dc_with_io(node, pvc_name) + self.addCleanup(oc_delete, node, 'dc', dc_name) + self.addCleanup(scale_dc_pod_amount_and_wait, + node, dc_name, 0) + + pod_name = get_pod_name_from_dc(node, dc_name) + wait_for_pod_be_ready(node, pod_name) + if volname_prefix: + storage_class = self.cns_storage_class['storage_class1'] + ret = verify_volume_name_prefix(node, + storage_class['volumenameprefix'], + storage_class['secretnamespace'], + pvc_name, self.heketi_server_url) + self.assertTrue(ret, "verify volnameprefix failed") + cmd = ("dd if=/dev/urandom of=%sfile " + "bs=100K count=1000") % dir_path + ret, out, err = oc_rsh(node, pod_name, cmd) + self.assertEqual(ret, 0, "failed to execute command %s on %s" % ( + cmd, node)) + cmd = ("dd if=/dev/urandom of=%sfile2 " + "bs=100K count=10000") % dir_path + ret, out, err = oc_rsh(node, pod_name, cmd) + self.assertNotEqual(ret, 0, " This IO did not fail as expected " + "command %s on %s" % (cmd, node)) + pvc_size = 2 + resize_pvc(node, pvc_name, pvc_size) + verify_pvc_size(node, pvc_name, pvc_size) + pv_name = get_pv_name_from_pvc(node, pvc_name) + verify_pv_size(node, pv_name, pvc_size) + oc_delete(node, 'pod', pod_name) + wait_for_resource_absence(node, 'pod', pod_name) + pod_name = get_pod_name_from_dc(node, dc_name) + wait_for_pod_be_ready(node, pod_name) + cmd = ("dd if=/dev/urandom of=%sfile_new " + "bs=50K count=10000") % dir_path + ret, out, err = oc_rsh(node, pod_name, cmd) + self.assertEqual(ret, 0, "failed to execute command %s on %s" % ( + cmd, node)) |