Beispiel #1
0
def test_failed_delete_checkpoint():
    error_msg = "Internal delete error"

    dom = FakeDomainAdapter()

    checkpoint_2 = FakeCheckpoint(CHECKPOINT_2_XML, CHECKPOINT_2_ID, dom=dom)
    # simulating an error that raised when calling the delete method
    # of a specific checkpoint
    checkpoint_2.errors["delete"] = fake.libvirt_error(
        [libvirt.VIR_ERR_INTERNAL_ERROR, '', error_msg], "Fake libvirt error")

    dom.output_checkpoints = [
        FakeCheckpoint(CHECKPOINT_1_XML, CHECKPOINT_1_ID, dom=dom),
        checkpoint_2
    ]

    vm = FakeVm()
    res = backup.delete_checkpoints(vm, dom,
                                    [CHECKPOINT_1_ID, CHECKPOINT_2_ID])

    expected_result = {
        'checkpoint_ids': [CHECKPOINT_1_ID],
        'error': {
            'code': 1,
            'message': error_msg
        }
    }
    assert res["result"] == expected_result

    res = backup.list_checkpoints(vm, dom)
    assert res["result"] == [CHECKPOINT_2_ID]
Beispiel #2
0
def test_dump_checkpoint_lookup_failed():
    dom = FakeDomainAdapter()
    dom.errors["checkpointLookupByName"] = fake.libvirt_error(
        [libvirt.VIR_ERR_INTERNAL_ERROR], "Fake libvirt error")
    dom.output_checkpoints = [
        FakeCheckpoint(CHECKPOINT_1_XML, CHECKPOINT_1_ID),
        FakeCheckpoint(CHECKPOINT_2_XML, CHECKPOINT_2_ID)
    ]

    with pytest.raises(libvirt.libvirtError) as e:
        backup.dump_checkpoint(dom, CHECKPOINT_1_ID)
    assert e.value.get_error_code() == libvirt.VIR_ERR_INTERNAL_ERROR
Beispiel #3
0
def test_dump_checkpoint():
    dom = FakeDomainAdapter()
    dom.output_checkpoints = [
        FakeCheckpoint(CHECKPOINT_1_XML, CHECKPOINT_1_ID),
        FakeCheckpoint(CHECKPOINT_2_XML, CHECKPOINT_2_ID)
    ]

    for checkpoint_cfg in FAKE_CHECKPOINT_CFG:
        res = backup.dump_checkpoint(dom, checkpoint_cfg['id'])

        expected_result = {'checkpoint': checkpoint_cfg['xml']}
        assert res["result"] == expected_result
Beispiel #4
0
def test_delete_one_checkpoint():
    dom = FakeDomainAdapter()
    dom.output_checkpoints = [
        FakeCheckpoint(CHECKPOINT_1_XML, CHECKPOINT_1_ID, dom=dom),
        FakeCheckpoint(CHECKPOINT_2_XML, CHECKPOINT_2_ID, dom=dom)
    ]

    vm = FakeVm()
    res = backup.delete_checkpoints(vm, dom, [CHECKPOINT_1_ID])

    expected_result = {'checkpoint_ids': [CHECKPOINT_1_ID]}
    assert res["result"] == expected_result

    res = backup.list_checkpoints(vm, dom)
    assert res["result"] == [CHECKPOINT_2_ID]
Beispiel #5
0
def test_dump_checkpoint_get_xml_failed():
    checkpoint_2 = FakeCheckpoint(CHECKPOINT_2_XML, CHECKPOINT_2_ID)
    # simulating an error that raised when calling the getXMLDesc method
    # of a specific checkpoint
    checkpoint_2.errors["getXMLDesc"] = fake.libvirt_error(
        [libvirt.VIR_ERR_INTERNAL_ERROR, '', 'Internal get XML error'],
        "Fake libvirt error")

    dom = FakeDomainAdapter()
    dom.output_checkpoints = [
        FakeCheckpoint(CHECKPOINT_1_XML, CHECKPOINT_1_ID), checkpoint_2
    ]

    with pytest.raises(libvirt.libvirtError) as e:
        backup.dump_checkpoint(dom, CHECKPOINT_2_ID)
    assert e.value.get_error_code() == libvirt.VIR_ERR_INTERNAL_ERROR
Beispiel #6
0
def test_dump_missing_checkpoint():
    dom = FakeDomainAdapter()
    dom.output_checkpoints = [
        FakeCheckpoint(CHECKPOINT_1_XML, CHECKPOINT_1_ID),
    ]

    with pytest.raises(exception.NoSuchCheckpointError):
        backup.dump_checkpoint(dom, CHECKPOINT_2_ID)
Beispiel #7
0
def test_redefine_diskless_checkpoints_using_config():
    diskless_checkpoint = FakeCheckpoint(DISKLESS_CHECKPOINT_XML,
                                         DISKLESS_CHECKPOINT_ID)
    dom = FakeDomainAdapter(output_checkpoints=[diskless_checkpoint])
    vm = FakeVm()

    fake_checkpoint_config_cfg = [
        {
            'id': DISKLESS_CHECKPOINT_ID,
            'config': {
                'backup_id': BACKUP_1_ID,
                'disks': [],
                'to_checkpoint_id': DISKLESS_CHECKPOINT_ID,
                'creation_time': 1
            }
        },
    ]
    res = backup.redefine_checkpoints(vm, dom, fake_checkpoint_config_cfg)

    expected_result = {
        'checkpoint_ids': [diskless_checkpoint.getName()],
    }
    assert res["result"] == expected_result
Beispiel #8
0
def test_delete_missing_checkpoint():
    dom = FakeDomainAdapter()
    dom.output_checkpoints = [
        FakeCheckpoint(CHECKPOINT_2_XML, CHECKPOINT_2_ID, dom=dom)
    ]

    vm = FakeVm()
    res = backup.delete_checkpoints(vm, dom,
                                    [CHECKPOINT_1_ID, CHECKPOINT_2_ID])

    expected_result = {'checkpoint_ids': [CHECKPOINT_1_ID, CHECKPOINT_2_ID]}
    # validate that the missing checkpoint reported as
    # successfully removed
    assert res["result"] == expected_result

    res = backup.list_checkpoints(vm, dom)
    assert res["result"] == []
Beispiel #9
0
def test_redefine_checkpoints_using_config():
    checkpoint_1 = FakeCheckpoint(CHECKPOINT_1_WITH_CREATION_TIME_XML,
                                  CHECKPOINT_1_ID)
    checkpoint_2 = FakeCheckpoint(CHECKPOINT_2_WITH_CREATION_TIME_XML,
                                  CHECKPOINT_2_ID)
    dom = FakeDomainAdapter(output_checkpoints=[checkpoint_1, checkpoint_2])
    vm = FakeVm()

    fake_disks = create_fake_disks()
    fake_checkpoint_config_cfg = [
        {
            'id': CHECKPOINT_1_ID,
            'config': {
                'backup_id': BACKUP_1_ID,
                'disks': fake_disks,
                'to_checkpoint_id': CHECKPOINT_1_ID,
                'creation_time': 1
            }
        },
        {
            'id': CHECKPOINT_2_ID,
            'config': {
                'backup_id': BACKUP_2_ID,
                'disks': fake_disks,
                'from_checkpoint_id': CHECKPOINT_1_ID,
                'to_checkpoint_id': CHECKPOINT_2_ID,
                'creation_time': 2
            }
        },
    ]
    res = backup.redefine_checkpoints(vm, dom, fake_checkpoint_config_cfg)

    expected_result = {
        'checkpoint_ids': [checkpoint_1.getName(),
                           checkpoint_2.getName()],
    }
    assert res["result"] == expected_result
Beispiel #10
0
        <disk name='vda' checkpoint='bitmap'/>
      </disks>
    </domaincheckpoint>
    """.format(CHECKPOINT_2_ID, BACKUP_2_ID, CHECKPOINT_1_ID)

MIXED_CHECKPOINT_XML = """
    <domaincheckpoint>
      <name>{}</name>
      <description>checkpoint for backup '{}'</description>
      <disks>
        <disk name='sda' checkpoint='bitmap'/>
      </disks>
    </domaincheckpoint>
    """.format(CHECKPOINT_1_ID, BACKUP_1_ID)

CHECKPOINT_1 = FakeCheckpoint(CHECKPOINT_1_XML, CHECKPOINT_1_ID)
CHECKPOINT_2 = FakeCheckpoint(CHECKPOINT_2_XML, CHECKPOINT_2_ID)


class FakeDrive(object):
    def __init__(self, name, imageID, path=''):
        self.name = name
        self.imageID = imageID
        self.diskType = 'file'
        self.path = path
        self.format = 'cow'
        self.domainID = 'domain_id'


class FakeHSM(hsm.HSM):
    def __init__(self):