def test_add_dombackup_dedup(self, build_mock_domain, get_backup_group): dom = build_mock_domain backup_group = get_backup_group backup_group.add_dombackup(build_dombackup(dom, dev_disks=("vda",))) backup_group.add_dombackup(build_dombackup(dom, dev_disks=("vdb",))) assert len(backup_group.backups) == 1 assert len(backup_group.backups[0].disks.keys()) == 2
def test_add_disks(self, build_mock_domain): """ Create a DomBackup with only one disk (vda) and test to add vdb """ dombkup = build_dombackup(build_mock_domain, disks=("vda", )) expected_disks = { "vda": { "src": "/var/lib/libvirt/images/test-disk-1.qcow2", "type": "qcow2", }, } assert dombkup.disks == expected_disks dombkup.add_disks("vdb") expected_disks = { "vda": { "src": "/var/lib/libvirt/images/test-disk-1.qcow2", "type": "qcow2", }, "vdb": { "src": "/var/lib/libvirt/images/test-disk-2.qcow2", "type": "qcow2", }, } assert dombkup.disks == expected_disks
def test_get_definition(self, build_mock_domain): dombkup = build_dombackup( dom=build_mock_domain, dev_disks=("vda", ), packager="tar", packager_opts={ "compression": "xz", "compression_lvl": 4 }, ) expected_def = { "domain_id": build_mock_domain.ID(), "domain_name": build_mock_domain.name(), "domain_xml": build_mock_domain.XMLDesc(), "packager": { "type": "tar", "opts": { "compression": "xz", "compression_lvl": 4 }, }, "version": virt_backup.VERSION, } assert dombkup.get_definition() == expected_def
def test_get_packager(self, build_mock_domain): """ Checks that this function can build a packager and that it fills every required info in the definition and pending_info. Some info cannot be written in the definition and the pending_info before getting a packager for a backup. For example, a tar archive name is """ dombkup = build_dombackup( dom=build_mock_domain, dev_disks=("vda", ), packager="tar", packager_opts={ "compression": "xz", "compression_lvl": 4 }, ) snapdate = arrow.get("2016-07-09 17:40:02") dombkup._name = dombkup._main_backup_name_format(snapdate) packager = dombkup._get_packager() assert isinstance(packager, WriteBackupPackagers.tar.value) assert packager.compression == "xz" assert packager.compression_lvl == 4
def prepare_clean_aborted_dombkup(self, mock_domain, target_dir, mocker): dombkup = build_dombackup(dom=mock_domain, target_dir=str(target_dir)) dombkup.pending_info["date"] = 0 mocker.patch("virt_backup.backups.snapshot.DomExtSnapshot.clean") return dombkup
def test_init_with_disk(self, build_mock_domain): dombkup = build_dombackup(build_mock_domain, dev_disks=("vda", )) expected_disks = { "vda": { "src": "/var/lib/libvirt/images/test-disk-1.qcow2", "type": "qcow2", }, } assert dombkup.disks == expected_disks
def test_clean_pending_info(self, build_mock_domain, tmpdir): backup_dir = tmpdir.mkdir("clean_pending_info") dombkup = build_dombackup(dom=build_mock_domain, backup_dir=str(backup_dir)) dombkup.pending_info["date"] = 0 dombkup._dump_pending_info() assert len(backup_dir.listdir()) == 1 dombkup._clean_pending_info() assert len(backup_dir.listdir()) == 0
def test_compatible_with(self, get_uncompressed_dombackup, build_mock_domain): dombackup1 = get_uncompressed_dombackup dombackup2 = build_dombackup( dom=build_mock_domain, dev_disks=("vdb", ), compression=None, ) assert dombackup1.compatible_with(dombackup2)
def test_get_new_tar_already_exists(self, build_mock_domain, tmpdir): dombkup = build_dombackup(dom=build_mock_domain, compression="tar") snapdate = datetime.datetime(2016, 8, 15, 17, 10, 13, 0) tar_path = tmpdir.join("{}.tar".format( dombkup._main_backup_name_format(snapdate))) tar_path.write("test") with pytest.raises(FileExistsError): dombkup.get_new_tar(str(tmpdir), snapshot_date=snapdate)
def prepare_clean_aborted_dombkup(self, mock_domain, backup_dir, mocker): dombkup = build_dombackup(dom=mock_domain, backup_dir=str(backup_dir), packager="directory") dombkup.pending_info["date"] = 0 dombkup.pending_info["name"] = "test" mocker.patch("virt_backup.backups.snapshot.DomExtSnapshot.clean") return dombkup
def test_compatible_with(self, get_compressed_dombackup, build_mock_domain): dombackup1 = get_compressed_dombackup dombackup2 = build_dombackup( dom=build_mock_domain, dev_disks=("vdb", ), packager="tar", packager_opts={ "compression": "xz", "compression_lvl": 4 }, ) assert dombackup1.compatible_with(dombackup2)
def test_get_definition(self, build_mock_domain): dombkup = build_dombackup(dom=build_mock_domain, dev_disks=("vda", ), compression="xz", compression_lvl=4) expected_def = { "compression": "xz", "compression_lvl": 4, "domain_id": build_mock_domain.ID(), "domain_name": build_mock_domain.name(), "domain_xml": build_mock_domain.XMLDesc(), "version": virt_backup.VERSION } assert dombkup.get_definition() == expected_def
def test_get_new_tar(self, build_mock_domain, tmpdir, compression="tar"): dombkup = build_dombackup(dom=build_mock_domain, compression=compression) snapdate = datetime.datetime(2016, 8, 15, 17, 10, 13, 0) target_dir = tmpdir.join("get_new_tar") if compression == "tar": extension = "tar" else: extension = "tar.{}".format(compression) tar_path = target_dir.join("{}.{}".format( dombkup._main_backup_name_format(snapdate), extension)) with dombkup.get_new_tar(str(target_dir), snapshot_date=snapdate): assert tar_path.check()
def test_dump_json_definition(self, build_mock_domain, tmpdir): target_dir = tmpdir.mkdir("json_dump") dombkup = build_dombackup( dom=build_mock_domain, dev_disks=("vda", ), compression="xz", compression_lvl=4, target_dir=str(target_dir), ) definition = dombkup.get_definition() datenow = datetime.datetime.now() definition["date"] = datenow.timestamp() dombkup._dump_json_definition(definition) assert len(target_dir.listdir()) == 1 assert json.loads(target_dir.listdir()[0].read()) == definition
def take_snapshot_and_return_date(self, mock_domain, backup_dir, monkeypatch): dombkup = build_dombackup(dom=mock_domain, dev_disks=("vda", ), backup_dir=backup_dir) snapshot_helper = DomExtSnapshot( dombkup.dom, dombkup.disks, DomExtSnapshotCallbackRegistrer(dombkup.conn), dombkup.conn, dombkup.timeout, ) monkeypatch.setattr(snapshot_helper, "external_snapshot", lambda: MockSnapshot(name="test")) dombkup._ext_snapshot_helper = snapshot_helper definition = dombkup.get_definition() return dombkup._snapshot_and_save_date(definition)
def test_dump_json_definition(self, build_mock_domain, tmpdir): backup_dir = tmpdir.mkdir("json_dump") dombkup = build_dombackup( dom=build_mock_domain, dev_disks=("vda", ), packager="tar", packager_opts={ "compression": "xz", "compression_lvl": 4 }, backup_dir=str(backup_dir), ) definition = dombkup.get_definition() datenow = datetime.datetime.now() definition["date"] = datenow.timestamp() dombkup._dump_json_definition(definition) assert len(backup_dir.listdir()) == 1 assert json.loads(backup_dir.listdir()[0].read()) == definition