mirror of https://github.com/xemu-project/xemu.git
iotests/257: test API failures
Signed-off-by: John Snow <jsnow@redhat.com> Reviewed-by: Max Reitz <mreitz@redhat.com> Message-id: 20190716000117.25219-6-jsnow@redhat.com Signed-off-by: John Snow <jsnow@redhat.com>
This commit is contained in:
parent
a6c9365ad4
commit
352092d382
|
@ -447,10 +447,77 @@ def test_bitmap_sync(bsync_mode, msync_mode='bitmap', failure=None):
|
||||||
compare_images(img_path, fbackup2)
|
compare_images(img_path, fbackup2)
|
||||||
log('')
|
log('')
|
||||||
|
|
||||||
|
def test_backup_api():
|
||||||
|
"""
|
||||||
|
Test malformed and prohibited invocations of the backup API.
|
||||||
|
"""
|
||||||
|
with iotests.FilePaths(['img', 'bsync1']) as \
|
||||||
|
(img_path, backup_path), \
|
||||||
|
iotests.VM() as vm:
|
||||||
|
|
||||||
|
log("\n=== API failure tests ===\n")
|
||||||
|
log('--- Preparing image & VM ---\n')
|
||||||
|
drive0 = Drive(img_path, vm=vm)
|
||||||
|
drive0.img_create(iotests.imgfmt, SIZE)
|
||||||
|
vm.add_device("{},id=scsi0".format(iotests.get_virtio_scsi_device()))
|
||||||
|
vm.launch()
|
||||||
|
|
||||||
|
file_config = {
|
||||||
|
'driver': 'file',
|
||||||
|
'filename': drive0.path
|
||||||
|
}
|
||||||
|
|
||||||
|
vm.qmp_log('blockdev-add',
|
||||||
|
filters=[iotests.filter_qmp_testfiles],
|
||||||
|
node_name="drive0",
|
||||||
|
driver=drive0.fmt,
|
||||||
|
file=file_config)
|
||||||
|
drive0.node = 'drive0'
|
||||||
|
drive0.device = 'device0'
|
||||||
|
vm.qmp_log("device_add", id=drive0.device,
|
||||||
|
drive=drive0.name, driver="scsi-hd")
|
||||||
|
log('')
|
||||||
|
|
||||||
|
target0 = Drive(backup_path, vm=vm)
|
||||||
|
target0.create_target("backup_target", drive0.fmt, drive0.size)
|
||||||
|
log('')
|
||||||
|
|
||||||
|
vm.qmp_log("block-dirty-bitmap-add", node=drive0.name,
|
||||||
|
name="bitmap0", granularity=GRANULARITY)
|
||||||
|
log('')
|
||||||
|
|
||||||
|
log('-- Testing invalid QMP commands --\n')
|
||||||
|
|
||||||
|
error_cases = {
|
||||||
|
'incremental': {
|
||||||
|
None: ['on-success', 'always', 'never', None],
|
||||||
|
'bitmap404': ['on-success', 'always', 'never', None],
|
||||||
|
'bitmap0': ['always', 'never']
|
||||||
|
},
|
||||||
|
'bitmap': {
|
||||||
|
None: ['on-success', 'always', 'never', None],
|
||||||
|
'bitmap404': ['on-success', 'always', 'never', None],
|
||||||
|
'bitmap0': [None],
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
# Dicts, as always, are not stably-ordered prior to 3.7, so use tuples:
|
||||||
|
for sync_mode in ('incremental', 'bitmap'):
|
||||||
|
log("-- Sync mode {:s} tests --\n".format(sync_mode))
|
||||||
|
for bitmap in (None, 'bitmap404', 'bitmap0'):
|
||||||
|
for policy in error_cases[sync_mode][bitmap]:
|
||||||
|
blockdev_backup(drive0.vm, drive0.name, "backup_target",
|
||||||
|
sync_mode, job_id='api_job',
|
||||||
|
bitmap=bitmap, bitmap_mode=policy)
|
||||||
|
log('')
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
for bsync_mode in ("never", "on-success", "always"):
|
for bsync_mode in ("never", "on-success", "always"):
|
||||||
for failure in ("simulated", "intermediate", None):
|
for failure in ("simulated", "intermediate", None):
|
||||||
test_bitmap_sync(bsync_mode, "bitmap", failure)
|
test_bitmap_sync(bsync_mode, "bitmap", failure)
|
||||||
|
|
||||||
|
test_backup_api()
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
iotests.script_main(main, supported_fmts=['qcow2'])
|
iotests.script_main(main, supported_fmts=['qcow2'])
|
||||||
|
|
|
@ -2245,3 +2245,88 @@ qemu_img compare "TEST_DIR/PID-bsync1" "TEST_DIR/PID-fbackup1" ==> Identical, OK
|
||||||
qemu_img compare "TEST_DIR/PID-bsync2" "TEST_DIR/PID-fbackup2" ==> Identical, OK!
|
qemu_img compare "TEST_DIR/PID-bsync2" "TEST_DIR/PID-fbackup2" ==> Identical, OK!
|
||||||
qemu_img compare "TEST_DIR/PID-img" "TEST_DIR/PID-fbackup2" ==> Identical, OK!
|
qemu_img compare "TEST_DIR/PID-img" "TEST_DIR/PID-fbackup2" ==> Identical, OK!
|
||||||
|
|
||||||
|
|
||||||
|
=== API failure tests ===
|
||||||
|
|
||||||
|
--- Preparing image & VM ---
|
||||||
|
|
||||||
|
{"execute": "blockdev-add", "arguments": {"driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/PID-img"}, "node-name": "drive0"}}
|
||||||
|
{"return": {}}
|
||||||
|
{"execute": "device_add", "arguments": {"drive": "drive0", "driver": "scsi-hd", "id": "device0"}}
|
||||||
|
{"return": {}}
|
||||||
|
|
||||||
|
{}
|
||||||
|
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
|
||||||
|
{"return": {}}
|
||||||
|
{}
|
||||||
|
{}
|
||||||
|
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
|
||||||
|
{"return": {}}
|
||||||
|
{}
|
||||||
|
|
||||||
|
{"execute": "block-dirty-bitmap-add", "arguments": {"granularity": 65536, "name": "bitmap0", "node": "drive0"}}
|
||||||
|
{"return": {}}
|
||||||
|
|
||||||
|
-- Testing invalid QMP commands --
|
||||||
|
|
||||||
|
-- Sync mode incremental tests --
|
||||||
|
|
||||||
|
{"execute": "blockdev-backup", "arguments": {"bitmap-mode": "on-success", "device": "drive0", "job-id": "api_job", "sync": "incremental", "target": "backup_target"}}
|
||||||
|
{"error": {"class": "GenericError", "desc": "must provide a valid bitmap name for 'incremental' sync mode"}}
|
||||||
|
|
||||||
|
{"execute": "blockdev-backup", "arguments": {"bitmap-mode": "always", "device": "drive0", "job-id": "api_job", "sync": "incremental", "target": "backup_target"}}
|
||||||
|
{"error": {"class": "GenericError", "desc": "must provide a valid bitmap name for 'incremental' sync mode"}}
|
||||||
|
|
||||||
|
{"execute": "blockdev-backup", "arguments": {"bitmap-mode": "never", "device": "drive0", "job-id": "api_job", "sync": "incremental", "target": "backup_target"}}
|
||||||
|
{"error": {"class": "GenericError", "desc": "must provide a valid bitmap name for 'incremental' sync mode"}}
|
||||||
|
|
||||||
|
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "job-id": "api_job", "sync": "incremental", "target": "backup_target"}}
|
||||||
|
{"error": {"class": "GenericError", "desc": "must provide a valid bitmap name for 'incremental' sync mode"}}
|
||||||
|
|
||||||
|
{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "bitmap-mode": "on-success", "device": "drive0", "job-id": "api_job", "sync": "incremental", "target": "backup_target"}}
|
||||||
|
{"error": {"class": "GenericError", "desc": "Bitmap 'bitmap404' could not be found"}}
|
||||||
|
|
||||||
|
{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "bitmap-mode": "always", "device": "drive0", "job-id": "api_job", "sync": "incremental", "target": "backup_target"}}
|
||||||
|
{"error": {"class": "GenericError", "desc": "Bitmap sync mode must be 'on-success' when using sync mode 'incremental'"}}
|
||||||
|
|
||||||
|
{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "bitmap-mode": "never", "device": "drive0", "job-id": "api_job", "sync": "incremental", "target": "backup_target"}}
|
||||||
|
{"error": {"class": "GenericError", "desc": "Bitmap sync mode must be 'on-success' when using sync mode 'incremental'"}}
|
||||||
|
|
||||||
|
{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "device": "drive0", "job-id": "api_job", "sync": "incremental", "target": "backup_target"}}
|
||||||
|
{"error": {"class": "GenericError", "desc": "Bitmap 'bitmap404' could not be found"}}
|
||||||
|
|
||||||
|
{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap0", "bitmap-mode": "always", "device": "drive0", "job-id": "api_job", "sync": "incremental", "target": "backup_target"}}
|
||||||
|
{"error": {"class": "GenericError", "desc": "Bitmap sync mode must be 'on-success' when using sync mode 'incremental'"}}
|
||||||
|
|
||||||
|
{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap0", "bitmap-mode": "never", "device": "drive0", "job-id": "api_job", "sync": "incremental", "target": "backup_target"}}
|
||||||
|
{"error": {"class": "GenericError", "desc": "Bitmap sync mode must be 'on-success' when using sync mode 'incremental'"}}
|
||||||
|
|
||||||
|
-- Sync mode bitmap tests --
|
||||||
|
|
||||||
|
{"execute": "blockdev-backup", "arguments": {"bitmap-mode": "on-success", "device": "drive0", "job-id": "api_job", "sync": "bitmap", "target": "backup_target"}}
|
||||||
|
{"error": {"class": "GenericError", "desc": "must provide a valid bitmap name for 'bitmap' sync mode"}}
|
||||||
|
|
||||||
|
{"execute": "blockdev-backup", "arguments": {"bitmap-mode": "always", "device": "drive0", "job-id": "api_job", "sync": "bitmap", "target": "backup_target"}}
|
||||||
|
{"error": {"class": "GenericError", "desc": "must provide a valid bitmap name for 'bitmap' sync mode"}}
|
||||||
|
|
||||||
|
{"execute": "blockdev-backup", "arguments": {"bitmap-mode": "never", "device": "drive0", "job-id": "api_job", "sync": "bitmap", "target": "backup_target"}}
|
||||||
|
{"error": {"class": "GenericError", "desc": "must provide a valid bitmap name for 'bitmap' sync mode"}}
|
||||||
|
|
||||||
|
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "job-id": "api_job", "sync": "bitmap", "target": "backup_target"}}
|
||||||
|
{"error": {"class": "GenericError", "desc": "must provide a valid bitmap name for 'bitmap' sync mode"}}
|
||||||
|
|
||||||
|
{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "bitmap-mode": "on-success", "device": "drive0", "job-id": "api_job", "sync": "bitmap", "target": "backup_target"}}
|
||||||
|
{"error": {"class": "GenericError", "desc": "Bitmap 'bitmap404' could not be found"}}
|
||||||
|
|
||||||
|
{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "bitmap-mode": "always", "device": "drive0", "job-id": "api_job", "sync": "bitmap", "target": "backup_target"}}
|
||||||
|
{"error": {"class": "GenericError", "desc": "Bitmap 'bitmap404' could not be found"}}
|
||||||
|
|
||||||
|
{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "bitmap-mode": "never", "device": "drive0", "job-id": "api_job", "sync": "bitmap", "target": "backup_target"}}
|
||||||
|
{"error": {"class": "GenericError", "desc": "Bitmap 'bitmap404' could not be found"}}
|
||||||
|
|
||||||
|
{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "device": "drive0", "job-id": "api_job", "sync": "bitmap", "target": "backup_target"}}
|
||||||
|
{"error": {"class": "GenericError", "desc": "Bitmap 'bitmap404' could not be found"}}
|
||||||
|
|
||||||
|
{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap0", "device": "drive0", "job-id": "api_job", "sync": "bitmap", "target": "backup_target"}}
|
||||||
|
{"error": {"class": "GenericError", "desc": "Bitmap sync mode must be given when providing a bitmap"}}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue