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