[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 5/8] iotests/257: test API failures
From: |
John Snow |
Subject: |
[Qemu-devel] [PATCH 5/8] iotests/257: test API failures |
Date: |
Tue, 9 Jul 2019 21:05:53 -0400 |
Signed-off-by: John Snow <address@hidden>
---
tests/qemu-iotests/257 | 69 +++++++++++++++++++++++++++++++
tests/qemu-iotests/257.out | 85 ++++++++++++++++++++++++++++++++++++++
2 files changed, 154 insertions(+)
diff --git a/tests/qemu-iotests/257 b/tests/qemu-iotests/257
index 2eb4f26c28..de8707cb19 100755
--- a/tests/qemu-iotests/257
+++ b/tests/qemu-iotests/257
@@ -450,10 +450,79 @@ def test_bitmap_sync(bsync_mode, msync_mode='bitmap',
failure=None):
compare_images(img_path, fbackup2)
log('')
+def test_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],
+ },
+ }
+
+ for sync_mode, config in error_cases.items():
+ log("-- Sync mode {:s} tests --\n".format(sync_mode))
+ for bitmap, policies in config.items():
+ for policy in policies:
+ kwargs = { 'job_id': 'api_job' }
+ if bitmap is not None:
+ kwargs['bitmap'] = bitmap
+ if policy is not None:
+ kwargs['bitmap-mode'] = policy
+ blockdev_backup(drive0.vm, drive0.name, "backup_target",
+ sync_mode, **kwargs)
+ log('')
+
+
def main():
for bsync_mode in ("never", "on-success", "always"):
for failure in ("simulated", "intermediate", None):
test_bitmap_sync(bsync_mode, "bitmap", failure)
+ test_backup_api()
+
if __name__ == '__main__':
iotests.script_main(main, supported_fmts=['qcow2'])
diff --git a/tests/qemu-iotests/257.out b/tests/qemu-iotests/257.out
index 0abc96acd3..43f2e0f9c9 100644
--- a/tests/qemu-iotests/257.out
+++ b/tests/qemu-iotests/257.out
@@ -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-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"}}
+
--
2.21.0
[Qemu-devel] [PATCH 5/8] iotests/257: test API failures,
John Snow <=
[Qemu-devel] [PATCH 3/8] iotests/257: Refactor backup helpers, John Snow, 2019/07/09
[Qemu-devel] [PATCH 8/8] iotests/257: test traditional sync modes, John Snow, 2019/07/09