def setUp(self): super(TestFreezerCompressGzip, self).setUp() # create a source tree to backup with a few empty files # (files must be empty to avoid encoding errors with pure random data) self.source_tree = common.Temp_Tree() self.source_tree.add_random_data(size=0) self.storage_tree = common.Temp_Tree() self.dest_tree = common.Temp_Tree() self.environ = super(TestFreezerCompressGzip, self).get_environ()
def test_backup_swift_mysql(self): self.source_tree = common.Temp_Tree(dir='/var/lib/mysql', create=False) backup_name = uuidutils.generate_uuid(dashed=False) lvm_snapsize = '1G' lvm_snapname = 'freezer-snap_{0}'.format(backup_name) lvm_dirmount = '/var/freezer/freezer-{0}'.format(backup_name) backup_args = { 'action': 'backup', 'mode': 'mysql', 'mysql_conf': '/etc/mysql/debian.cnf', 'path_to_backup': self.source_tree.path, 'snapshot': '', 'lvm_dirmount': lvm_dirmount, 'lvm_snapsize': lvm_snapsize, 'lvm_snapname': lvm_snapname, 'container': 'freezer_test_container_{0}'.format(backup_name), 'storage': 'swift', 'max_level': '6', 'max_segment_size': '67108864', 'backup_name': backup_name } restore_args = { 'action': 'restore', 'restore_abs_path': self.dest_tree.path, 'backup_name': copy(backup_args['backup_name']), 'storage': 'swift', 'container': copy(backup_args['container']) } result = common.execute_freezerc(backup_args) self.assertIsNotNone(result) result = common.execute_freezerc(restore_args) self.assertIsNotNone(result)
def test_backup_multiple_level(self): """How it works? - use the default source and destination trees in /tmp (see common.TestFS) - use temporary directory for backup storage - add some random data - check that trees don't match anymore - execute block based backup of source tree - modify data - execute backup again - delete some files - execute backup again - execute restore into destination tree - check that source and destination trees match :return: non on success """ self.source_tree.add_random_data() self.assertTreesMatchNot() backup_name = uuid.uuid4().hex with common.Temp_Tree() as storage_dir: backup_args = { 'action': 'backup', 'mode': 'fs', 'path_to_backup': self.source_tree.path, 'container': storage_dir.path, 'storage': 'local', 'engine': 'rsync', 'max_segment_size': '67108864', 'backup_name': backup_name, } restore_args = { 'action': 'restore', 'restore_abs_path': self.dest_tree.path, 'backup_name': backup_name, 'storage': 'local', 'engine': 'rsync', 'container': storage_dir.path } result = common.execute_freezerc(backup_args) self.assertIsNotNone(result) self.source_tree.modify_random_files(2) result = common.execute_freezerc(backup_args) self.assertIsNotNone(result) self.source_tree.delete_random_files(1) result = common.execute_freezerc(backup_args) self.assertIsNotNone(result) result = common.execute_freezerc(restore_args) self.assertIsNotNone(result) self.assertTreesMatch()
def test_backup_preexisting_dir(self): """ Use external pre-defined directory for tests. If directory does not exist, then skip Restore to temporary folder (removed on exit) :return: """ workdir = os.path.expanduser('~/test_dir') if not os.path.isdir(workdir): return self.source_tree = common.Temp_Tree(dir='/work', create=False) with common.Temp_Tree() as storage_dir: backup_args = { 'action': 'backup', 'mode': 'fs', 'path_to_backup': self.source_tree.path, 'container': storage_dir.path, 'storage': 'local', 'max_level': '6', 'max_segment_size': '67108864', 'backup_name': uuidutils.generate_uuid(dashed=False) } restore_args = { 'action': 'restore', 'restore_abs_path': self.dest_tree.path, 'backup_name': copy(backup_args['backup_name']), 'storage': 'local', 'container': storage_dir.path } result = common.execute_freezerc(backup_args) self.assertIsNotNone(result) result = common.execute_freezerc(restore_args) self.assertIsNotNone(result) self.assertTreesMatch()
def test_backup_single_file(self): """ - use the default source and destination trees in /tmp (see common.TestFS) - use temporary directory for backup storage - add one file with random data - check that trees don't match anymore - execute block based backup of single file - execute restore into destination tree - check that source and destination trees match :return: non on success """ self.source_tree.add_random_data(ndir=0, nfile=1) self.assertTreesMatchNot() with common.Temp_Tree() as storage_dir: backup_args = { 'action': 'backup', 'mode': 'fs', 'path_to_backup': os.path.join(self.source_tree.path, self.source_tree.files[0]), 'container': storage_dir.path, 'storage': 'local', 'engine': 'rsync', 'max_segment_size': '67108864', 'backup_name': uuid.uuid4().hex } restore_args = { 'action': 'restore', 'restore_abs_path': self.dest_tree.path, 'backup_name': copy(backup_args['backup_name']), 'storage': 'local', 'engine': 'rsync', 'container': storage_dir.path } result = common.execute_freezerc(backup_args) self.assertIsNotNone(result) result = common.execute_freezerc(restore_args) self.assertIsNotNone(result) self.assertTreesMatch()
def test_backup_single_level(self): """How it works? - use the default source and destination trees in /tmp (see common.TestFS) - use temporary directory for backup storage - add some random data - check that trees don't match anymore - execute block based backup of source tree - execute restore into destination tree - check that source and destination trees match :return: non on success """ self.source_tree.add_random_data() self.assertTreesMatchNot() with common.Temp_Tree() as storage_dir: backup_args = { 'action': 'backup', 'mode': 'fs', 'path_to_backup': self.source_tree.path, 'container': storage_dir.path, 'storage': 'local', 'engine': 'rsync', 'max_segment_size': '67108864', 'backup_name': uuidutils.generate_uuid(dashed=False) } restore_args = { 'action': 'restore', 'restore_abs_path': self.dest_tree.path, 'backup_name': copy(backup_args['backup_name']), 'storage': 'local', 'engine': 'rsync', 'container': storage_dir.path } result = common.execute_freezerc(backup_args) self.assertIsNotNone(result) result = common.execute_freezerc(restore_args) self.assertIsNotNone(result) self.assertTreesMatch()
def test_backup_local_storage_use_lvm_snapshot_and_path_to_backup(self): self.source_tree.add_random_data() self.assertTreesMatchNot() backup_name = uuidutils.generate_uuid(dashed=False) path_to_backup = self.source_tree.path lvm_snapsize = '50M' lvm_snapname = 'freezer-snap_{0}'.format(backup_name) lvm_dirmount = '/var/freezer/freezer-{0}'.format(backup_name) with common.Temp_Tree() as storage_dir: backup_args = { 'action': 'backup', 'mode': 'fs', 'path_to_backup': path_to_backup, 'snapshot': '', 'lvm_dirmount': lvm_dirmount, 'lvm_snapsize': lvm_snapsize, 'lvm_snapname': lvm_snapname, 'container': storage_dir.path, 'storage': 'local', 'max_level': '6', 'max_segment_size': '67108864', 'backup_name': backup_name } restore_args = { 'action': 'restore', 'restore_abs_path': self.dest_tree.path, 'backup_name': copy(backup_args['backup_name']), 'storage': 'local', 'container': storage_dir.path } result = common.execute_freezerc(backup_args) self.assertIsNotNone(result) result = common.execute_freezerc(restore_args) self.assertIsNotNone(result) self.assertTreesMatch()
def setUp(self): super(TestFreezerMetadataChecksum, self).setUp() self.environ = super(TestFreezerMetadataChecksum, self).get_environ() self.dest_tree = common.Temp_Tree() self.backup_name = 'backup_checksum_test'