def test_delete(self): """ Test the delete of a vDisk - Create 2 vDisks with identical names on 2 different vPools - Delete 1st vDisk and verify other still remains on correct vPool - Delete 2nd vDisk and verify no more volumes left """ structure = DalHelper.build_dal_structure({ 'vpools': [1, 2], 'domains': [1], 'storagerouters': [1], 'storagedrivers': [(1, 1, 1), (2, 2, 1)], # (<id>, <vpool_id>, <storagerouter_id>) 'mds_services': [(1, 1), (2, 2)] } # (<id>, <storagedriver_id>) ) domains = structure['domains'] storagedrivers = structure['storagedrivers'] vdisk1 = VDisk( VDiskController.create_new( volume_name='vdisk_1', volume_size=1024**3, storagedriver_guid=storagedrivers[1].guid)) vdisk2 = VDisk( VDiskController.create_new( volume_name='vdisk_1', volume_size=1024**3, storagedriver_guid=storagedrivers[2].guid)) vdisk_domain = VDiskDomain() vdisk_domain.domain = domains[1] vdisk_domain.vdisk = vdisk1 vdisk_domain.save() # Delete vDisk1 and make some assertions VDiskController.delete(vdisk_guid=vdisk1.guid) with self.assertRaises(ObjectNotFoundException): VDisk(vdisk1.guid) self.assertEqual( first=len(VDiskController.list_volumes()), second=1, msg='Expected to find only 1 volume in Storage Driver list_volumes' ) self.assertIn(member=vdisk2, container=VDiskList.get_vdisks(), msg='vDisk2 should still be modeled') # Delete vDisk2 and make some assertions VDiskController.delete(vdisk_guid=vdisk2.guid) with self.assertRaises(ObjectNotFoundException): VDisk(vdisk2.guid) self.assertEqual( first=len(VDiskController.list_volumes()), second=0, msg= 'Expected to find no more volumes in Storage Driver list_volumes')
def test_delete(self): """ Test the delete of a vDisk - Create 2 vDisks with identical names on 2 different vPools - Delete 1st vDisk and verify other still remains on correct vPool - Delete 2nd vDisk and verify no more volumes left """ structure = Helper.build_service_structure( {'vpools': [1, 2], 'domains': [1], 'storagerouters': [1], 'storagedrivers': [(1, 1, 1), (2, 2, 1)], # (<id>, <vpool_id>, <storagerouter_id>) 'mds_services': [(1, 1), (2, 2)]} # (<id>, <storagedriver_id>) ) domains = structure['domains'] storagedrivers = structure['storagedrivers'] vdisk1 = VDisk(VDiskController.create_new(volume_name='vdisk_1', volume_size=1024 ** 3, storagedriver_guid=storagedrivers[1].guid)) vdisk2 = VDisk(VDiskController.create_new(volume_name='vdisk_1', volume_size=1024 ** 3, storagedriver_guid=storagedrivers[2].guid)) vdisk_domain = VDiskDomain() vdisk_domain.domain = domains[1] vdisk_domain.vdisk = vdisk1 vdisk_domain.save() # Delete vDisk1 and make some assertions VDiskController.delete(vdisk_guid=vdisk1.guid) with self.assertRaises(ObjectNotFoundException): VDisk(vdisk1.guid) self.assertEqual(first=len(VDiskController.list_volumes()), second=1, msg='Expected to find only 1 volume in Storage Driver list_volumes') self.assertIn(member=vdisk2, container=VDiskList.get_vdisks(), msg='vDisk2 should still be modeled') # Delete vDisk2 and make some assertions VDiskController.delete(vdisk_guid=vdisk2.guid) with self.assertRaises(ObjectNotFoundException): VDisk(vdisk2.guid) self.assertEqual(first=len(VDiskController.list_volumes()), second=0, msg='Expected to find no more volumes in Storage Driver list_volumes')
def _check_volumedriver_remove(vpool_name, vdisk_name, present=True): """ Remove a vdisk from a vpool :param vdisk_name: name of a vdisk (e.g. test.raw) :type vdisk_name: str :param vpool_name: name of a vpool :type vpool_name: str :param present: should the disk be present? :type present: bool :return: True if disk is not present anymore :rtype: bool """ try: vdisk = VDiskHelper.get_vdisk_by_name(vdisk_name=vdisk_name, vpool_name=vpool_name) VDiskController.delete(vdisk.guid) return True except VDiskNotFoundError: # not found, if it should be present, re-raise the exception if present: raise else: return True
def _execute_test(cls): """ Mimics the healthcheck creating and deleting disks with the same name/devicename back to back :return: None """ local_sr = SystemHelper.get_local_storagerouter() cls.LOGGER.info("Starting creation/deletion test.") # Elect vpool assert len( local_sr.storagedrivers ) > 0, 'Node {0} has no storagedriver. Cannot test {1}'.format( local_sr.ip, VDiskControllerTester.TEST_NAME) random_storagedriver = local_sr.storagedrivers[random.randint( 0, len(local_sr.storagedrivers) - 1)] vpool = random_storagedriver.vpool disk_size = 1024**3 disk_name = 'ci_scenario_rapid_create_delete_same_device' exceptions = [] for loop in xrange(0, 100): test_passed = False try: cls.LOGGER.info("Creating new disk.") try: VDiskController.create_new(disk_name, disk_size, random_storagedriver.guid) except Exception as ex: cls.LOGGER.error( 'Creation failed. Got {0} in iteration {1}'.format( str(ex), loop)) exceptions.append( 'Creation failed. Got {0} in iteration {1}'.format( str(ex), loop)) continue cls.LOGGER.info("Fetching new disk.") try: vdisk = VDiskHelper.get_vdisk_by_name( '{0}.raw'.format(disk_name), vpool.name) except Exception as ex: cls.LOGGER.error( 'Fetch failed. Got {0} in iteration {1}'.format( str(ex), loop)) exceptions.append( 'Fetch failed. Got {0} in iteration {1}'.format( str(ex), loop)) continue cls.LOGGER.info("Deleting new disk.") try: VDiskController.delete(vdisk_guid=vdisk.guid) except Exception as ex: cls.LOGGER.error( 'Delete failed. Got {0} in iteration {1}'.format( str(ex), loop)) exceptions.append( 'Delete failed. Got {0} in iteration {1}'.format( str(ex), loop)) test_passed = True except Exception as ex: cls.LOGGER.error( 'Unexpected exception occurred during loop {0}. Got {1}.'. format(loop, str(ex))) finally: try: cls._cleanup_vdisk(disk_name, vpool.name, not test_passed) except Exception as ex: cls.LOGGER.error( "Auto cleanup failed with {0} in iteration {1}.". format(str(ex), loop)) exceptions.append( 'Auto cleanup failed, got {0} in iteration {1}'.format( str(ex), loop)) assert len( exceptions ) == 0, 'Exception occurred during the creation of vdisks with the same devicename. Got {0}'.format( ', '.join(exceptions)) cls.LOGGER.info("Finished create/delete test.")