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

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