Example #1
0
    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