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

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