summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorValerii Ponomarov <vponomar@redhat.com>2018-11-30 11:27:00 +0000
committerGerrit Code Review <gerrit2@gerrit.host.prod.eng.bos.redhat.com>2018-11-30 11:27:00 +0000
commit18a5901e5be6ed505a9416a9c29ae4573248d104 (patch)
treef7f11c2030ca7945bc916abd98cf787ea2e5d6d4 /tests
parentd6e6bc2b8b7a4c67740b117369cd2224599da34e (diff)
parent1bde809ae7286d1dfbe1a69c07fd02e908689804 (diff)
Merge "[CNS-928] Create PVC using default Storage Class"
Diffstat (limited to 'tests')
-rw-r--r--tests/functional/common/provisioning/test_dynamic_provisioning_p0_cases.py55
1 files changed, 55 insertions, 0 deletions
diff --git a/tests/functional/common/provisioning/test_dynamic_provisioning_p0_cases.py b/tests/functional/common/provisioning/test_dynamic_provisioning_p0_cases.py
index bcd4575b..6d789aa3 100644
--- a/tests/functional/common/provisioning/test_dynamic_provisioning_p0_cases.py
+++ b/tests/functional/common/provisioning/test_dynamic_provisioning_p0_cases.py
@@ -490,3 +490,58 @@ class TestDynamicProvisioningP0(CnsBaseClass):
oc_delete(self.node, 'pv', pv_name)
wait_for_resource_absence(self.node, 'pv', pv_name)
+
+ def test_usage_of_default_storage_class(self):
+ """Test case CNS-928"""
+
+ # Unset 'default' option from all the existing Storage Classes
+ unset_sc_annotation_cmd = (
+ r"""oc annotate sc %s """
+ r""""storageclass%s.kubernetes.io/is-default-class"-""")
+ set_sc_annotation_cmd = (
+ r"""oc patch storageclass %s -p'{"metadata": {"annotations": """
+ r"""{"storageclass%s.kubernetes.io/is-default-class": "%s"}}}'""")
+ get_sc_cmd = (
+ r'oc get sc --no-headers '
+ r'-o=custom-columns=:.metadata.name,'
+ r':".metadata.annotations.storageclass\.'
+ r'kubernetes\.io\/is-default-class",:".metadata.annotations.'
+ r'storageclass\.beta\.kubernetes\.io\/is-default-class"')
+ sc_list = self.cmd_run(get_sc_cmd)
+ for sc in sc_list.split("\n"):
+ sc = sc.split()
+ if len(sc) != 3:
+ self.skipTest(
+ "Unexpected output for list of storage classes. "
+ "Following is expected to contain 3 keys:: %s" % sc)
+ for value, api_type in ((sc[1], ''), (sc[2], '.beta')):
+ if value == '<none>':
+ continue
+ self.cmd_run(unset_sc_annotation_cmd % (sc[0], api_type))
+ self.addCleanup(
+ self.cmd_run,
+ set_sc_annotation_cmd % (sc[0], api_type, value))
+
+ # Create new SC
+ prefix = "autotests-default-sc"
+ self._create_storage_class(prefix)
+
+ # Make new SC be the default one and sleep for 1 sec to avoid races
+ self.cmd_run(set_sc_annotation_cmd % (self.sc_name, '', 'true'))
+ self.cmd_run(set_sc_annotation_cmd % (self.sc_name, '.beta', 'true'))
+ time.sleep(1)
+
+ # Create PVC without specification of SC
+ pvc_name = oc_create_pvc(
+ self.node, sc_name=None, pvc_name_prefix=prefix)
+ self.addCleanup(
+ wait_for_resource_absence, self.node, 'pvc', pvc_name)
+ self.addCleanup(oc_delete, self.node, 'pvc', pvc_name)
+
+ # Wait for successful creation of PVC and check its SC
+ verify_pvc_status_is_bound(self.node, pvc_name)
+ get_sc_of_pvc_cmd = (
+ "oc get pvc %s --no-headers "
+ "-o=custom-columns=:.spec.storageClassName" % pvc_name)
+ out = self.cmd_run(get_sc_of_pvc_cmd)
+ self.assertEqual(out, self.sc_name)