26ba25
From f1d2e1321537263ea3555b1d0acdc8c39baac32d Mon Sep 17 00:00:00 2001
26ba25
From: Kevin Wolf <kwolf@redhat.com>
26ba25
Date: Tue, 26 Jun 2018 09:48:51 +0200
26ba25
Subject: [PATCH 143/268] qemu-iotests: Rewrite 213 for blockdev-create job
26ba25
26ba25
RH-Author: Kevin Wolf <kwolf@redhat.com>
26ba25
Message-id: <20180626094856.6924-69-kwolf@redhat.com>
26ba25
Patchwork-id: 81109
26ba25
O-Subject: [RHV-7.6 qemu-kvm-rhev PATCH v2 68/73] qemu-iotests: Rewrite 213 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 213 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 0c46a69a5eb8a061134719a0a85898854eb8e533)
26ba25
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
26ba25
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
26ba25
---
26ba25
 tests/qemu-iotests/213     | 520 +++++++++++++++++----------------------------
26ba25
 tests/qemu-iotests/213.out | 208 +++++++++++-------
26ba25
 tests/qemu-iotests/group   |   4 +-
26ba25
 3 files changed, 319 insertions(+), 413 deletions(-)
26ba25
26ba25
diff --git a/tests/qemu-iotests/213 b/tests/qemu-iotests/213
26ba25
index 3a00a0f..29d25bc 100755
26ba25
--- a/tests/qemu-iotests/213
26ba25
+++ b/tests/qemu-iotests/213
26ba25
@@ -1,9 +1,11 @@
26ba25
-#!/bin/bash
26ba25
+#!/usr/bin/env python
26ba25
 #
26ba25
 # Test vhdx 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,332 +20,190 @@
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 vhdx
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 | _filter_img_info --format-specific
26ba25
-
26ba25
-echo
26ba25
-echo "=== Successful image creation (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
-  }
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
-      "log-size": 1048576,
26ba25
-      "block-size": 8388608,
26ba25
-      "subformat": "dynamic",
26ba25
-      "block-state-zero": true
26ba25
-  }
26ba25
-}
26ba25
-{ "execute": "quit" }
26ba25
-EOF
26ba25
-
26ba25
-_img_info --format-specific | _filter_img_info --format-specific
26ba25
-
26ba25
-echo
26ba25
-echo "=== Successful image creation (with 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
-  }
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
-      "log-size": 8388608,
26ba25
-      "block-size": 268435456,
26ba25
-      "subformat": "fixed",
26ba25
-      "block-state-zero": false
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
-echo
26ba25
-echo "=== Zero 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": 0
26ba25
-  }
26ba25
-}
26ba25
-{ "execute": "quit" }
26ba25
-EOF
26ba25
-
26ba25
-_img_info | _filter_img_info
26ba25
-
26ba25
-echo
26ba25
-echo "=== Maximum 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": 70368744177664
26ba25
-  }
26ba25
-}
26ba25
-{ "execute": "quit" }
26ba25
-EOF
26ba25
-
26ba25
-_img_info | _filter_img_info
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. 2^64 - 512
26ba25
-# 2. 2^63 = 8 EB (qemu-img enforces image sizes less than this)
26ba25
-# 3. 2^63 - 512 (generally valid, but with the image header the file will
26ba25
-#                exceed 63 bits)
26ba25
-# 4. 2^46 + 1 (one byte more than maximum image 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": 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": "x-blockdev-create",
26ba25
-  "arguments": {
26ba25
-      "driver": "$IMGFMT",
26ba25
-      "file": "node0",
26ba25
-      "size": 70368744177665
26ba25
-  }
26ba25
-}
26ba25
-{ "execute": "quit" }
26ba25
-EOF
26ba25
-
26ba25
-echo
26ba25
-echo "=== Invalid block 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
-      "block-size": 1234567
26ba25
-  }
26ba25
-}
26ba25
-{ "execute": "x-blockdev-create",
26ba25
-  "arguments": {
26ba25
-      "driver": "$IMGFMT",
26ba25
-      "file": "node0",
26ba25
-      "size": 67108864,
26ba25
-      "block-size": 128
26ba25
-  }
26ba25
-}
26ba25
-{ "execute": "x-blockdev-create",
26ba25
-  "arguments": {
26ba25
-      "driver": "$IMGFMT",
26ba25
-      "file": "node0",
26ba25
-      "size": 67108864,
26ba25
-      "block-size": 3145728
26ba25
-  }
26ba25
-}
26ba25
-{ "execute": "x-blockdev-create",
26ba25
-  "arguments": {
26ba25
-      "driver": "$IMGFMT",
26ba25
-      "file": "node0",
26ba25
-      "size": 67108864,
26ba25
-      "block-size": 536870912
26ba25
-  }
26ba25
-}
26ba25
-{ "execute": "x-blockdev-create",
26ba25
-  "arguments": {
26ba25
-      "driver": "$IMGFMT",
26ba25
-      "file": "node0",
26ba25
-      "size": 67108864,
26ba25
-      "block-size": 0
26ba25
-  }
26ba25
-}
26ba25
-{ "execute": "quit" }
26ba25
-EOF
26ba25
-
26ba25
-echo
26ba25
-echo "=== Invalid log 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
-      "log-size": 1234567
26ba25
-  }
26ba25
-}
26ba25
-{ "execute": "x-blockdev-create",
26ba25
-  "arguments": {
26ba25
-      "driver": "$IMGFMT",
26ba25
-      "file": "node0",
26ba25
-      "size": 67108864,
26ba25
-      "log-size": 128
26ba25
-  }
26ba25
-}
26ba25
-{ "execute": "x-blockdev-create",
26ba25
-  "arguments": {
26ba25
-      "driver": "$IMGFMT",
26ba25
-      "file": "node0",
26ba25
-      "size": 67108864,
26ba25
-      "log-size": 4294967296
26ba25
-  }
26ba25
-}
26ba25
-{ "execute": "x-blockdev-create",
26ba25
-  "arguments": {
26ba25
-      "driver": "$IMGFMT",
26ba25
-      "file": "node0",
26ba25
-      "size": 67108864,
26ba25
-      "log-size": 0
26ba25
-  }
26ba25
-}
26ba25
-{ "execute": "quit" }
26ba25
-EOF
26ba25
-
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=['vhdx'])
26ba25
+iotests.verify_protocol(supported=['file'])
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.vhdx') as disk_path, \
26ba25
+     iotests.VM() as vm:
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 (explicit defaults)
26ba25
+    #
26ba25
+    iotests.log("=== Successful image creation (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
+    blockdev_create(vm, { 'driver': imgfmt,
26ba25
+                          'file': {
26ba25
+                              'driver': 'file',
26ba25
+                              'filename': disk_path,
26ba25
+                          },
26ba25
+                          'size': size,
26ba25
+                          'log-size': 1048576,
26ba25
+                          'block-size': 8388608,
26ba25
+                          'subformat': 'dynamic',
26ba25
+                          'block-state-zero': True })
26ba25
+    vm.shutdown()
26ba25
+
26ba25
+    iotests.img_info_log(disk_path)
26ba25
+
26ba25
+    #
26ba25
+    # Successful image creation (with non-default options)
26ba25
+    #
26ba25
+    iotests.log("=== Successful image creation (with 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
+    blockdev_create(vm, { 'driver': imgfmt,
26ba25
+                          'file': {
26ba25
+                              'driver': 'file',
26ba25
+                              'filename': disk_path,
26ba25
+                          },
26ba25
+                          'size': size,
26ba25
+                          'log-size': 8388608,
26ba25
+                          'block-size': 268435456,
26ba25
+                          'subformat': 'fixed',
26ba25
+                          'block-state-zero': False })
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
+    # Zero size
26ba25
+    #
26ba25
+    iotests.log("=== Zero size ===")
26ba25
+    iotests.log("")
26ba25
+
26ba25
+    vm.add_blockdev('driver=file,filename=%s,node-name=node0' % (disk_path))
26ba25
+    vm.launch()
26ba25
+    blockdev_create(vm, { 'driver': imgfmt,
26ba25
+                          'file': 'node0',
26ba25
+                          'size': 0 })
26ba25
+    vm.shutdown()
26ba25
+
26ba25
+    iotests.img_info_log(disk_path)
26ba25
+
26ba25
+    #
26ba25
+    # Maximum size
26ba25
+    #
26ba25
+    iotests.log("=== Maximum size ===")
26ba25
+    iotests.log("")
26ba25
+
26ba25
+    vm.launch()
26ba25
+    blockdev_create(vm, { 'driver': imgfmt,
26ba25
+                          'file': 'node0',
26ba25
+                          'size': 70368744177664 })
26ba25
+    vm.shutdown()
26ba25
+
26ba25
+    iotests.img_info_log(disk_path)
26ba25
+
26ba25
+    #
26ba25
+    # Invalid sizes
26ba25
+    #
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. 2^64 - 512
26ba25
+    # 2. 2^63 = 8 EB (qemu-img enforces image sizes less than this)
26ba25
+    # 3. 2^63 - 512 (generally valid, but with the image header the file will
26ba25
+    #                exceed 63 bits)
26ba25
+    # 4. 2^46 + 1 (one byte more than maximum image size)
26ba25
+
26ba25
+    iotests.log("=== Invalid sizes ===")
26ba25
+    iotests.log("")
26ba25
+
26ba25
+    vm.launch()
26ba25
+    for size in [ 18446744073709551104, 9223372036854775808,
26ba25
+                  9223372036854775296, 70368744177665 ]:
26ba25
+        blockdev_create(vm, { 'driver': imgfmt,
26ba25
+                              'file': 'node0',
26ba25
+                              'size': size })
26ba25
+    vm.shutdown()
26ba25
+
26ba25
+    #
26ba25
+    # Invalid block size
26ba25
+    #
26ba25
+    iotests.log("=== Invalid block size ===")
26ba25
+    iotests.log("")
26ba25
+
26ba25
+    vm.launch()
26ba25
+    for bsize in [ 1234567, 128, 3145728, 536870912, 0 ]:
26ba25
+        blockdev_create(vm, { 'driver': imgfmt,
26ba25
+                              'file': 'node0',
26ba25
+                              'size': 67108864,
26ba25
+                              'block-size': bsize })
26ba25
+    vm.shutdown()
26ba25
+
26ba25
+    #
26ba25
+    # Invalid log size
26ba25
+    #
26ba25
+    iotests.log("=== Invalid log size ===")
26ba25
+    iotests.log("")
26ba25
+
26ba25
+    vm.launch()
26ba25
+    for lsize in [ 1234567, 128, 4294967296, 0 ]:
26ba25
+        blockdev_create(vm, { 'driver': imgfmt,
26ba25
+                              'file': 'node0',
26ba25
+                              'size': 67108864,
26ba25
+                              'log-size': lsize })
26ba25
+    vm.shutdown()
26ba25
diff --git a/tests/qemu-iotests/213.out b/tests/qemu-iotests/213.out
26ba25
index 8e8fc29..f18a39a 100644
26ba25
--- a/tests/qemu-iotests/213.out
26ba25
+++ b/tests/qemu-iotests/213.out
26ba25
@@ -1,121 +1,169 @@
26ba25
-QA output created by 213
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.vhdx'}}}
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.vhdx'}}
26ba25
+{u'return': {}}
26ba25
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'vhdx', '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: 8388608
26ba25
 
26ba25
 === Successful image creation (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': {'size': 0, 'driver': 'file', 'filename': 'TEST_DIR/PID-t.vhdx'}}}
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': {'block-size': 8388608, 'driver': 'vhdx', 'subformat': 'dynamic', 'log-size': 1048576, 'file': {'driver': 'file', 'filename': 'TEST_DIR/PID-t.vhdx'}, 'block-state-zero': True, '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: 8388608
26ba25
 
26ba25
 === Successful image creation (with 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.vhdx'}}}
26ba25
+{u'return': {}}
26ba25
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
26ba25
+{u'return': {}}
26ba25
+
26ba25
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'block-size': 268435456, 'driver': 'vhdx', 'subformat': 'fixed', 'log-size': 8388608, 'file': {'driver': 'file', 'filename': 'TEST_DIR/PID-t.vhdx'}, 'block-state-zero': False, '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: 268435456
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': 'vhdx', '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
 === Zero size ===
26ba25
 
26ba25
-Testing: -blockdev driver=file,filename=TEST_DIR/t.IMGFMT,node-name=node0
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': {'driver': 'vhdx', 'file': 'node0', 'size': 0}}}
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: 0 (0 bytes)
26ba25
+cluster_size: 8388608
26ba25
 
26ba25
 === Maximum size ===
26ba25
 
26ba25
-Testing: -blockdev driver=file,filename=TEST_DIR/t.IMGFMT,node-name=node0
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': {'driver': 'vhdx', 'file': 'node0', 'size': 70368744177664}}}
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: 64T (70368744177664 bytes)
26ba25
+cluster_size: 67108864
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 too large; max of 64TB"}}
26ba25
-{"error": {"class": "GenericError", "desc": "Image size too large; max of 64TB"}}
26ba25
-{"error": {"class": "GenericError", "desc": "Image size too large; max of 64TB"}}
26ba25
-{"error": {"class": "GenericError", "desc": "Image size too large; max of 64TB"}}
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': 'vhdx', 'file': 'node0', 'size': 18446744073709551104L}}}
26ba25
+{u'return': {}}
26ba25
+Job failed: Image size too large; max of 64TB
26ba25
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
26ba25
+{u'return': {}}
26ba25
+
26ba25
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'vhdx', 'file': 'node0', 'size': 9223372036854775808L}}}
26ba25
+{u'return': {}}
26ba25
+Job failed: Image size too large; max of 64TB
26ba25
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
26ba25
+{u'return': {}}
26ba25
+
26ba25
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'vhdx', 'file': 'node0', 'size': 9223372036854775296}}}
26ba25
+{u'return': {}}
26ba25
+Job failed: Image size too large; max of 64TB
26ba25
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
26ba25
+{u'return': {}}
26ba25
+
26ba25
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'vhdx', 'file': 'node0', 'size': 70368744177665}}}
26ba25
+{u'return': {}}
26ba25
+Job failed: Image size too large; max of 64TB
26ba25
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
26ba25
+{u'return': {}}
26ba25
 
26ba25
 === Invalid block 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": "Block size must be a multiple of 1 MB"}}
26ba25
-{"error": {"class": "GenericError", "desc": "Block size must be a multiple of 1 MB"}}
26ba25
-{"error": {"class": "GenericError", "desc": "Block size must be a power of two"}}
26ba25
-{"error": {"class": "GenericError", "desc": "Block size must not exceed 268435456"}}
26ba25
-{"error": {"class": "GenericError", "desc": "Block size must be a multiple of 1 MB"}}
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': 'vhdx', 'block-size': 1234567, 'file': 'node0', 'size': 67108864}}}
26ba25
+{u'return': {}}
26ba25
+Job failed: Block size must be a multiple of 1 MB
26ba25
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
26ba25
+{u'return': {}}
26ba25
+
26ba25
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'vhdx', 'block-size': 128, 'file': 'node0', 'size': 67108864}}}
26ba25
+{u'return': {}}
26ba25
+Job failed: Block size must be a multiple of 1 MB
26ba25
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
26ba25
+{u'return': {}}
26ba25
+
26ba25
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'vhdx', 'block-size': 3145728, 'file': 'node0', 'size': 67108864}}}
26ba25
+{u'return': {}}
26ba25
+Job failed: Block size must be a power of two
26ba25
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
26ba25
+{u'return': {}}
26ba25
+
26ba25
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'vhdx', 'block-size': 536870912, 'file': 'node0', 'size': 67108864}}}
26ba25
+{u'return': {}}
26ba25
+Job failed: Block size must not exceed 268435456
26ba25
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
26ba25
+{u'return': {}}
26ba25
+
26ba25
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'vhdx', 'block-size': 0, 'file': 'node0', 'size': 67108864}}}
26ba25
+{u'return': {}}
26ba25
+Job failed: Block size must be a multiple of 1 MB
26ba25
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
26ba25
+{u'return': {}}
26ba25
 
26ba25
 === Invalid log 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": "Log size must be a multiple of 1 MB"}}
26ba25
-{"error": {"class": "GenericError", "desc": "Log size must be a multiple of 1 MB"}}
26ba25
-{"error": {"class": "GenericError", "desc": "Log size must be smaller than 4 GB"}}
26ba25
-{"error": {"class": "GenericError", "desc": "Log size must be a multiple of 1 MB"}}
26ba25
-{"return": {}}
26ba25
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false}}
26ba25
-
26ba25
-*** done
26ba25
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'log-size': 1234567, 'driver': 'vhdx', 'file': 'node0', 'size': 67108864}}}
26ba25
+{u'return': {}}
26ba25
+Job failed: Log size must be a multiple of 1 MB
26ba25
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
26ba25
+{u'return': {}}
26ba25
+
26ba25
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'log-size': 128, 'driver': 'vhdx', 'file': 'node0', 'size': 67108864}}}
26ba25
+{u'return': {}}
26ba25
+Job failed: Log size must be a multiple of 1 MB
26ba25
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
26ba25
+{u'return': {}}
26ba25
+
26ba25
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'log-size': 4294967296, 'driver': 'vhdx', 'file': 'node0', 'size': 67108864}}}
26ba25
+{u'return': {}}
26ba25
+Job failed: Log size must be smaller than 4 GB
26ba25
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
26ba25
+{u'return': {}}
26ba25
+
26ba25
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'log-size': 0, 'driver': 'vhdx', 'file': 'node0', 'size': 67108864}}}
26ba25
+{u'return': {}}
26ba25
+Job failed: Log size must be a multiple of 1 MB
26ba25
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
26ba25
+{u'return': {}}
26ba25
+
26ba25
diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group
26ba25
index 3753b13..5c55adc 100644
26ba25
--- a/tests/qemu-iotests/group
26ba25
+++ b/tests/qemu-iotests/group
26ba25
@@ -211,9 +211,7 @@
26ba25
 210 rw auto
26ba25
 211 rw auto quick
26ba25
 212 rw auto quick
26ba25
-# TODO The following commented out tests need to be reworked to work
26ba25
-# with the x-blockdev-create job
26ba25
-#213 rw auto quick
26ba25
+213 rw auto quick
26ba25
 214 rw auto
26ba25
 215 rw auto quick
26ba25
 216 rw auto quick
26ba25
-- 
26ba25
1.8.3.1
26ba25