def test_delete_snapshot_scrubbing_lock(self): """ Tests the skip-if-scrubbed logic """ snapshot_while_scrub_results = [] def delete_snapshot_while_scrubbing(*args, **kwargs): _ = args, kwargs try: snapshot_while_scrub_results.append(VDiskController.delete_snapshot(vdisk_1.guid, vdisk_1.snapshot_ids[0])) except RuntimeError as ex: snapshot_while_scrub_results.append(ex) structure = DalHelper.build_dal_structure( {'vpools': [1], 'vdisks': [(1, 1, 1, 1)], # (<id>, <storagedriver_id>, <vpool_id>, <mds_service_id>) 'mds_services': [(1, 1)], 'storagerouters': [1], 'storagedrivers': [(1, 1, 1)]} # (<id>, <vpool_id>, <storagerouter_id>) ) vdisks = structure['vdisks'] vdisk_1 = vdisks[1] # Create automatic snapshot for both vDisks success, fail = GenericController.snapshot_all_vdisks() self.assertEqual(first=len(fail), second=0, msg='Expected 0 failed snapshots') self.assertEqual(first=len(success), second=1, msg='Expected 1 successful snapshots') self.assertEqual(first=len(vdisk_1.snapshot_ids), second=1, msg='Expected 1 snapshot ID for vDisk {0}'.format(vdisk_1.name)) self.assertEqual(first=len(vdisk_1.snapshots), second=1, msg='Expected 1 snapshot for vDisk {0}'.format(vdisk_1.name)) proxy_names, thread_names, vdisk_namespaces = self.generate_scrub_related_info(structure) LockedClient.scrub_controller = {'possible_threads': thread_names, 'volumes': {}, 'waiter': Waiter(len(thread_names[0:1]))} # only 1 disks -> 1 thread # Scrub all volumes for vdisk_id, vdisk in vdisks.iteritems(): LockedClient.scrub_controller['volumes'][vdisk.volume_id] = {'success': True, 'scrub_work': range(vdisk_id)} hooks = {'post_vdisk_scrub_registration': delete_snapshot_while_scrubbing} # Make the scrubber wait ScrubShared._test_hooks.update(hooks) GenericController.execute_scrub() # Ensure delete snapshot fails for vdisk_1 because it is being scrubbed result_while_scrub = snapshot_while_scrub_results[0] self.assertIsInstance(result_while_scrub, Exception, 'Expected an exception to have occurred') self.assertEqual(str(result_while_scrub), 'VDisk is being scrubbed. Unable to remove snapshots at this time', 'Excpetion should be about disk being scrubbed') self.assertEqual(first=len(vdisk_1.snapshot_ids), second=1, msg='Expected 1 snapshot ID for vDisk {0}'.format(vdisk_1.name)) self.assertEqual(first=len(vdisk_1.snapshots), second=1, msg='Expected 1 snapshot for vDisk {0}'.format(vdisk_1.name))
def test_snapshot_all_vdisks(self): """ Tests GenericController.snapshot_all_vdisks functionality """ structure = DalHelper.build_dal_structure({ 'vpools': [1], 'vdisks': [ (1, 1, 1, 1), (2, 1, 1, 1) ], # (<id>, <storagedriver_id>, <vpool_id>, <mds_service_id>) 'mds_services': [(1, 1)], 'storagerouters': [1], 'storagedrivers': [(1, 1, 1)] } # (<id>, <vpool_id>, <storagerouter_id>) ) vdisk_1 = structure['vdisks'][1] vdisk_2 = structure['vdisks'][2] # Create automatic snapshot for both vDisks success, fail = GenericController.snapshot_all_vdisks() self.assertEqual(first=len(fail), second=0, msg='Expected 0 failed snapshots') self.assertEqual(first=len(success), second=2, msg='Expected 2 successful snapshots') self.assertEqual(first=len(vdisk_1.snapshot_ids), second=1, msg='Expected 1 snapshot ID for vDisk {0}'.format( vdisk_1.name)) self.assertEqual(first=len(vdisk_2.snapshot_ids), second=1, msg='Expected 1 snapshot ID for vDisk {0}'.format( vdisk_2.name)) self.assertEqual(first=len(vdisk_1.snapshots), second=1, msg='Expected 1 snapshot for vDisk {0}'.format( vdisk_1.name)) self.assertEqual(first=len(vdisk_2.snapshots), second=1, msg='Expected 1 snapshot for vDisk {0}'.format( vdisk_2.name)) # Ensure automatic snapshot fails for vdisk_1 and succeeds for vdisk_2 vdisk_1.storagedriver_client._set_snapshot_in_backend( volume_id=vdisk_1.volume_id, snapshot_id=vdisk_1.snapshots[0]['guid'], in_backend=False) success, fail = GenericController.snapshot_all_vdisks() self.assertEqual(first=len(fail), second=1, msg='Expected 1 failed snapshot') self.assertEqual(first=fail[0], second=vdisk_1.guid, msg='Expected vDisk {0} to have failed'.format( vdisk_1.name)) self.assertEqual(first=len(success), second=1, msg='Expected 1 successful snapshot') self.assertEqual(first=success[0], second=vdisk_2.guid, msg='Expected vDisk {0} to have succeeded'.format( vdisk_2.name)) self.assertEqual(first=len(vdisk_1.snapshot_ids), second=1, msg='Expected 1 snapshot ID for vDisk {0}'.format( vdisk_1.name)) self.assertEqual(first=len(vdisk_2.snapshot_ids), second=2, msg='Expected 2 snapshot IDs for vDisk {0}'.format( vdisk_2.name)) self.assertEqual(first=len(vdisk_1.snapshots), second=1, msg='Expected 1 snapshot for vDisk {0}'.format( vdisk_1.name)) self.assertEqual(first=len(vdisk_2.snapshots), second=2, msg='Expected 2 snapshots for vDisk {0}'.format( vdisk_2.name))