def __init__(self, client_manager, container, work_dir, max_segment_size): """ :type client_manager: freezer.osclients.ClientManager :type container: str """ self.client_manager = client_manager self.container = container self.segments = utils.segments_name(container) self.work_dir = work_dir self.max_segment_size = max_segment_size
def test_no_lvm_level0(self): """ Maximum level filesystem backup freezerc --action backup --path-to-backup /var/log --backup-name rsync-var-log-test-XX --container var-log-test-XX """ max_retry = 5 # Set arguments backup_args = { #'proxy' : '', 'action' : 'backup', 'path_to_backup' : copy(self.tmp_path), 'backup_name' : str(uuid.uuid4()), 'container' : str(uuid.uuid4()) } # Namespace backup_args object name_list = [] retry = 0 while backup_args['container'] not in name_list and retry < max_retry: ns_backup_args = main.freezer_main(backup_args) ns_backup_args = swift.get_container_content(ns_backup_args) name_list = [item['name'] for item in ns_backup_args.containers_list] retry += 1 self.assertTrue(ns_backup_args.container in name_list) self.assertTrue(segments_name(ns_backup_args.container) in name_list) fdict_before = self.snap_tmp_tree_sha1(self.tmp_files) self.damage_tmp_tree(self.tmp_files) # Restore restore_args = { #'proxy' : '', 'action' : 'restore', 'restore_abs_path' : copy(self.tmp_path), 'backup_name' : copy(backup_args['backup_name']), 'container' : copy(backup_args['container']) } main.freezer_main(restore_args) fdict_after = self.snap_tmp_tree_sha1(self.tmp_files) self.assertEqual(len(self.tmp_files), len(fdict_before)) self.assertEqual(len(self.tmp_files), len(fdict_after)) for key in self.tmp_files: self.assertTrue(os.path.isfile(key)) self.assertEqual(key + fdict_before[key], key + fdict_after[key])
def test_lvm_level0(self): """ LVM snapshot filesystem backup freezerc --action backup --lvm-srcvol /dev/freezer-test1-volgroup/freezer-test1-vol --lvm-dirmount /tmp/freezer-test-lvm-snapshot --lvm-volgroup freezer-test1-volgroup --lvm-snapsize 1M --file-to-backup /mnt/freezer-test-lvm/lvm_test_XXXX/ --container UUID --exclude "\*.lock" --backup-name UUID """ max_retry = 5 # Set arguments lvm_path = '/mnt/freezer-test-lvm' self.tmp_path = tempfile.mkdtemp(prefix='lvm_test_', dir=lvm_path) self.create_tmp_tree(self.tmp_path) backup_args = { #'proxy' : '', 'action' : 'backup', 'lvm_srcvol' : '/dev/freezer-test1-volgroup/freezer-test1-vol', 'lvm_dirmount' : '/tmp/freezer-test-lvm-snapshot', 'lvm_volgroup' : 'freezer-test1-volgroup', 'lvm_snapsize' : '1M', 'exclude' : '*.lock', 'path_to_backup' : copy(self.tmp_path), 'backup_name' : str(uuid.uuid4()), 'container' : str(uuid.uuid4()) } # Call the actual BACKUP # Namespace backup_args object name_list = [] retry = 0 while backup_args['container'] not in name_list and retry < max_retry: ns_backup_args = main.freezer_main(backup_args) ns_backup_args = swift.get_container_content(ns_backup_args) name_list = [item['name'] for item in ns_backup_args.containers_list] retry += 1 self.assertTrue(ns_backup_args.container in name_list) self.assertTrue(segments_name(ns_backup_args.container) in name_list) # Create a file => SAH1 hash dictionary that will recored file # hashes before any files being modified or deleted fdict_before = self.snap_tmp_tree_sha1(self.tmp_files) # Delete and modify random files in the test directory # structure self.damage_tmp_tree(self.tmp_files) # RESTORE section # Create RESTORE action dictionary to be passed to # arguments.backup_arguments() they will emulate the # command line arguments restore_args = { #'proxy' : '', 'action' : 'restore', 'restore_abs_path' : copy(self.tmp_path), 'backup_name' : copy(backup_args['backup_name']), 'container' : copy(backup_args['container']) } # Call RESTORE on Freezer code base main.freezer_main(restore_args) fdict_after = self.snap_tmp_tree_sha1(self.tmp_files) self.assertEqual(len(self.tmp_files), len(fdict_before)) # Check if cout of all original files match recovered files # plus the number of deleted .LOCK files which were not restored self.assertEqual(len(self.tmp_files), len(fdict_after) + len([x for x in self.tmp_deleted if x.endswith('.lock')])) for key in self.tmp_files: if key.endswith('.lock') and key in self.tmp_deleted: self.assertFalse(os.path.isfile(key)) elif key.endswith('.lock') and key in self.tmp_modified: self.assertNotEqual(key + fdict_before[key], key + fdict_after[key]) else: self.assertTrue(os.path.isfile(key)) self.assertEqual(key + fdict_before[key], key + fdict_after[key])