From 1c378d2f3f5d97583ec3310a14679035a967a9e3 Mon Sep 17 00:00:00 2001 From: Apeksha D Khakharia Date: Tue, 28 Aug 2018 13:46:44 +0530 Subject: CNS: adding testcases for storage class CNS-708,709,713,714,715 Change-Id: I61965e6d8b17b4bb49b10ebe26140945da9c4576 Signed-off-by: Apeksha D Khakharia --- cns-libs/cnslibs/common/dynamic_provisioning.py | 8 ++- cns-libs/cnslibs/common/openshift_ops.py | 2 +- .../provisioning/test_storage_class_cases.py | 71 ++++++++++++++++++++++ 3 files changed, 78 insertions(+), 3 deletions(-) create mode 100644 tests/functional/common/provisioning/test_storage_class_cases.py diff --git a/cns-libs/cnslibs/common/dynamic_provisioning.py b/cns-libs/cnslibs/common/dynamic_provisioning.py index 288d6245..70dffa4f 100644 --- a/cns-libs/cnslibs/common/dynamic_provisioning.py +++ b/cns-libs/cnslibs/common/dynamic_provisioning.py @@ -412,9 +412,13 @@ def verify_pvc_status_is_bound(hostname, pvc_name, timeout=120, wait_step=3): msg = "PVC %s has different status - %s" % (pvc_name, output) g.log.error(msg) if msg: - raise exceptions.ExecutionError(msg) + raise AssertionError(msg) if w.expired: + # for debug purpose to see why provisioning failed + cmd = "oc describe pvc %s | grep ProvisioningFailed" % pvc_name + ret, out, err = g.run(hostname, cmd, "root") + g.log.info("cmd %s - out- %s err- %s" % (cmd, out, err)) msg = ("Exceeded timeout of '%s' seconds for verifying PVC '%s' " "to reach the 'Bound' status." % (timeout, pvc_name)) g.log.error(msg) - raise exceptions.ExecutionError(msg) + raise AssertionError(msg) diff --git a/cns-libs/cnslibs/common/openshift_ops.py b/cns-libs/cnslibs/common/openshift_ops.py index 50bfc4f4..bbfa4947 100644 --- a/cns-libs/cnslibs/common/openshift_ops.py +++ b/cns-libs/cnslibs/common/openshift_ops.py @@ -249,7 +249,7 @@ def oc_create_sc(hostname, sc_name_prefix="autotests-sc", 'resturl', 'secretnamespace', 'restuser', 'secretname', 'restauthenabled', 'restsecretnamespace', 'restsecretname', 'hacount', 'clusterids', 'chapauthenabled', 'volumenameprefix', - 'volumeoptions', + 'volumeoptions', 'volumetype' ) for parameter in parameters.keys(): if parameter.lower() not in allowed_parameters: diff --git a/tests/functional/common/provisioning/test_storage_class_cases.py b/tests/functional/common/provisioning/test_storage_class_cases.py new file mode 100644 index 00000000..283b5440 --- /dev/null +++ b/tests/functional/common/provisioning/test_storage_class_cases.py @@ -0,0 +1,71 @@ +import ddt +from glusto.core import Glusto as g + +from cnslibs.cns import cns_baseclass +from cnslibs.common.dynamic_provisioning import ( + verify_pvc_status_is_bound, +) +from cnslibs.common.openshift_ops import ( + oc_create_pvc, + oc_create_sc, + oc_create_secret, + oc_delete, + wait_for_resource_absence, +) + + +@ddt.ddt +class TestStorageClassCases(cns_baseclass.CnsBaseClass): + + @ddt.data( + {"volumetype": "dist-rep:3"}, + {"resturl": "http://10.0.0.1:8080"}, + {"secretname": "fakesecretname"}, + {"secretnamespace": "fakenamespace"}, + {"restuser": "fakeuser"}, + ) + def test_sc_glusterfile_incorrect_parameter( + self, parameter={}): + # Polarion testcase id- CNS-708,709,713,714,715 + + sc = self.cns_storage_class['storage_class1'] + secret = self.cns_secret['secret1'] + # Create secret file for usage in storage class + 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) + + sc_parameter = { + "resturl": sc['resturl'], + "secretnamespace": sc['secretnamespace'], + "secretname": self.secret_name, + "restuser": sc['restuser'], + "volumetype": "replicate:3" + } + sc_parameter.update(parameter) + + # Create storage class + self.sc_name = oc_create_sc( + self.ocp_master_node[0], **sc_parameter) + self.addCleanup(oc_delete, self.ocp_master_node[0], 'sc', self.sc_name) + + # Create PVC + self.pvc_name = oc_create_pvc(self.ocp_client[0], self.sc_name) + self.addCleanup( + wait_for_resource_absence, self.ocp_master_node[0], + 'pvc', self.pvc_name) + self.addCleanup(oc_delete, self.ocp_master_node[0], + 'pvc', self.pvc_name) + + try: + verify_pvc_status_is_bound(self.ocp_master_node[0], self.pvc_name) + except AssertionError: + g.log.info("pvc %s is not in bound state as expected" % ( + self.pvc_name)) + else: + err_msg = ("pvc %s in bound state, was expected to fail" % ( + self.pvc_name)) + g.log.error(err_msg) + raise AssertionError(err_msg) -- cgit