def test_pvc_deletion_measurement_performance(self, teardown_factory, pvc_size): """ Measuring PVC deletion time is within supported limits """ logging.info('Start creating new PVC') pvc_obj = helpers.create_pvc(sc_name=self.sc_obj.name, size=pvc_size) helpers.wait_for_resource_state(pvc_obj, constants.STATUS_BOUND) pvc_obj.reload() pv_name = pvc_obj.backed_pv pvc_reclaim_policy = pvc_obj.reclaim_policy teardown_factory(pvc_obj) pvc_obj.delete() logging.info('Start deletion of PVC') pvc_obj.ocp.wait_for_delete(pvc_obj.name) if pvc_reclaim_policy == constants.RECLAIM_POLICY_DELETE: helpers.validate_pv_delete(pvc_obj.backed_pv) delete_time = helpers.measure_pvc_deletion_time( self.interface, pv_name) # Deletion time for CephFS PVC is a little over 3 seconds deletion_time = 4 if self.interface == constants.CEPHFILESYSTEM else 3 logging.info(f"PVC deleted in {delete_time} seconds") if delete_time > deletion_time: raise ex.PerformanceException( f"PVC deletion time is {delete_time} and greater than {deletion_time} second" ) push_to_pvc_time_dashboard(self.interface, "deletion", delete_time)
def finalizer(): """ Delete the resources created in the test """ for instance in instances[::-1]: if not instance.is_deleted: instance.delete() instance.ocp.wait_for_delete(instance.name) if instance.kind == constants.PVC: if instance.reclaim_policy == constants.RECLAIM_POLICY_DELETE: helpers.validate_pv_delete(instance.backed_pv)
def finalizer(): """ Delete multiple PVCs """ if hasattr(class_instance, 'pvc_objs'): for pvc_obj in class_instance.pvc_objs: pvc_obj.reload() backed_pv_name = pvc_obj.backed_pv pvc_obj.delete() for pvc_obj in class_instance.pvc_objs: pvc_obj.ocp.wait_for_delete(pvc_obj.name) helpers.validate_pv_delete(backed_pv_name)
def cleanup(self): """ Removes resources created during test execution and verifies the reclaim policy is honored """ pod_objs = pod.get_all_pods(namespace=self.namespace) if len(pod_objs) > 0: for pod_obj in pod_objs: pod_obj.delete() pod_obj.ocp.wait_for_delete(resource_name=pod_obj.name) if hasattr(self, 'pvc_obj'): pv_obj = self.pvc_obj.backed_pv_obj self.pvc_obj.delete() try: assert helpers.validate_pv_delete(pv_obj.name) except AssertionError: if self.reclaim_policy == constants.RECLAIM_POLICY_RETAIN: helpers.wait_for_resource_state(pv_obj, constants.STATUS_RELEASED) # TODO: deletion of ceph rbd image, blocked by BZ#1723656 pv_obj.delete() else: raise UnexpectedBehaviour( f"PV {pv_obj.name} is not deleted after deleting PVC") if hasattr(self, 'sc_obj'): self.sc_obj.delete()
def verify_pv_not_exists(pvc_obj, cbp_name, rbd_image_id): """ Ensure that pv does not exists """ # Validate on ceph side logger.info(f"Verifying PV {pvc_obj.backed_pv} exists on backend") status = helpers.verify_volume_deleted_in_backend( interface=constants.CEPHBLOCKPOOL, image_uuid=rbd_image_id, pool_name=cbp_name) if not status: raise UnexpectedBehaviour(f"PV {pvc_obj.backed_pv} exists on backend") logger.info(f"Expected: PV {pvc_obj.backed_pv} " f"doesn't exist on backend after deleting PVC") # Validate on oc side logger.info("Verifying whether PV is deleted") try: assert helpers.validate_pv_delete(pvc_obj.backed_pv) except AssertionError as ecf: assert "not found" in str(ecf), ( f"Unexpected: PV {pvc_obj.backed_pv} still exists") logger.info(f"Expected: PV should not be found " f"after deleting corresponding PVC")
def cleanup(self): """ Removes resources created in dynamic_pvc_base() and verifies the reclaim policy is honored """ if hasattr(self, 'pvc_obj'): pv_obj = self.pvc_obj.backed_pv_obj self.pvc_obj.delete() try: assert helpers.validate_pv_delete(pv_obj.name) except AssertionError: if self.reclaim_policy == constants.RECLAIM_POLICY_RETAIN: assert helpers.wait_for_resource_state( pv_obj, constants.STATUS_RELEASED) # TODO: deletion of ceph rbd image, blocked by BZ#1723656 pv_obj.delete() else: raise UnexpectedBehaviour( f"PV {pv_obj.name} is not deleted after deleting PVC") if hasattr(self, 'sc_obj'): self.sc_obj.delete()
def finalizer(): for instance in pvcs: if not instance.is_deleted: instance.delete() instance.ocp.wait_for_delete( instance.name ) assert helpers.validate_pv_delete(instance.backed_pv)
def teardown_fs(): global CEPHFS_PVC_OBJ, CEPHFS_POD_OBJ log.info('deleting cephfs pod') CEPHFS_POD_OBJ.delete() log.info('deleting cephfs pvc') CEPHFS_PVC_OBJ.delete() assert helpers.validate_pv_delete(CEPHFS_PVC_OBJ.backed_pv) log.info("Deleting CEPHFS Secret") CEPHFS_SECRET_OBJ.delete() log.info("Deleting CephFS Storageclass") CEPHFS_SC_OBJ.delete()
def teardown_rbd(): """ Tearing down the environment Deleting pod,replicated pool,pvc,storageclass,secret of rbd """ global RBD_PVC_OBJ, RBD_POD_OBJ log.info('deleting rbd pod') RBD_POD_OBJ.delete() log.info("Deleting RBD PVC") RBD_PVC_OBJ.delete() assert helpers.validate_pv_delete(RBD_PVC_OBJ.backed_pv) log.info("Deleting CEPH BLOCK POOL") RBD_POOL.delete() log.info("Deleting RBD Secret") RBD_SECRET_OBJ.delete() log.info("Deleting RBD Storageclass") RBD_SC_OBJ.delete()
def finalizer(): """ Delete the resources created during the test """ failed_to_delete = [] for resource_type in pod, pvc, storageclass: for resource in resource_type: resource.delete() try: resource.ocp.wait_for_delete(resource.name) except TimeoutError: failed_to_delete.append(resource) if resource.kind == constants.PVC: log.info("Checking whether PV is deleted") assert helpers.validate_pv_delete(resource.backed_pv) if failed_to_delete: raise ResourceLeftoversException( f"Failed to delete resources: {failed_to_delete}")