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

357786
From 40109f0f193a6aa15858a6bbff47e6842c283d17 Mon Sep 17 00:00:00 2001
357786
From: Kevin Wolf <kwolf@redhat.com>
357786
Date: Tue, 26 Jun 2018 09:48:51 +0200
357786
Subject: [PATCH 82/89] qemu-iotests: Rewrite 213 for blockdev-create job
357786
357786
RH-Author: Kevin Wolf <kwolf@redhat.com>
357786
Message-id: <20180626094856.6924-69-kwolf@redhat.com>
357786
Patchwork-id: 81109
357786
O-Subject: [RHV-7.6 qemu-kvm-rhev PATCH v2 68/73] qemu-iotests: Rewrite 213 for blockdev-create job
357786
Bugzilla: 1513543
357786
RH-Acked-by: Jeffrey Cody <jcody@redhat.com>
357786
RH-Acked-by: Max Reitz <mreitz@redhat.com>
357786
RH-Acked-by: Fam Zheng <famz@redhat.com>
357786
357786
This rewrites the test case 213 to work with the new x-blockdev-create
357786
job rather than the old synchronous version of the command.
357786
357786
All of the test cases stay the same as before, but in order to be able
357786
to implement proper job handling, the test case is rewritten in Python.
357786
357786
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
357786
Reviewed-by: Max Reitz <mreitz@redhat.com>
357786
(cherry picked from commit 0c46a69a5eb8a061134719a0a85898854eb8e533)
357786
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
357786
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
357786
---
357786
 tests/qemu-iotests/213     | 520 +++++++++++++++++----------------------------
357786
 tests/qemu-iotests/213.out | 208 +++++++++++-------
357786
 tests/qemu-iotests/group   |   4 +-
357786
 3 files changed, 319 insertions(+), 413 deletions(-)
357786
357786
diff --git a/tests/qemu-iotests/213 b/tests/qemu-iotests/213
357786
index 3a00a0f..29d25bc 100755
357786
--- a/tests/qemu-iotests/213
357786
+++ b/tests/qemu-iotests/213
357786
@@ -1,9 +1,11 @@
357786
-#!/bin/bash
357786
+#!/usr/bin/env python
357786
 #
357786
 # Test vhdx and file image creation
357786
 #
357786
 # Copyright (C) 2018 Red Hat, Inc.
357786
 #
357786
+# Creator/Owner: Kevin Wolf <kwolf@redhat.com>
357786
+#
357786
 # This program is free software; you can redistribute it and/or modify
357786
 # it under the terms of the GNU General Public License as published by
357786
 # the Free Software Foundation; either version 2 of the License, or
357786
@@ -18,332 +20,190 @@
357786
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
357786
 #
357786
 
357786
-# creator
357786
-owner=kwolf@redhat.com
357786
-
357786
-seq=`basename $0`
357786
-echo "QA output created by $seq"
357786
-
357786
-here=`pwd`
357786
-status=1	# failure is the default!
357786
-
357786
-# get standard environment, filters and checks
357786
-. ./common.rc
357786
-. ./common.filter
357786
-
357786
-_supported_fmt vhdx
357786
-_supported_proto file
357786
-_supported_os Linux
357786
-
357786
-function do_run_qemu()
357786
-{
357786
-    echo Testing: "$@"
357786
-    $QEMU -nographic -qmp stdio -serial none "$@"
357786
-    echo
357786
-}
357786
-
357786
-function run_qemu()
357786
-{
357786
-    do_run_qemu "$@" 2>&1 | _filter_testdir | _filter_qmp \
357786
-                          | _filter_qemu | _filter_imgfmt \
357786
-                          | _filter_actual_image_size
357786
-}
357786
-
357786
-echo
357786
-echo "=== Successful image creation (defaults) ==="
357786
-echo
357786
-
357786
-size=$((128 * 1024 * 1024))
357786
-
357786
-run_qemu <
357786
-{ "execute": "qmp_capabilities" }
357786
-{ "execute": "x-blockdev-create",
357786
-  "arguments": {
357786
-      "driver": "file",
357786
-      "filename": "$TEST_IMG",
357786
-      "size": 0
357786
-  }
357786
-}
357786
-{ "execute": "blockdev-add",
357786
-  "arguments": {
357786
-      "driver": "file",
357786
-      "node-name": "imgfile",
357786
-      "filename": "$TEST_IMG"
357786
-  }
357786
-}
357786
-{ "execute": "x-blockdev-create",
357786
-  "arguments": {
357786
-      "driver": "$IMGFMT",
357786
-      "file": "imgfile",
357786
-      "size": $size
357786
-  }
357786
-}
357786
-{ "execute": "quit" }
357786
-EOF
357786
-
357786
-_img_info --format-specific | _filter_img_info --format-specific
357786
-
357786
-echo
357786
-echo "=== Successful image creation (explicit defaults) ==="
357786
-echo
357786
-
357786
-# Choose a different size to show that we got a new image
357786
-size=$((64 * 1024 * 1024))
357786
-
357786
-run_qemu <
357786
-{ "execute": "qmp_capabilities" }
357786
-{ "execute": "x-blockdev-create",
357786
-  "arguments": {
357786
-      "driver": "file",
357786
-      "filename": "$TEST_IMG",
357786
-      "size": 0
357786
-  }
357786
-}
357786
-{ "execute": "x-blockdev-create",
357786
-  "arguments": {
357786
-      "driver": "$IMGFMT",
357786
-      "file": {
357786
-          "driver": "file",
357786
-          "filename": "$TEST_IMG"
357786
-      },
357786
-      "size": $size,
357786
-      "log-size": 1048576,
357786
-      "block-size": 8388608,
357786
-      "subformat": "dynamic",
357786
-      "block-state-zero": true
357786
-  }
357786
-}
357786
-{ "execute": "quit" }
357786
-EOF
357786
-
357786
-_img_info --format-specific | _filter_img_info --format-specific
357786
-
357786
-echo
357786
-echo "=== Successful image creation (with non-default options) ==="
357786
-echo
357786
-
357786
-# Choose a different size to show that we got a new image
357786
-size=$((32 * 1024 * 1024))
357786
-
357786
-run_qemu <
357786
-{ "execute": "qmp_capabilities" }
357786
-{ "execute": "x-blockdev-create",
357786
-  "arguments": {
357786
-      "driver": "file",
357786
-      "filename": "$TEST_IMG",
357786
-      "size": 0
357786
-  }
357786
-}
357786
-{ "execute": "x-blockdev-create",
357786
-  "arguments": {
357786
-      "driver": "$IMGFMT",
357786
-      "file": {
357786
-          "driver": "file",
357786
-          "filename": "$TEST_IMG"
357786
-      },
357786
-      "size": $size,
357786
-      "log-size": 8388608,
357786
-      "block-size": 268435456,
357786
-      "subformat": "fixed",
357786
-      "block-state-zero": false
357786
-  }
357786
-}
357786
-{ "execute": "quit" }
357786
-EOF
357786
-
357786
-_img_info --format-specific | _filter_img_info --format-specific
357786
-
357786
-echo
357786
-echo "=== Invalid BlockdevRef ==="
357786
-echo
357786
-
357786
-run_qemu <
357786
-{ "execute": "qmp_capabilities" }
357786
-{ "execute": "x-blockdev-create",
357786
-  "arguments": {
357786
-      "driver": "$IMGFMT",
357786
-      "file": "this doesn't exist",
357786
-      "size": $size
357786
-  }
357786
-}
357786
-{ "execute": "quit" }
357786
-EOF
357786
-
357786
-echo
357786
-echo "=== Zero size ==="
357786
-echo
357786
-
357786
-run_qemu -blockdev driver=file,filename="$TEST_IMG",node-name=node0 <
357786
-{ "execute": "qmp_capabilities" }
357786
-{ "execute": "x-blockdev-create",
357786
-  "arguments": {
357786
-      "driver": "$IMGFMT",
357786
-      "file": "node0",
357786
-      "size": 0
357786
-  }
357786
-}
357786
-{ "execute": "quit" }
357786
-EOF
357786
-
357786
-_img_info | _filter_img_info
357786
-
357786
-echo
357786
-echo "=== Maximum size ==="
357786
-echo
357786
-
357786
-run_qemu -blockdev driver=file,filename="$TEST_IMG",node-name=node0 <
357786
-{ "execute": "qmp_capabilities" }
357786
-{ "execute": "x-blockdev-create",
357786
-  "arguments": {
357786
-      "driver": "$IMGFMT",
357786
-      "file": "node0",
357786
-      "size": 70368744177664
357786
-  }
357786
-}
357786
-{ "execute": "quit" }
357786
-EOF
357786
-
357786
-_img_info | _filter_img_info
357786
-
357786
-echo
357786
-echo "=== Invalid sizes ==="
357786
-echo
357786
-
357786
-# TODO Negative image sizes aren't handled correctly, but this is a problem
357786
-# with QAPI's implementation of the 'size' type and affects other commands as
357786
-# well. Once this is fixed, we may want to add a test case here.
357786
-
357786
-# 1. 2^64 - 512
357786
-# 2. 2^63 = 8 EB (qemu-img enforces image sizes less than this)
357786
-# 3. 2^63 - 512 (generally valid, but with the image header the file will
357786
-#                exceed 63 bits)
357786
-# 4. 2^46 + 1 (one byte more than maximum image size)
357786
-
357786
-run_qemu -blockdev driver=file,filename="$TEST_IMG",node-name=node0 <
357786
-{ "execute": "qmp_capabilities" }
357786
-{ "execute": "x-blockdev-create",
357786
-  "arguments": {
357786
-      "driver": "$IMGFMT",
357786
-      "file": "node0",
357786
-      "size": 18446744073709551104
357786
-  }
357786
-}
357786
-{ "execute": "x-blockdev-create",
357786
-  "arguments": {
357786
-      "driver": "$IMGFMT",
357786
-      "file": "node0",
357786
-      "size": 9223372036854775808
357786
-  }
357786
-}
357786
-{ "execute": "x-blockdev-create",
357786
-  "arguments": {
357786
-      "driver": "$IMGFMT",
357786
-      "file": "node0",
357786
-      "size": 9223372036854775296
357786
-  }
357786
-}
357786
-{ "execute": "x-blockdev-create",
357786
-  "arguments": {
357786
-      "driver": "$IMGFMT",
357786
-      "file": "node0",
357786
-      "size": 70368744177665
357786
-  }
357786
-}
357786
-{ "execute": "quit" }
357786
-EOF
357786
-
357786
-echo
357786
-echo "=== Invalid block size ==="
357786
-echo
357786
-
357786
-run_qemu -blockdev driver=file,filename="$TEST_IMG",node-name=node0 <
357786
-{ "execute": "qmp_capabilities" }
357786
-{ "execute": "x-blockdev-create",
357786
-  "arguments": {
357786
-      "driver": "$IMGFMT",
357786
-      "file": "node0",
357786
-      "size": 67108864,
357786
-      "block-size": 1234567
357786
-  }
357786
-}
357786
-{ "execute": "x-blockdev-create",
357786
-  "arguments": {
357786
-      "driver": "$IMGFMT",
357786
-      "file": "node0",
357786
-      "size": 67108864,
357786
-      "block-size": 128
357786
-  }
357786
-}
357786
-{ "execute": "x-blockdev-create",
357786
-  "arguments": {
357786
-      "driver": "$IMGFMT",
357786
-      "file": "node0",
357786
-      "size": 67108864,
357786
-      "block-size": 3145728
357786
-  }
357786
-}
357786
-{ "execute": "x-blockdev-create",
357786
-  "arguments": {
357786
-      "driver": "$IMGFMT",
357786
-      "file": "node0",
357786
-      "size": 67108864,
357786
-      "block-size": 536870912
357786
-  }
357786
-}
357786
-{ "execute": "x-blockdev-create",
357786
-  "arguments": {
357786
-      "driver": "$IMGFMT",
357786
-      "file": "node0",
357786
-      "size": 67108864,
357786
-      "block-size": 0
357786
-  }
357786
-}
357786
-{ "execute": "quit" }
357786
-EOF
357786
-
357786
-echo
357786
-echo "=== Invalid log size ==="
357786
-echo
357786
-
357786
-run_qemu -blockdev driver=file,filename="$TEST_IMG",node-name=node0 <
357786
-{ "execute": "qmp_capabilities" }
357786
-{ "execute": "x-blockdev-create",
357786
-  "arguments": {
357786
-      "driver": "$IMGFMT",
357786
-      "file": "node0",
357786
-      "size": 67108864,
357786
-      "log-size": 1234567
357786
-  }
357786
-}
357786
-{ "execute": "x-blockdev-create",
357786
-  "arguments": {
357786
-      "driver": "$IMGFMT",
357786
-      "file": "node0",
357786
-      "size": 67108864,
357786
-      "log-size": 128
357786
-  }
357786
-}
357786
-{ "execute": "x-blockdev-create",
357786
-  "arguments": {
357786
-      "driver": "$IMGFMT",
357786
-      "file": "node0",
357786
-      "size": 67108864,
357786
-      "log-size": 4294967296
357786
-  }
357786
-}
357786
-{ "execute": "x-blockdev-create",
357786
-  "arguments": {
357786
-      "driver": "$IMGFMT",
357786
-      "file": "node0",
357786
-      "size": 67108864,
357786
-      "log-size": 0
357786
-  }
357786
-}
357786
-{ "execute": "quit" }
357786
-EOF
357786
-
357786
-
357786
-# success, all done
357786
-echo "*** done"
357786
-rm -f $seq.full
357786
-status=0
357786
+import iotests
357786
+from iotests import imgfmt
357786
+
357786
+iotests.verify_image_format(supported_fmts=['vhdx'])
357786
+iotests.verify_protocol(supported=['file'])
357786
+
357786
+def blockdev_create(vm, options):
357786
+    result = vm.qmp_log('x-blockdev-create', job_id='job0', options=options)
357786
+
357786
+    if 'return' in result:
357786
+        assert result['return'] == {}
357786
+        vm.run_job('job0')
357786
+    iotests.log("")
357786
+
357786
+with iotests.FilePath('t.vhdx') as disk_path, \
357786
+     iotests.VM() as vm:
357786
+
357786
+    #
357786
+    # Successful image creation (defaults)
357786
+    #
357786
+    iotests.log("=== Successful image creation (defaults) ===")
357786
+    iotests.log("")
357786
+
357786
+    size = 128 * 1024 * 1024
357786
+
357786
+    vm.launch()
357786
+    blockdev_create(vm, { 'driver': 'file',
357786
+                          'filename': disk_path,
357786
+                          'size': 0 })
357786
+
357786
+    vm.qmp_log('blockdev-add', driver='file', filename=disk_path,
357786
+               node_name='imgfile')
357786
+
357786
+    blockdev_create(vm, { 'driver': imgfmt,
357786
+                          'file': 'imgfile',
357786
+                          'size': size })
357786
+    vm.shutdown()
357786
+
357786
+    iotests.img_info_log(disk_path)
357786
+
357786
+    #
357786
+    # Successful image creation (explicit defaults)
357786
+    #
357786
+    iotests.log("=== Successful image creation (explicit defaults) ===")
357786
+    iotests.log("")
357786
+
357786
+    # Choose a different size to show that we got a new image
357786
+    size = 64 * 1024 * 1024
357786
+
357786
+    vm.launch()
357786
+    blockdev_create(vm, { 'driver': 'file',
357786
+                          'filename': disk_path,
357786
+                          'size': 0 })
357786
+    blockdev_create(vm, { 'driver': imgfmt,
357786
+                          'file': {
357786
+                              'driver': 'file',
357786
+                              'filename': disk_path,
357786
+                          },
357786
+                          'size': size,
357786
+                          'log-size': 1048576,
357786
+                          'block-size': 8388608,
357786
+                          'subformat': 'dynamic',
357786
+                          'block-state-zero': True })
357786
+    vm.shutdown()
357786
+
357786
+    iotests.img_info_log(disk_path)
357786
+
357786
+    #
357786
+    # Successful image creation (with non-default options)
357786
+    #
357786
+    iotests.log("=== Successful image creation (with non-default options) ===")
357786
+    iotests.log("")
357786
+
357786
+    # Choose a different size to show that we got a new image
357786
+    size = 32 * 1024 * 1024
357786
+
357786
+    vm.launch()
357786
+    blockdev_create(vm, { 'driver': 'file',
357786
+                          'filename': disk_path,
357786
+                          'size': 0 })
357786
+    blockdev_create(vm, { 'driver': imgfmt,
357786
+                          'file': {
357786
+                              'driver': 'file',
357786
+                              'filename': disk_path,
357786
+                          },
357786
+                          'size': size,
357786
+                          'log-size': 8388608,
357786
+                          'block-size': 268435456,
357786
+                          'subformat': 'fixed',
357786
+                          'block-state-zero': False })
357786
+    vm.shutdown()
357786
+
357786
+    iotests.img_info_log(disk_path)
357786
+
357786
+    #
357786
+    # Invalid BlockdevRef
357786
+    #
357786
+    iotests.log("=== Invalid BlockdevRef ===")
357786
+    iotests.log("")
357786
+
357786
+    vm.launch()
357786
+    blockdev_create(vm, { 'driver': imgfmt,
357786
+                          'file': "this doesn't exist",
357786
+                          'size': size })
357786
+    vm.shutdown()
357786
+
357786
+    #
357786
+    # Zero size
357786
+    #
357786
+    iotests.log("=== Zero size ===")
357786
+    iotests.log("")
357786
+
357786
+    vm.add_blockdev('driver=file,filename=%s,node-name=node0' % (disk_path))
357786
+    vm.launch()
357786
+    blockdev_create(vm, { 'driver': imgfmt,
357786
+                          'file': 'node0',
357786
+                          'size': 0 })
357786
+    vm.shutdown()
357786
+
357786
+    iotests.img_info_log(disk_path)
357786
+
357786
+    #
357786
+    # Maximum size
357786
+    #
357786
+    iotests.log("=== Maximum size ===")
357786
+    iotests.log("")
357786
+
357786
+    vm.launch()
357786
+    blockdev_create(vm, { 'driver': imgfmt,
357786
+                          'file': 'node0',
357786
+                          'size': 70368744177664 })
357786
+    vm.shutdown()
357786
+
357786
+    iotests.img_info_log(disk_path)
357786
+
357786
+    #
357786
+    # Invalid sizes
357786
+    #
357786
+
357786
+    # TODO Negative image sizes aren't handled correctly, but this is a problem
357786
+    # with QAPI's implementation of the 'size' type and affects other commands
357786
+    # as well. Once this is fixed, we may want to add a test case here.
357786
+
357786
+    # 1. 2^64 - 512
357786
+    # 2. 2^63 = 8 EB (qemu-img enforces image sizes less than this)
357786
+    # 3. 2^63 - 512 (generally valid, but with the image header the file will
357786
+    #                exceed 63 bits)
357786
+    # 4. 2^46 + 1 (one byte more than maximum image size)
357786
+
357786
+    iotests.log("=== Invalid sizes ===")
357786
+    iotests.log("")
357786
+
357786
+    vm.launch()
357786
+    for size in [ 18446744073709551104, 9223372036854775808,
357786
+                  9223372036854775296, 70368744177665 ]:
357786
+        blockdev_create(vm, { 'driver': imgfmt,
357786
+                              'file': 'node0',
357786
+                              'size': size })
357786
+    vm.shutdown()
357786
+
357786
+    #
357786
+    # Invalid block size
357786
+    #
357786
+    iotests.log("=== Invalid block size ===")
357786
+    iotests.log("")
357786
+
357786
+    vm.launch()
357786
+    for bsize in [ 1234567, 128, 3145728, 536870912, 0 ]:
357786
+        blockdev_create(vm, { 'driver': imgfmt,
357786
+                              'file': 'node0',
357786
+                              'size': 67108864,
357786
+                              'block-size': bsize })
357786
+    vm.shutdown()
357786
+
357786
+    #
357786
+    # Invalid log size
357786
+    #
357786
+    iotests.log("=== Invalid log size ===")
357786
+    iotests.log("")
357786
+
357786
+    vm.launch()
357786
+    for lsize in [ 1234567, 128, 4294967296, 0 ]:
357786
+        blockdev_create(vm, { 'driver': imgfmt,
357786
+                              'file': 'node0',
357786
+                              'size': 67108864,
357786
+                              'log-size': lsize })
357786
+    vm.shutdown()
357786
diff --git a/tests/qemu-iotests/213.out b/tests/qemu-iotests/213.out
357786
index 8e8fc29..f18a39a 100644
357786
--- a/tests/qemu-iotests/213.out
357786
+++ b/tests/qemu-iotests/213.out
357786
@@ -1,121 +1,169 @@
357786
-QA output created by 213
357786
-
357786
 === Successful image creation (defaults) ===
357786
 
357786
-Testing:
357786
-QMP_VERSION
357786
-{"return": {}}
357786
-{"return": {}}
357786
-{"return": {}}
357786
-{"return": {}}
357786
-{"return": {}}
357786
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false}}
357786
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'size': 0, 'driver': 'file', 'filename': 'TEST_DIR/PID-t.vhdx'}}}
357786
+{u'return': {}}
357786
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
357786
+{u'return': {}}
357786
+
357786
+{'execute': 'blockdev-add', 'arguments': {'node_name': 'imgfile', 'driver': 'file', 'filename': 'TEST_DIR/PID-t.vhdx'}}
357786
+{u'return': {}}
357786
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'vhdx', 'file': 'imgfile', 'size': 134217728}}}
357786
+{u'return': {}}
357786
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
357786
+{u'return': {}}
357786
 
357786
-image: TEST_DIR/t.IMGFMT
357786
+image: TEST_IMG
357786
 file format: IMGFMT
357786
 virtual size: 128M (134217728 bytes)
357786
+cluster_size: 8388608
357786
 
357786
 === Successful image creation (explicit defaults) ===
357786
 
357786
-Testing:
357786
-QMP_VERSION
357786
-{"return": {}}
357786
-{"return": {}}
357786
-{"return": {}}
357786
-{"return": {}}
357786
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false}}
357786
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'size': 0, 'driver': 'file', 'filename': 'TEST_DIR/PID-t.vhdx'}}}
357786
+{u'return': {}}
357786
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
357786
+{u'return': {}}
357786
 
357786
-image: TEST_DIR/t.IMGFMT
357786
+{'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}}}
357786
+{u'return': {}}
357786
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
357786
+{u'return': {}}
357786
+
357786
+image: TEST_IMG
357786
 file format: IMGFMT
357786
 virtual size: 64M (67108864 bytes)
357786
+cluster_size: 8388608
357786
 
357786
 === Successful image creation (with non-default options) ===
357786
 
357786
-Testing:
357786
-QMP_VERSION
357786
-{"return": {}}
357786
-{"return": {}}
357786
-{"return": {}}
357786
-{"return": {}}
357786
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false}}
357786
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'size': 0, 'driver': 'file', 'filename': 'TEST_DIR/PID-t.vhdx'}}}
357786
+{u'return': {}}
357786
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
357786
+{u'return': {}}
357786
+
357786
+{'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}}}
357786
+{u'return': {}}
357786
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
357786
+{u'return': {}}
357786
 
357786
-image: TEST_DIR/t.IMGFMT
357786
+image: TEST_IMG
357786
 file format: IMGFMT
357786
 virtual size: 32M (33554432 bytes)
357786
+cluster_size: 268435456
357786
 
357786
 === Invalid BlockdevRef ===
357786
 
357786
-Testing:
357786
-QMP_VERSION
357786
-{"return": {}}
357786
-{"error": {"class": "GenericError", "desc": "Cannot find device=this doesn't exist nor node_name=this doesn't exist"}}
357786
-{"return": {}}
357786
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false}}
357786
-
357786
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'vhdx', 'file': "this doesn't exist", 'size': 33554432}}}
357786
+{u'return': {}}
357786
+Job failed: Cannot find device=this doesn't exist nor node_name=this doesn't exist
357786
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
357786
+{u'return': {}}
357786
 
357786
 === Zero size ===
357786
 
357786
-Testing: -blockdev driver=file,filename=TEST_DIR/t.IMGFMT,node-name=node0
357786
-QMP_VERSION
357786
-{"return": {}}
357786
-{"return": {}}
357786
-{"return": {}}
357786
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false}}
357786
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'vhdx', 'file': 'node0', 'size': 0}}}
357786
+{u'return': {}}
357786
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
357786
+{u'return': {}}
357786
 
357786
-image: TEST_DIR/t.IMGFMT
357786
+image: TEST_IMG
357786
 file format: IMGFMT
357786
 virtual size: 0 (0 bytes)
357786
+cluster_size: 8388608
357786
 
357786
 === Maximum size ===
357786
 
357786
-Testing: -blockdev driver=file,filename=TEST_DIR/t.IMGFMT,node-name=node0
357786
-QMP_VERSION
357786
-{"return": {}}
357786
-{"return": {}}
357786
-{"return": {}}
357786
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false}}
357786
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'vhdx', 'file': 'node0', 'size': 70368744177664}}}
357786
+{u'return': {}}
357786
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
357786
+{u'return': {}}
357786
 
357786
-image: TEST_DIR/t.IMGFMT
357786
+image: TEST_IMG
357786
 file format: IMGFMT
357786
 virtual size: 64T (70368744177664 bytes)
357786
+cluster_size: 67108864
357786
 
357786
 === Invalid sizes ===
357786
 
357786
-Testing: -blockdev driver=file,filename=TEST_DIR/t.IMGFMT,node-name=node0
357786
-QMP_VERSION
357786
-{"return": {}}
357786
-{"error": {"class": "GenericError", "desc": "Image size too large; max of 64TB"}}
357786
-{"error": {"class": "GenericError", "desc": "Image size too large; max of 64TB"}}
357786
-{"error": {"class": "GenericError", "desc": "Image size too large; max of 64TB"}}
357786
-{"error": {"class": "GenericError", "desc": "Image size too large; max of 64TB"}}
357786
-{"return": {}}
357786
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false}}
357786
-
357786
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'vhdx', 'file': 'node0', 'size': 18446744073709551104L}}}
357786
+{u'return': {}}
357786
+Job failed: Image size too large; max of 64TB
357786
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
357786
+{u'return': {}}
357786
+
357786
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'vhdx', 'file': 'node0', 'size': 9223372036854775808L}}}
357786
+{u'return': {}}
357786
+Job failed: Image size too large; max of 64TB
357786
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
357786
+{u'return': {}}
357786
+
357786
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'vhdx', 'file': 'node0', 'size': 9223372036854775296}}}
357786
+{u'return': {}}
357786
+Job failed: Image size too large; max of 64TB
357786
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
357786
+{u'return': {}}
357786
+
357786
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'vhdx', 'file': 'node0', 'size': 70368744177665}}}
357786
+{u'return': {}}
357786
+Job failed: Image size too large; max of 64TB
357786
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
357786
+{u'return': {}}
357786
 
357786
 === Invalid block size ===
357786
 
357786
-Testing: -blockdev driver=file,filename=TEST_DIR/t.IMGFMT,node-name=node0
357786
-QMP_VERSION
357786
-{"return": {}}
357786
-{"error": {"class": "GenericError", "desc": "Block size must be a multiple of 1 MB"}}
357786
-{"error": {"class": "GenericError", "desc": "Block size must be a multiple of 1 MB"}}
357786
-{"error": {"class": "GenericError", "desc": "Block size must be a power of two"}}
357786
-{"error": {"class": "GenericError", "desc": "Block size must not exceed 268435456"}}
357786
-{"error": {"class": "GenericError", "desc": "Block size must be a multiple of 1 MB"}}
357786
-{"return": {}}
357786
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false}}
357786
-
357786
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'vhdx', 'block-size': 1234567, 'file': 'node0', 'size': 67108864}}}
357786
+{u'return': {}}
357786
+Job failed: Block size must be a multiple of 1 MB
357786
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
357786
+{u'return': {}}
357786
+
357786
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'vhdx', 'block-size': 128, 'file': 'node0', 'size': 67108864}}}
357786
+{u'return': {}}
357786
+Job failed: Block size must be a multiple of 1 MB
357786
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
357786
+{u'return': {}}
357786
+
357786
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'vhdx', 'block-size': 3145728, 'file': 'node0', 'size': 67108864}}}
357786
+{u'return': {}}
357786
+Job failed: Block size must be a power of two
357786
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
357786
+{u'return': {}}
357786
+
357786
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'vhdx', 'block-size': 536870912, 'file': 'node0', 'size': 67108864}}}
357786
+{u'return': {}}
357786
+Job failed: Block size must not exceed 268435456
357786
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
357786
+{u'return': {}}
357786
+
357786
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'vhdx', 'block-size': 0, 'file': 'node0', 'size': 67108864}}}
357786
+{u'return': {}}
357786
+Job failed: Block size must be a multiple of 1 MB
357786
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
357786
+{u'return': {}}
357786
 
357786
 === Invalid log size ===
357786
 
357786
-Testing: -blockdev driver=file,filename=TEST_DIR/t.IMGFMT,node-name=node0
357786
-QMP_VERSION
357786
-{"return": {}}
357786
-{"error": {"class": "GenericError", "desc": "Log size must be a multiple of 1 MB"}}
357786
-{"error": {"class": "GenericError", "desc": "Log size must be a multiple of 1 MB"}}
357786
-{"error": {"class": "GenericError", "desc": "Log size must be smaller than 4 GB"}}
357786
-{"error": {"class": "GenericError", "desc": "Log size must be a multiple of 1 MB"}}
357786
-{"return": {}}
357786
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false}}
357786
-
357786
-*** done
357786
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'log-size': 1234567, 'driver': 'vhdx', 'file': 'node0', 'size': 67108864}}}
357786
+{u'return': {}}
357786
+Job failed: Log size must be a multiple of 1 MB
357786
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
357786
+{u'return': {}}
357786
+
357786
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'log-size': 128, 'driver': 'vhdx', 'file': 'node0', 'size': 67108864}}}
357786
+{u'return': {}}
357786
+Job failed: Log size must be a multiple of 1 MB
357786
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
357786
+{u'return': {}}
357786
+
357786
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'log-size': 4294967296, 'driver': 'vhdx', 'file': 'node0', 'size': 67108864}}}
357786
+{u'return': {}}
357786
+Job failed: Log size must be smaller than 4 GB
357786
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
357786
+{u'return': {}}
357786
+
357786
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'log-size': 0, 'driver': 'vhdx', 'file': 'node0', 'size': 67108864}}}
357786
+{u'return': {}}
357786
+Job failed: Log size must be a multiple of 1 MB
357786
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
357786
+{u'return': {}}
357786
+
357786
diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group
357786
index 3753b13..5c55adc 100644
357786
--- a/tests/qemu-iotests/group
357786
+++ b/tests/qemu-iotests/group
357786
@@ -211,9 +211,7 @@
357786
 210 rw auto
357786
 211 rw auto quick
357786
 212 rw auto quick
357786
-# TODO The following commented out tests need to be reworked to work
357786
-# with the x-blockdev-create job
357786
-#213 rw auto quick
357786
+213 rw auto quick
357786
 214 rw auto
357786
 215 rw auto quick
357786
 216 rw auto quick
357786
-- 
357786
1.8.3.1
357786