Blame SOURCES/kvm-qemu-iotests-Rewrite-206-for-blockdev-create-job.patch

ae23c9
From 2f079d67036b546bd79093182814c66f246fe2cc Mon Sep 17 00:00:00 2001
ae23c9
From: Kevin Wolf <kwolf@redhat.com>
ae23c9
Date: Tue, 26 Jun 2018 09:48:46 +0200
ae23c9
Subject: [PATCH 138/268] qemu-iotests: Rewrite 206 for blockdev-create job
ae23c9
ae23c9
RH-Author: Kevin Wolf <kwolf@redhat.com>
ae23c9
Message-id: <20180626094856.6924-64-kwolf@redhat.com>
ae23c9
Patchwork-id: 81077
ae23c9
O-Subject: [RHV-7.6 qemu-kvm-rhev PATCH v2 63/73] qemu-iotests: Rewrite 206 for blockdev-create job
ae23c9
Bugzilla: 1513543
ae23c9
RH-Acked-by: Jeffrey Cody <jcody@redhat.com>
ae23c9
RH-Acked-by: Max Reitz <mreitz@redhat.com>
ae23c9
RH-Acked-by: Fam Zheng <famz@redhat.com>
ae23c9
ae23c9
This rewrites the test case 206 to work with the new x-blockdev-create
ae23c9
job rather than the old synchronous version of the command.
ae23c9
ae23c9
All of the test cases stay the same as before, but in order to be able
ae23c9
to implement proper job handling, the test case is rewritten in Python.
ae23c9
ae23c9
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
ae23c9
Reviewed-by: Max Reitz <mreitz@redhat.com>
ae23c9
(cherry picked from commit 4de110f8fd2811171013254fd7ed2384f1de87b4)
ae23c9
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
ae23c9
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
ae23c9
---
ae23c9
 tests/qemu-iotests/206     | 680 ++++++++++++++++++---------------------------
ae23c9
 tests/qemu-iotests/206.out | 253 ++++++++++-------
ae23c9
 tests/qemu-iotests/group   |   2 +-
ae23c9
 3 files changed, 414 insertions(+), 521 deletions(-)
ae23c9
ae23c9
diff --git a/tests/qemu-iotests/206 b/tests/qemu-iotests/206
ae23c9
index 0a18b2b..b8cf2e7 100755
ae23c9
--- a/tests/qemu-iotests/206
ae23c9
+++ b/tests/qemu-iotests/206
ae23c9
@@ -1,9 +1,11 @@
ae23c9
-#!/bin/bash
ae23c9
+#!/usr/bin/env python
ae23c9
 #
ae23c9
 # Test qcow2 and file image creation
ae23c9
 #
ae23c9
 # Copyright (C) 2018 Red Hat, Inc.
ae23c9
 #
ae23c9
+# Creator/Owner: Kevin Wolf <kwolf@redhat.com>
ae23c9
+#
ae23c9
 # This program is free software; you can redistribute it and/or modify
ae23c9
 # it under the terms of the GNU General Public License as published by
ae23c9
 # the Free Software Foundation; either version 2 of the License, or
ae23c9
@@ -18,419 +20,263 @@
ae23c9
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
ae23c9
 #
ae23c9
 
ae23c9
-# creator
ae23c9
-owner=kwolf@redhat.com
ae23c9
-
ae23c9
-seq=`basename $0`
ae23c9
-echo "QA output created by $seq"
ae23c9
-
ae23c9
-here=`pwd`
ae23c9
-status=1	# failure is the default!
ae23c9
-
ae23c9
-# get standard environment, filters and checks
ae23c9
-. ./common.rc
ae23c9
-. ./common.filter
ae23c9
-
ae23c9
-_supported_fmt qcow2
ae23c9
-_supported_proto file
ae23c9
-_supported_os Linux
ae23c9
-
ae23c9
-function do_run_qemu()
ae23c9
-{
ae23c9
-    echo Testing: "$@"
ae23c9
-    $QEMU -nographic -qmp stdio -serial none "$@"
ae23c9
-    echo
ae23c9
-}
ae23c9
-
ae23c9
-function run_qemu()
ae23c9
-{
ae23c9
-    do_run_qemu "$@" 2>&1 | _filter_testdir | _filter_qmp \
ae23c9
-                          | _filter_qemu | _filter_imgfmt \
ae23c9
-                          | _filter_actual_image_size
ae23c9
-}
ae23c9
-
ae23c9
-echo
ae23c9
-echo "=== Successful image creation (defaults) ==="
ae23c9
-echo
ae23c9
-
ae23c9
-size=$((128 * 1024 * 1024))
ae23c9
-
ae23c9
-run_qemu <
ae23c9
-{ "execute": "qmp_capabilities" }
ae23c9
-{ "execute": "x-blockdev-create",
ae23c9
-  "arguments": {
ae23c9
-      "driver": "file",
ae23c9
-      "filename": "$TEST_IMG",
ae23c9
-      "size": 0
ae23c9
-  }
ae23c9
-}
ae23c9
-{ "execute": "blockdev-add",
ae23c9
-  "arguments": {
ae23c9
-      "driver": "file",
ae23c9
-      "node-name": "imgfile",
ae23c9
-      "filename": "$TEST_IMG"
ae23c9
-  }
ae23c9
-}
ae23c9
-{ "execute": "x-blockdev-create",
ae23c9
-  "arguments": {
ae23c9
-      "driver": "$IMGFMT",
ae23c9
-      "file": "imgfile",
ae23c9
-      "size": $size
ae23c9
-  }
ae23c9
-}
ae23c9
-{ "execute": "quit" }
ae23c9
-EOF
ae23c9
-
ae23c9
-_img_info --format-specific
ae23c9
-
ae23c9
-echo
ae23c9
-echo "=== Successful image creation (inline blockdev-add, explicit defaults) ==="
ae23c9
-echo
ae23c9
-
ae23c9
-# Choose a different size to show that we got a new image
ae23c9
-size=$((64 * 1024 * 1024))
ae23c9
-
ae23c9
-run_qemu <
ae23c9
-{ "execute": "qmp_capabilities" }
ae23c9
-{ "execute": "x-blockdev-create",
ae23c9
-  "arguments": {
ae23c9
-      "driver": "file",
ae23c9
-      "filename": "$TEST_IMG",
ae23c9
-      "size": 0,
ae23c9
-      "preallocation": "off",
ae23c9
-      "nocow": false
ae23c9
-  }
ae23c9
-}
ae23c9
-{ "execute": "x-blockdev-create",
ae23c9
-  "arguments": {
ae23c9
-      "driver": "$IMGFMT",
ae23c9
-      "file": {
ae23c9
-          "driver": "file",
ae23c9
-          "filename": "$TEST_IMG"
ae23c9
-      },
ae23c9
-      "size": $size,
ae23c9
-      "version": "v3",
ae23c9
-      "cluster-size": 65536,
ae23c9
-      "preallocation": "off",
ae23c9
-      "lazy-refcounts": false,
ae23c9
-      "refcount-bits": 16
ae23c9
-  }
ae23c9
-}
ae23c9
-{ "execute": "quit" }
ae23c9
-EOF
ae23c9
-
ae23c9
-_img_info --format-specific
ae23c9
-
ae23c9
-echo
ae23c9
-echo "=== Successful image creation (v3 non-default options) ==="
ae23c9
-echo
ae23c9
-
ae23c9
-# Choose a different size to show that we got a new image
ae23c9
-size=$((32 * 1024 * 1024))
ae23c9
-
ae23c9
-run_qemu <
ae23c9
-{ "execute": "qmp_capabilities" }
ae23c9
-{ "execute": "x-blockdev-create",
ae23c9
-  "arguments": {
ae23c9
-      "driver": "file",
ae23c9
-      "filename": "$TEST_IMG",
ae23c9
-      "size": 0,
ae23c9
-      "preallocation": "falloc",
ae23c9
-      "nocow": true
ae23c9
-  }
ae23c9
-}
ae23c9
-{ "execute": "x-blockdev-create",
ae23c9
-  "arguments": {
ae23c9
-      "driver": "$IMGFMT",
ae23c9
-      "file": {
ae23c9
-          "driver": "file",
ae23c9
-          "filename": "$TEST_IMG"
ae23c9
-      },
ae23c9
-      "size": $size,
ae23c9
-      "version": "v3",
ae23c9
-      "cluster-size": 2097152,
ae23c9
-      "preallocation": "metadata",
ae23c9
-      "lazy-refcounts": true,
ae23c9
-      "refcount-bits": 1
ae23c9
-  }
ae23c9
-}
ae23c9
-{ "execute": "quit" }
ae23c9
-EOF
ae23c9
-
ae23c9
-_img_info --format-specific
ae23c9
-
ae23c9
-echo
ae23c9
-echo "=== Successful image creation (v2 non-default options) ==="
ae23c9
-echo
ae23c9
-
ae23c9
-mv $TEST_IMG $TEST_IMG.base
ae23c9
-
ae23c9
-run_qemu <
ae23c9
-{ "execute": "qmp_capabilities" }
ae23c9
-{ "execute": "x-blockdev-create",
ae23c9
-  "arguments": {
ae23c9
-      "driver": "file",
ae23c9
-      "filename": "$TEST_IMG",
ae23c9
-      "size": 0
ae23c9
-  }
ae23c9
-}
ae23c9
-{ "execute": "x-blockdev-create",
ae23c9
-  "arguments": {
ae23c9
-      "driver": "$IMGFMT",
ae23c9
-      "file": {
ae23c9
-          "driver": "file",
ae23c9
-          "filename": "$TEST_IMG"
ae23c9
-      },
ae23c9
-      "size": $size,
ae23c9
-      "backing-file": "$TEST_IMG.base",
ae23c9
-      "backing-fmt": "qcow2",
ae23c9
-      "version": "v2",
ae23c9
-      "cluster-size": 512
ae23c9
-  }
ae23c9
-}
ae23c9
-{ "execute": "quit" }
ae23c9
-EOF
ae23c9
-
ae23c9
-_img_info --format-specific
ae23c9
-
ae23c9
-echo
ae23c9
-echo "=== Successful image creation (encrypted) ==="
ae23c9
-echo
ae23c9
-
ae23c9
-run_qemu -object secret,id=keysec0,data="foo" <
ae23c9
-{ "execute": "qmp_capabilities" }
ae23c9
-{ "execute": "x-blockdev-create",
ae23c9
-  "arguments": {
ae23c9
-      "driver": "$IMGFMT",
ae23c9
-      "file": {
ae23c9
-          "driver": "file",
ae23c9
-          "filename": "$TEST_IMG"
ae23c9
-      },
ae23c9
-      "size": $size,
ae23c9
-      "encrypt": {
ae23c9
-          "format": "luks",
ae23c9
-          "key-secret": "keysec0",
ae23c9
-          "cipher-alg": "twofish-128",
ae23c9
-          "cipher-mode": "ctr",
ae23c9
-          "ivgen-alg": "plain64",
ae23c9
-          "ivgen-hash-alg": "md5",
ae23c9
-          "hash-alg": "sha1",
ae23c9
-          "iter-time": 10
ae23c9
-      }
ae23c9
-  }
ae23c9
-}
ae23c9
-{ "execute": "quit" }
ae23c9
-EOF
ae23c9
-
ae23c9
-_img_info --format-specific | _filter_img_info --format-specific
ae23c9
-
ae23c9
-echo
ae23c9
-echo "=== Invalid BlockdevRef ==="
ae23c9
-echo
ae23c9
-
ae23c9
-run_qemu <
ae23c9
-{ "execute": "qmp_capabilities" }
ae23c9
-{ "execute": "x-blockdev-create",
ae23c9
-  "arguments": {
ae23c9
-      "driver": "$IMGFMT",
ae23c9
-      "file": "this doesn't exist",
ae23c9
-      "size": $size
ae23c9
-  }
ae23c9
-}
ae23c9
-{ "execute": "quit" }
ae23c9
-EOF
ae23c9
-
ae23c9
-
ae23c9
-echo
ae23c9
-echo "=== Invalid sizes ==="
ae23c9
-echo
ae23c9
-
ae23c9
-# TODO Negative image sizes aren't handled correctly, but this is a problem
ae23c9
-# with QAPI's implementation of the 'size' type and affects other commands as
ae23c9
-# well. Once this is fixed, we may want to add a test case here.
ae23c9
-
ae23c9
-# 1. Misaligned image size
ae23c9
-# 2. 2^64 - 512
ae23c9
-# 3. 2^63 = 8 EB (qemu-img enforces image sizes less than this)
ae23c9
-# 4. 2^63 - 512 (generally valid, but qcow2 can't handle images this size)
ae23c9
-
ae23c9
-run_qemu -blockdev driver=file,filename="$TEST_IMG",node-name=node0 <
ae23c9
-{ "execute": "qmp_capabilities" }
ae23c9
-{ "execute": "x-blockdev-create",
ae23c9
-  "arguments": {
ae23c9
-      "driver": "$IMGFMT",
ae23c9
-      "file": "node0",
ae23c9
-      "size": 1234
ae23c9
-  }
ae23c9
-}
ae23c9
-{ "execute": "x-blockdev-create",
ae23c9
-  "arguments": {
ae23c9
-      "driver": "$IMGFMT",
ae23c9
-      "file": "node0",
ae23c9
-      "size": 18446744073709551104
ae23c9
-  }
ae23c9
-}
ae23c9
-{ "execute": "x-blockdev-create",
ae23c9
-  "arguments": {
ae23c9
-      "driver": "$IMGFMT",
ae23c9
-      "file": "node0",
ae23c9
-      "size": 9223372036854775808
ae23c9
-  }
ae23c9
-}
ae23c9
-{ "execute": "x-blockdev-create",
ae23c9
-  "arguments": {
ae23c9
-      "driver": "$IMGFMT",
ae23c9
-      "file": "node0",
ae23c9
-      "size": 9223372036854775296
ae23c9
-  }
ae23c9
-}
ae23c9
-{ "execute": "quit" }
ae23c9
-EOF
ae23c9
-
ae23c9
-echo
ae23c9
-echo "=== Invalid version ==="
ae23c9
-echo
ae23c9
-
ae23c9
-run_qemu -blockdev driver=file,filename="$TEST_IMG",node-name=node0 <
ae23c9
-{ "execute": "qmp_capabilities" }
ae23c9
-{ "execute": "x-blockdev-create",
ae23c9
-  "arguments": {
ae23c9
-      "driver": "$IMGFMT",
ae23c9
-      "file": "node0",
ae23c9
-      "size": 67108864,
ae23c9
-      "version": "v1"
ae23c9
-  }
ae23c9
-}
ae23c9
-{ "execute": "x-blockdev-create",
ae23c9
-  "arguments": {
ae23c9
-      "driver": "$IMGFMT",
ae23c9
-      "file": "node0",
ae23c9
-      "size": 67108864,
ae23c9
-      "version": "v2",
ae23c9
-      "lazy-refcounts": true
ae23c9
-  }
ae23c9
-}
ae23c9
-{ "execute": "x-blockdev-create",
ae23c9
-  "arguments": {
ae23c9
-      "driver": "$IMGFMT",
ae23c9
-      "file": "node0",
ae23c9
-      "size": 67108864,
ae23c9
-      "version": "v2",
ae23c9
-      "refcount-bits": 8
ae23c9
-  }
ae23c9
-}
ae23c9
-{ "execute": "quit" }
ae23c9
-EOF
ae23c9
-
ae23c9
-echo
ae23c9
-echo "=== Invalid backing file options ==="
ae23c9
-echo
ae23c9
-
ae23c9
-run_qemu -blockdev driver=file,filename="$TEST_IMG",node-name=node0 <
ae23c9
-{ "execute": "qmp_capabilities" }
ae23c9
-{ "execute": "x-blockdev-create",
ae23c9
-  "arguments": {
ae23c9
-      "driver": "$IMGFMT",
ae23c9
-      "file": "node0",
ae23c9
-      "size": 67108864,
ae23c9
-      "backing-file": "/dev/null",
ae23c9
-      "preallocation": "full"
ae23c9
-  }
ae23c9
-}
ae23c9
-{ "execute": "x-blockdev-create",
ae23c9
-  "arguments": {
ae23c9
-      "driver": "$IMGFMT",
ae23c9
-      "file": "node0",
ae23c9
-      "size": 67108864,
ae23c9
-      "backing-fmt": "$IMGFMT"
ae23c9
-  }
ae23c9
-}
ae23c9
-{ "execute": "quit" }
ae23c9
-EOF
ae23c9
-
ae23c9
-echo
ae23c9
-echo "=== Invalid cluster size ==="
ae23c9
-echo
ae23c9
-
ae23c9
-run_qemu -blockdev driver=file,filename="$TEST_IMG",node-name=node0 <
ae23c9
-{ "execute": "qmp_capabilities" }
ae23c9
-{ "execute": "x-blockdev-create",
ae23c9
-  "arguments": {
ae23c9
-      "driver": "$IMGFMT",
ae23c9
-      "file": "node0",
ae23c9
-      "size": 67108864,
ae23c9
-      "cluster-size": 1234
ae23c9
-  }
ae23c9
-}
ae23c9
-{ "execute": "x-blockdev-create",
ae23c9
-  "arguments": {
ae23c9
-      "driver": "$IMGFMT",
ae23c9
-      "file": "node0",
ae23c9
-      "size": 67108864,
ae23c9
-      "cluster-size": 128
ae23c9
-  }
ae23c9
-}
ae23c9
-{ "execute": "x-blockdev-create",
ae23c9
-  "arguments": {
ae23c9
-      "driver": "$IMGFMT",
ae23c9
-      "file": "node0",
ae23c9
-      "size": 67108864,
ae23c9
-      "cluster-size": 4194304
ae23c9
-  }
ae23c9
-}
ae23c9
-{ "execute": "x-blockdev-create",
ae23c9
-  "arguments": {
ae23c9
-      "driver": "$IMGFMT",
ae23c9
-      "file": "node0",
ae23c9
-      "size": 67108864,
ae23c9
-      "cluster-size": 0
ae23c9
-  }
ae23c9
-}
ae23c9
-{ "execute": "x-blockdev-create",
ae23c9
-  "arguments": {
ae23c9
-      "driver": "$IMGFMT",
ae23c9
-      "file": "node0",
ae23c9
-      "size": 281474976710656,
ae23c9
-      "cluster-size": 512
ae23c9
-  }
ae23c9
-}
ae23c9
-{ "execute": "quit" }
ae23c9
-EOF
ae23c9
-
ae23c9
-echo
ae23c9
-echo "=== Invalid refcount width ==="
ae23c9
-echo
ae23c9
-
ae23c9
-run_qemu -blockdev driver=file,filename="$TEST_IMG",node-name=node0 <
ae23c9
-{ "execute": "qmp_capabilities" }
ae23c9
-{ "execute": "x-blockdev-create",
ae23c9
-  "arguments": {
ae23c9
-      "driver": "$IMGFMT",
ae23c9
-      "file": "node0",
ae23c9
-      "size": 67108864,
ae23c9
-      "refcount-bits": 128
ae23c9
-  }
ae23c9
-}
ae23c9
-{ "execute": "x-blockdev-create",
ae23c9
-  "arguments": {
ae23c9
-      "driver": "$IMGFMT",
ae23c9
-      "file": "node0",
ae23c9
-      "size": 67108864,
ae23c9
-      "refcount-bits": 0
ae23c9
-  }
ae23c9
-}
ae23c9
-{ "execute": "x-blockdev-create",
ae23c9
-  "arguments": {
ae23c9
-      "driver": "$IMGFMT",
ae23c9
-      "file": "node0",
ae23c9
-      "size": 67108864,
ae23c9
-      "refcount-bits": 7
ae23c9
-  }
ae23c9
-}
ae23c9
-{ "execute": "quit" }
ae23c9
-EOF
ae23c9
-
ae23c9
-# success, all done
ae23c9
-echo "*** done"
ae23c9
-rm -f $seq.full
ae23c9
-status=0
ae23c9
+import iotests
ae23c9
+from iotests import imgfmt
ae23c9
+
ae23c9
+iotests.verify_image_format(supported_fmts=['qcow2'])
ae23c9
+
ae23c9
+def blockdev_create(vm, options):
ae23c9
+    result = vm.qmp_log('x-blockdev-create', job_id='job0', options=options)
ae23c9
+
ae23c9
+    if 'return' in result:
ae23c9
+        assert result['return'] == {}
ae23c9
+        vm.run_job('job0')
ae23c9
+    iotests.log("")
ae23c9
+
ae23c9
+with iotests.FilePath('t.qcow2') as disk_path, \
ae23c9
+     iotests.FilePath('t.qcow2.base') as backing_path, \
ae23c9
+     iotests.VM() as vm:
ae23c9
+
ae23c9
+    vm.add_object('secret,id=keysec0,data=foo')
ae23c9
+
ae23c9
+    #
ae23c9
+    # Successful image creation (defaults)
ae23c9
+    #
ae23c9
+    iotests.log("=== Successful image creation (defaults) ===")
ae23c9
+    iotests.log("")
ae23c9
+
ae23c9
+    size = 128 * 1024 * 1024
ae23c9
+
ae23c9
+    vm.launch()
ae23c9
+    blockdev_create(vm, { 'driver': 'file',
ae23c9
+                          'filename': disk_path,
ae23c9
+                          'size': 0 })
ae23c9
+
ae23c9
+    vm.qmp_log('blockdev-add', driver='file', filename=disk_path,
ae23c9
+               node_name='imgfile')
ae23c9
+
ae23c9
+    blockdev_create(vm, { 'driver': imgfmt,
ae23c9
+                          'file': 'imgfile',
ae23c9
+                          'size': size })
ae23c9
+    vm.shutdown()
ae23c9
+
ae23c9
+    iotests.img_info_log(disk_path)
ae23c9
+
ae23c9
+    #
ae23c9
+    # Successful image creation (inline blockdev-add, explicit defaults)
ae23c9
+    #
ae23c9
+    iotests.log("=== Successful image creation (inline blockdev-add, explicit defaults) ===")
ae23c9
+    iotests.log("")
ae23c9
+
ae23c9
+    # Choose a different size to show that we got a new image
ae23c9
+    size = 64 * 1024 * 1024
ae23c9
+
ae23c9
+    vm.launch()
ae23c9
+    blockdev_create(vm, { 'driver': 'file',
ae23c9
+                          'filename': disk_path,
ae23c9
+                          'size': 0,
ae23c9
+                          'preallocation': 'off',
ae23c9
+                          'nocow': False })
ae23c9
+
ae23c9
+    blockdev_create(vm, { 'driver': imgfmt,
ae23c9
+                          'file': {
ae23c9
+                              'driver': 'file',
ae23c9
+                              'filename': disk_path,
ae23c9
+                          },
ae23c9
+                          'size': size,
ae23c9
+                          'version': 'v3',
ae23c9
+                          'cluster-size': 65536,
ae23c9
+                          'preallocation': 'off',
ae23c9
+                          'lazy-refcounts': False,
ae23c9
+                          'refcount-bits': 16 })
ae23c9
+    vm.shutdown()
ae23c9
+
ae23c9
+    iotests.img_info_log(disk_path)
ae23c9
+
ae23c9
+    #
ae23c9
+    # Successful image creation (v3 non-default options)
ae23c9
+    #
ae23c9
+    iotests.log("=== Successful image creation (v3 non-default options) ===")
ae23c9
+    iotests.log("")
ae23c9
+
ae23c9
+    # Choose a different size to show that we got a new image
ae23c9
+    size = 32 * 1024 * 1024
ae23c9
+
ae23c9
+    vm.launch()
ae23c9
+    blockdev_create(vm, { 'driver': 'file',
ae23c9
+                          'filename': disk_path,
ae23c9
+                          'size': 0,
ae23c9
+                          'preallocation': 'falloc',
ae23c9
+                          'nocow': True })
ae23c9
+
ae23c9
+    blockdev_create(vm, { 'driver': imgfmt,
ae23c9
+                          'file': {
ae23c9
+                              'driver': 'file',
ae23c9
+                              'filename': disk_path,
ae23c9
+                          },
ae23c9
+                          'size': size,
ae23c9
+                          'version': 'v3',
ae23c9
+                          'cluster-size': 2097152,
ae23c9
+                          'preallocation': 'metadata',
ae23c9
+                          'lazy-refcounts': True,
ae23c9
+                          'refcount-bits': 1 })
ae23c9
+    vm.shutdown()
ae23c9
+
ae23c9
+    iotests.img_info_log(disk_path)
ae23c9
+
ae23c9
+    #
ae23c9
+    # Successful image creation (v2 non-default options)
ae23c9
+    #
ae23c9
+    iotests.log("=== Successful image creation (v2 non-default options) ===")
ae23c9
+    iotests.log("")
ae23c9
+
ae23c9
+    vm.launch()
ae23c9
+    blockdev_create(vm, { 'driver': 'file',
ae23c9
+                          'filename': disk_path,
ae23c9
+                          'size': 0 })
ae23c9
+
ae23c9
+    blockdev_create(vm, { 'driver': imgfmt,
ae23c9
+                          'file': {
ae23c9
+                              'driver': 'file',
ae23c9
+                              'filename': disk_path,
ae23c9
+                          },
ae23c9
+                          'size': size,
ae23c9
+                          'backing-file': backing_path,
ae23c9
+                          'backing-fmt': 'qcow2',
ae23c9
+                          'version': 'v2',
ae23c9
+                          'cluster-size': 512 })
ae23c9
+    vm.shutdown()
ae23c9
+
ae23c9
+    iotests.img_info_log(disk_path)
ae23c9
+
ae23c9
+    #
ae23c9
+    # Successful image creation (encrypted)
ae23c9
+    #
ae23c9
+    iotests.log("=== Successful image creation (encrypted) ===")
ae23c9
+    iotests.log("")
ae23c9
+
ae23c9
+    vm.launch()
ae23c9
+    blockdev_create(vm, { 'driver': imgfmt,
ae23c9
+                          'file': {
ae23c9
+                              'driver': 'file',
ae23c9
+                              'filename': disk_path,
ae23c9
+                          },
ae23c9
+                          'size': size,
ae23c9
+                          'encrypt': {
ae23c9
+                              'format': 'luks',
ae23c9
+                              'key-secret': 'keysec0',
ae23c9
+                              'cipher-alg': 'twofish-128',
ae23c9
+                              'cipher-mode': 'ctr',
ae23c9
+                              'ivgen-alg': 'plain64',
ae23c9
+                              'ivgen-hash-alg': 'md5',
ae23c9
+                              'hash-alg': 'sha1',
ae23c9
+                              'iter-time': 10,
ae23c9
+                          }})
ae23c9
+    vm.shutdown()
ae23c9
+
ae23c9
+    iotests.img_info_log(disk_path)
ae23c9
+
ae23c9
+    #
ae23c9
+    # Invalid BlockdevRef
ae23c9
+    #
ae23c9
+    iotests.log("=== Invalid BlockdevRef ===")
ae23c9
+    iotests.log("")
ae23c9
+
ae23c9
+    vm.launch()
ae23c9
+    blockdev_create(vm, { 'driver': imgfmt,
ae23c9
+                          'file': "this doesn't exist",
ae23c9
+                          'size': size })
ae23c9
+    vm.shutdown()
ae23c9
+
ae23c9
+    #
ae23c9
+    # Invalid sizes
ae23c9
+    #
ae23c9
+    iotests.log("=== Invalid sizes ===")
ae23c9
+
ae23c9
+    # TODO Negative image sizes aren't handled correctly, but this is a problem
ae23c9
+    # with QAPI's implementation of the 'size' type and affects other commands
ae23c9
+    # as well. Once this is fixed, we may want to add a test case here.
ae23c9
+    #
ae23c9
+    # 1. Misaligned image size
ae23c9
+    # 2. 2^64 - 512
ae23c9
+    # 3. 2^63 = 8 EB (qemu-img enforces image sizes less than this)
ae23c9
+    # 4. 2^63 - 512 (generally valid, but qcow2 can't handle images this size)
ae23c9
+
ae23c9
+    vm.add_blockdev('driver=file,filename=%s,node-name=node0' % (disk_path))
ae23c9
+
ae23c9
+    vm.launch()
ae23c9
+    for size in [ 1234, 18446744073709551104, 9223372036854775808,
ae23c9
+                  9223372036854775296 ]:
ae23c9
+        blockdev_create(vm, { 'driver': imgfmt,
ae23c9
+                              'file': 'node0',
ae23c9
+                              'size': size })
ae23c9
+    vm.shutdown()
ae23c9
+
ae23c9
+    #
ae23c9
+    # Invalid version
ae23c9
+    #
ae23c9
+    iotests.log("=== Invalid version ===")
ae23c9
+
ae23c9
+    vm.launch()
ae23c9
+    blockdev_create(vm, { 'driver': imgfmt,
ae23c9
+                          'file': 'node0',
ae23c9
+                          'size': 67108864,
ae23c9
+                          'version': 'v1' })
ae23c9
+    blockdev_create(vm, { 'driver': imgfmt,
ae23c9
+                          'file': 'node0',
ae23c9
+                          'size': 67108864,
ae23c9
+                          'version': 'v2',
ae23c9
+                          'lazy-refcounts': True })
ae23c9
+    blockdev_create(vm, { 'driver': imgfmt,
ae23c9
+                          'file': 'node0',
ae23c9
+                          'size': 67108864,
ae23c9
+                          'version': 'v2',
ae23c9
+                          'refcount-bits': 8 })
ae23c9
+    vm.shutdown()
ae23c9
+
ae23c9
+    #
ae23c9
+    # Invalid backing file options
ae23c9
+    #
ae23c9
+    iotests.log("=== Invalid backing file options ===")
ae23c9
+
ae23c9
+    vm.launch()
ae23c9
+    blockdev_create(vm, { 'driver': imgfmt,
ae23c9
+                          'file': 'node0',
ae23c9
+                          'size': 67108864,
ae23c9
+                          'backing-file': '/dev/null',
ae23c9
+                          'preallocation': 'full' })
ae23c9
+    blockdev_create(vm, { 'driver': imgfmt,
ae23c9
+                          'file': 'node0',
ae23c9
+                          'size': 67108864,
ae23c9
+                          'backing-fmt': imgfmt })
ae23c9
+    vm.shutdown()
ae23c9
+
ae23c9
+    #
ae23c9
+    # Invalid cluster size
ae23c9
+    #
ae23c9
+    iotests.log("=== Invalid cluster size ===")
ae23c9
+
ae23c9
+    vm.launch()
ae23c9
+    for csize in [ 1234, 128, 4194304, 0 ]:
ae23c9
+        blockdev_create(vm, { 'driver': imgfmt,
ae23c9
+                              'file': 'node0',
ae23c9
+                              'size': 67108864,
ae23c9
+                              'cluster-size': csize })
ae23c9
+    blockdev_create(vm, { 'driver': imgfmt,
ae23c9
+                          'file': 'node0',
ae23c9
+                          'size': 281474976710656,
ae23c9
+                          'cluster-size': 512 })
ae23c9
+    vm.shutdown()
ae23c9
+
ae23c9
+    #
ae23c9
+    # Invalid refcount width
ae23c9
+    #
ae23c9
+    iotests.log("=== Invalid refcount width ===")
ae23c9
+
ae23c9
+    vm.launch()
ae23c9
+    for refcount_bits in [ 128, 0, 7 ]:
ae23c9
+        blockdev_create(vm, { 'driver': imgfmt,
ae23c9
+                              'file': 'node0',
ae23c9
+                              'size': 67108864,
ae23c9
+                              'refcount-bits': refcount_bits })
ae23c9
+    vm.shutdown()
ae23c9
diff --git a/tests/qemu-iotests/206.out b/tests/qemu-iotests/206.out
ae23c9
index 042342a..34451a3 100644
ae23c9
--- a/tests/qemu-iotests/206.out
ae23c9
+++ b/tests/qemu-iotests/206.out
ae23c9
@@ -1,17 +1,18 @@
ae23c9
-QA output created by 206
ae23c9
-
ae23c9
 === Successful image creation (defaults) ===
ae23c9
 
ae23c9
-Testing:
ae23c9
-QMP_VERSION
ae23c9
-{"return": {}}
ae23c9
-{"return": {}}
ae23c9
-{"return": {}}
ae23c9
-{"return": {}}
ae23c9
-{"return": {}}
ae23c9
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false}}
ae23c9
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'size': 0, 'driver': 'file', 'filename': 'TEST_DIR/PID-t.qcow2'}}}
ae23c9
+{u'return': {}}
ae23c9
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
ae23c9
+{u'return': {}}
ae23c9
+
ae23c9
+{'execute': 'blockdev-add', 'arguments': {'node_name': 'imgfile', 'driver': 'file', 'filename': 'TEST_DIR/PID-t.qcow2'}}
ae23c9
+{u'return': {}}
ae23c9
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'qcow2', 'file': 'imgfile', 'size': 134217728}}}
ae23c9
+{u'return': {}}
ae23c9
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
ae23c9
+{u'return': {}}
ae23c9
 
ae23c9
-image: TEST_DIR/t.IMGFMT
ae23c9
+image: TEST_IMG
ae23c9
 file format: IMGFMT
ae23c9
 virtual size: 128M (134217728 bytes)
ae23c9
 cluster_size: 65536
ae23c9
@@ -23,15 +24,17 @@ Format specific information:
ae23c9
 
ae23c9
 === Successful image creation (inline blockdev-add, explicit defaults) ===
ae23c9
 
ae23c9
-Testing:
ae23c9
-QMP_VERSION
ae23c9
-{"return": {}}
ae23c9
-{"return": {}}
ae23c9
-{"return": {}}
ae23c9
-{"return": {}}
ae23c9
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false}}
ae23c9
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'nocow': False, 'preallocation': 'off', 'size': 0, 'driver': 'file', 'filename': 'TEST_DIR/PID-t.qcow2'}}}
ae23c9
+{u'return': {}}
ae23c9
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
ae23c9
+{u'return': {}}
ae23c9
 
ae23c9
-image: TEST_DIR/t.IMGFMT
ae23c9
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'cluster-size': 65536, 'refcount-bits': 16, 'version': 'v3', 'preallocation': 'off', 'file': {'driver': 'file', 'filename': 'TEST_DIR/PID-t.qcow2'}, 'lazy-refcounts': False, 'driver': 'qcow2', 'size': 67108864}}}
ae23c9
+{u'return': {}}
ae23c9
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
ae23c9
+{u'return': {}}
ae23c9
+
ae23c9
+image: TEST_IMG
ae23c9
 file format: IMGFMT
ae23c9
 virtual size: 64M (67108864 bytes)
ae23c9
 cluster_size: 65536
ae23c9
@@ -43,15 +46,17 @@ Format specific information:
ae23c9
 
ae23c9
 === Successful image creation (v3 non-default options) ===
ae23c9
 
ae23c9
-Testing:
ae23c9
-QMP_VERSION
ae23c9
-{"return": {}}
ae23c9
-{"return": {}}
ae23c9
-{"return": {}}
ae23c9
-{"return": {}}
ae23c9
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false}}
ae23c9
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'nocow': True, 'preallocation': 'falloc', 'size': 0, 'driver': 'file', 'filename': 'TEST_DIR/PID-t.qcow2'}}}
ae23c9
+{u'return': {}}
ae23c9
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
ae23c9
+{u'return': {}}
ae23c9
+
ae23c9
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'cluster-size': 2097152, 'refcount-bits': 1, 'version': 'v3', 'preallocation': 'metadata', 'file': {'driver': 'file', 'filename': 'TEST_DIR/PID-t.qcow2'}, 'lazy-refcounts': True, 'driver': 'qcow2', 'size': 33554432}}}
ae23c9
+{u'return': {}}
ae23c9
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
ae23c9
+{u'return': {}}
ae23c9
 
ae23c9
-image: TEST_DIR/t.IMGFMT
ae23c9
+image: TEST_IMG
ae23c9
 file format: IMGFMT
ae23c9
 virtual size: 32M (33554432 bytes)
ae23c9
 cluster_size: 2097152
ae23c9
@@ -63,19 +68,21 @@ Format specific information:
ae23c9
 
ae23c9
 === Successful image creation (v2 non-default options) ===
ae23c9
 
ae23c9
-Testing:
ae23c9
-QMP_VERSION
ae23c9
-{"return": {}}
ae23c9
-{"return": {}}
ae23c9
-{"return": {}}
ae23c9
-{"return": {}}
ae23c9
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false}}
ae23c9
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'size': 0, 'driver': 'file', 'filename': 'TEST_DIR/PID-t.qcow2'}}}
ae23c9
+{u'return': {}}
ae23c9
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
ae23c9
+{u'return': {}}
ae23c9
 
ae23c9
-image: TEST_DIR/t.IMGFMT
ae23c9
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'cluster-size': 512, 'backing-fmt': 'qcow2', 'driver': 'qcow2', 'version': 'v2', 'file': {'driver': 'file', 'filename': 'TEST_DIR/PID-t.qcow2'}, 'backing-file': 'TEST_DIR/PID-t.qcow2.base', 'size': 33554432}}}
ae23c9
+{u'return': {}}
ae23c9
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
ae23c9
+{u'return': {}}
ae23c9
+
ae23c9
+image: TEST_IMG
ae23c9
 file format: IMGFMT
ae23c9
 virtual size: 32M (33554432 bytes)
ae23c9
 cluster_size: 512
ae23c9
-backing file: TEST_DIR/t.IMGFMT.base
ae23c9
+backing file: TEST_IMG.base
ae23c9
 backing file format: IMGFMT
ae23c9
 Format specific information:
ae23c9
     compat: 0.10
ae23c9
@@ -83,16 +90,16 @@ Format specific information:
ae23c9
 
ae23c9
 === Successful image creation (encrypted) ===
ae23c9
 
ae23c9
-Testing: -object secret,id=keysec0,data=foo
ae23c9
-QMP_VERSION
ae23c9
-{"return": {}}
ae23c9
-{"return": {}}
ae23c9
-{"return": {}}
ae23c9
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false}}
ae23c9
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'encrypt': {'key-secret': 'keysec0', 'iter-time': 10, 'cipher-mode': 'ctr', 'ivgen-hash-alg': 'md5', 'cipher-alg': 'twofish-128', 'format': 'luks', 'ivgen-alg': 'plain64', 'hash-alg': 'sha1'}, 'driver': 'qcow2', 'file': {'driver': 'file', 'filename': 'TEST_DIR/PID-t.qcow2'}, 'size': 33554432}}}
ae23c9
+{u'return': {}}
ae23c9
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
ae23c9
+{u'return': {}}
ae23c9
 
ae23c9
-image: TEST_DIR/t.IMGFMT
ae23c9
+image: TEST_IMG
ae23c9
 file format: IMGFMT
ae23c9
 virtual size: 32M (33554432 bytes)
ae23c9
+encrypted: yes
ae23c9
+cluster_size: 65536
ae23c9
 Format specific information:
ae23c9
     compat: 1.1
ae23c9
     lazy refcounts: false
ae23c9
@@ -101,13 +108,13 @@ Format specific information:
ae23c9
         ivgen alg: plain64
ae23c9
         hash alg: sha1
ae23c9
         cipher alg: twofish-128
ae23c9
-        uuid: 00000000-0000-0000-0000-000000000000
ae23c9
+        uuid: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
ae23c9
         format: luks
ae23c9
         cipher mode: ctr
ae23c9
         slots:
ae23c9
             [0]:
ae23c9
                 active: true
ae23c9
-                iters: 1024
ae23c9
+                iters: XXX
ae23c9
                 key offset: 4096
ae23c9
                 stripes: 4000
ae23c9
             [1]:
ae23c9
@@ -132,78 +139,118 @@ Format specific information:
ae23c9
                 active: false
ae23c9
                 key offset: 462848
ae23c9
         payload offset: 528384
ae23c9
-        master key iters: 1024
ae23c9
+        master key iters: XXX
ae23c9
     corrupt: false
ae23c9
 
ae23c9
 === Invalid BlockdevRef ===
ae23c9
 
ae23c9
-Testing:
ae23c9
-QMP_VERSION
ae23c9
-{"return": {}}
ae23c9
-{"error": {"class": "GenericError", "desc": "Cannot find device=this doesn't exist nor node_name=this doesn't exist"}}
ae23c9
-{"return": {}}
ae23c9
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false}}
ae23c9
-
ae23c9
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'qcow2', 'file': "this doesn't exist", 'size': 33554432}}}
ae23c9
+{u'return': {}}
ae23c9
+Job failed: Cannot find device=this doesn't exist nor node_name=this doesn't exist
ae23c9
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
ae23c9
+{u'return': {}}
ae23c9
 
ae23c9
 === Invalid sizes ===
ae23c9
-
ae23c9
-Testing: -blockdev driver=file,filename=TEST_DIR/t.IMGFMT,node-name=node0
ae23c9
-QMP_VERSION
ae23c9
-{"return": {}}
ae23c9
-{"error": {"class": "GenericError", "desc": "Image size must be a multiple of 512 bytes"}}
ae23c9
-{"error": {"class": "GenericError", "desc": "Could not resize image: Image size cannot be negative"}}
ae23c9
-{"error": {"class": "GenericError", "desc": "Could not resize image: Image size cannot be negative"}}
ae23c9
-{"error": {"class": "GenericError", "desc": "Could not resize image: Failed to grow the L1 table: File too large"}}
ae23c9
-{"return": {}}
ae23c9
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false}}
ae23c9
-
ae23c9
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'qcow2', 'file': 'node0', 'size': 1234}}}
ae23c9
+{u'return': {}}
ae23c9
+Job failed: Image size must be a multiple of 512 bytes
ae23c9
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
ae23c9
+{u'return': {}}
ae23c9
+
ae23c9
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'qcow2', 'file': 'node0', 'size': 18446744073709551104L}}}
ae23c9
+{u'return': {}}
ae23c9
+Job failed: Could not resize image: Image size cannot be negative
ae23c9
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
ae23c9
+{u'return': {}}
ae23c9
+
ae23c9
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'qcow2', 'file': 'node0', 'size': 9223372036854775808L}}}
ae23c9
+{u'return': {}}
ae23c9
+Job failed: Could not resize image: Image size cannot be negative
ae23c9
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
ae23c9
+{u'return': {}}
ae23c9
+
ae23c9
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'qcow2', 'file': 'node0', 'size': 9223372036854775296}}}
ae23c9
+{u'return': {}}
ae23c9
+Job failed: Could not resize image: Failed to grow the L1 table: File too large
ae23c9
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
ae23c9
+{u'return': {}}
ae23c9
 
ae23c9
 === Invalid version ===
ae23c9
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'version': 'v1', 'driver': 'qcow2', 'file': 'node0', 'size': 67108864}}}
ae23c9
+{u'error': {u'class': u'GenericError', u'desc': u"Invalid parameter 'v1'"}}
ae23c9
 
ae23c9
-Testing: -blockdev driver=file,filename=TEST_DIR/t.IMGFMT,node-name=node0
ae23c9
-QMP_VERSION
ae23c9
-{"return": {}}
ae23c9
-{"error": {"class": "GenericError", "desc": "Invalid parameter 'v1'"}}
ae23c9
-{"error": {"class": "GenericError", "desc": "Lazy refcounts only supported with compatibility level 1.1 and above (use version=v3 or greater)"}}
ae23c9
-{"error": {"class": "GenericError", "desc": "Different refcount widths than 16 bits require compatibility level 1.1 or above (use version=v3 or greater)"}}
ae23c9
-{"return": {}}
ae23c9
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false}}
ae23c9
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'lazy-refcounts': True, 'version': 'v2', 'driver': 'qcow2', 'file': 'node0', 'size': 67108864}}}
ae23c9
+{u'return': {}}
ae23c9
+Job failed: Lazy refcounts only supported with compatibility level 1.1 and above (use version=v3 or greater)
ae23c9
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
ae23c9
+{u'return': {}}
ae23c9
 
ae23c9
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'refcount-bits': 8, 'version': 'v2', 'driver': 'qcow2', 'file': 'node0', 'size': 67108864}}}
ae23c9
+{u'return': {}}
ae23c9
+Job failed: Different refcount widths than 16 bits require compatibility level 1.1 or above (use version=v3 or greater)
ae23c9
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
ae23c9
+{u'return': {}}
ae23c9
 
ae23c9
 === Invalid backing file options ===
ae23c9
-
ae23c9
-Testing: -blockdev driver=file,filename=TEST_DIR/t.IMGFMT,node-name=node0
ae23c9
-QMP_VERSION
ae23c9
-{"return": {}}
ae23c9
-{"error": {"class": "GenericError", "desc": "Backing file and preallocation cannot be used at the same time"}}
ae23c9
-{"error": {"class": "GenericError", "desc": "Backing format cannot be used without backing file"}}
ae23c9
-{"return": {}}
ae23c9
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false}}
ae23c9
-
ae23c9
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'preallocation': 'full', 'driver': 'qcow2', 'backing-file': '/dev/null', 'file': 'node0', 'size': 67108864}}}
ae23c9
+{u'return': {}}
ae23c9
+Job failed: Backing file and preallocation cannot be used at the same time
ae23c9
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
ae23c9
+{u'return': {}}
ae23c9
+
ae23c9
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'backing-fmt': 'qcow2', 'driver': 'qcow2', 'file': 'node0', 'size': 67108864}}}
ae23c9
+{u'return': {}}
ae23c9
+Job failed: Backing format cannot be used without backing file
ae23c9
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
ae23c9
+{u'return': {}}
ae23c9
 
ae23c9
 === Invalid cluster size ===
ae23c9
-
ae23c9
-Testing: -blockdev driver=file,filename=TEST_DIR/t.IMGFMT,node-name=node0
ae23c9
-QMP_VERSION
ae23c9
-{"return": {}}
ae23c9
-{"error": {"class": "GenericError", "desc": "Cluster size must be a power of two between 512 and 2048k"}}
ae23c9
-{"error": {"class": "GenericError", "desc": "Cluster size must be a power of two between 512 and 2048k"}}
ae23c9
-{"error": {"class": "GenericError", "desc": "Cluster size must be a power of two between 512 and 2048k"}}
ae23c9
-{"error": {"class": "GenericError", "desc": "Cluster size must be a power of two between 512 and 2048k"}}
ae23c9
-{"error": {"class": "GenericError", "desc": "Could not resize image: Failed to grow the L1 table: File too large"}}
ae23c9
-{"return": {}}
ae23c9
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false}}
ae23c9
-
ae23c9
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'cluster-size': 1234, 'driver': 'qcow2', 'file': 'node0', 'size': 67108864}}}
ae23c9
+{u'return': {}}
ae23c9
+Job failed: Cluster size must be a power of two between 512 and 2048k
ae23c9
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
ae23c9
+{u'return': {}}
ae23c9
+
ae23c9
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'cluster-size': 128, 'driver': 'qcow2', 'file': 'node0', 'size': 67108864}}}
ae23c9
+{u'return': {}}
ae23c9
+Job failed: Cluster size must be a power of two between 512 and 2048k
ae23c9
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
ae23c9
+{u'return': {}}
ae23c9
+
ae23c9
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'cluster-size': 4194304, 'driver': 'qcow2', 'file': 'node0', 'size': 67108864}}}
ae23c9
+{u'return': {}}
ae23c9
+Job failed: Cluster size must be a power of two between 512 and 2048k
ae23c9
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
ae23c9
+{u'return': {}}
ae23c9
+
ae23c9
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'cluster-size': 0, 'driver': 'qcow2', 'file': 'node0', 'size': 67108864}}}
ae23c9
+{u'return': {}}
ae23c9
+Job failed: Cluster size must be a power of two between 512 and 2048k
ae23c9
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
ae23c9
+{u'return': {}}
ae23c9
+
ae23c9
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'cluster-size': 512, 'driver': 'qcow2', 'file': 'node0', 'size': 281474976710656}}}
ae23c9
+{u'return': {}}
ae23c9
+Job failed: Could not resize image: Failed to grow the L1 table: File too large
ae23c9
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
ae23c9
+{u'return': {}}
ae23c9
 
ae23c9
 === Invalid refcount width ===
ae23c9
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'refcount-bits': 128, 'driver': 'qcow2', 'file': 'node0', 'size': 67108864}}}
ae23c9
+{u'return': {}}
ae23c9
+Job failed: Refcount width must be a power of two and may not exceed 64 bits
ae23c9
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
ae23c9
+{u'return': {}}
ae23c9
+
ae23c9
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'refcount-bits': 0, 'driver': 'qcow2', 'file': 'node0', 'size': 67108864}}}
ae23c9
+{u'return': {}}
ae23c9
+Job failed: Refcount width must be a power of two and may not exceed 64 bits
ae23c9
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
ae23c9
+{u'return': {}}
ae23c9
+
ae23c9
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'refcount-bits': 7, 'driver': 'qcow2', 'file': 'node0', 'size': 67108864}}}
ae23c9
+{u'return': {}}
ae23c9
+Job failed: Refcount width must be a power of two and may not exceed 64 bits
ae23c9
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
ae23c9
+{u'return': {}}
ae23c9
 
ae23c9
-Testing: -blockdev driver=file,filename=TEST_DIR/t.IMGFMT,node-name=node0
ae23c9
-QMP_VERSION
ae23c9
-{"return": {}}
ae23c9
-{"error": {"class": "GenericError", "desc": "Refcount width must be a power of two and may not exceed 64 bits"}}
ae23c9
-{"error": {"class": "GenericError", "desc": "Refcount width must be a power of two and may not exceed 64 bits"}}
ae23c9
-{"error": {"class": "GenericError", "desc": "Refcount width must be a power of two and may not exceed 64 bits"}}
ae23c9
-{"return": {}}
ae23c9
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false}}
ae23c9
-
ae23c9
-*** done
ae23c9
diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group
ae23c9
index 37ec5f1..3d6ae02 100644
ae23c9
--- a/tests/qemu-iotests/group
ae23c9
+++ b/tests/qemu-iotests/group
ae23c9
@@ -204,9 +204,9 @@
ae23c9
 203 rw auto
ae23c9
 204 rw auto quick
ae23c9
 205 rw auto quick
ae23c9
+206 rw auto
ae23c9
 # TODO The following commented out tests need to be reworked to work
ae23c9
 # with the x-blockdev-create job
ae23c9
-#206 rw auto
ae23c9
 #207 rw auto
ae23c9
 208 rw auto quick
ae23c9
 209 rw auto quick
ae23c9
-- 
ae23c9
1.8.3.1
ae23c9