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

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