summaryrefslogtreecommitdiffstats
path: root/tests/functional/common/provisioning/test_pv_resize.py
diff options
context:
space:
mode:
authorApeksha D Khakharia <akhakhar@redhat.com>2018-05-18 18:21:08 +0530
committerApeksha D Khakharia <akhakhar@redhat.com>2018-10-18 13:05:39 +0530
commitf3bf3c89c5c2ab0117ac5723c60ec4692ab5e334 (patch)
treefa90b54aa9d25712eb58d770127d0a7fdecf9f7b /tests/functional/common/provisioning/test_pv_resize.py
parent8c53dc0b520d88513598c3e8e06a40e1e3a64f7c (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.py129
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))