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

357786
From 609b0ba5919f07e407127911ae6f3b15cc15e324 Mon Sep 17 00:00:00 2001
357786
From: Kevin Wolf <kwolf@redhat.com>
357786
Date: Tue, 26 Jun 2018 09:48:48 +0200
357786
Subject: [PATCH 79/89] qemu-iotests: Rewrite 210 for blockdev-create job
357786
357786
RH-Author: Kevin Wolf <kwolf@redhat.com>
357786
Message-id: <20180626094856.6924-66-kwolf@redhat.com>
357786
Patchwork-id: 81090
357786
O-Subject: [RHV-7.6 qemu-kvm-rhev PATCH v2 65/73] qemu-iotests: Rewrite 210 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 210 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
Reviewed-by: Jeff Cody <jcody@redhat.com>
357786
(cherry picked from commit 5ba141dc6f17ca0f250f107aace2df19558c8bc4)
357786
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
357786
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
357786
---
357786
 tests/qemu-iotests/210        | 393 ++++++++++++++++++------------------------
357786
 tests/qemu-iotests/210.out    | 197 ++++++++++++++-------
357786
 tests/qemu-iotests/group      |   2 +-
357786
 tests/qemu-iotests/iotests.py |  12 +-
357786
 4 files changed, 314 insertions(+), 290 deletions(-)
357786
357786
diff --git a/tests/qemu-iotests/210 b/tests/qemu-iotests/210
357786
index e607c0d..ff4fdde 100755
357786
--- a/tests/qemu-iotests/210
357786
+++ b/tests/qemu-iotests/210
357786
@@ -1,9 +1,11 @@
357786
-#!/bin/bash
357786
+#!/usr/bin/env python
357786
 #
357786
 # Test luks 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,230 +20,165 @@
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 luks
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 -object secret,id=keysec0,data="foo" <
357786
-{ "execute": "qmp_capabilities" }
357786
-{ "execute": "x-blockdev-create",
357786
-  "arguments": {
357786
-      "driver": "file",
357786
-      "filename": "$TEST_IMG_FILE",
357786
-      "size": 0
357786
-  }
357786
-}
357786
-{ "execute": "blockdev-add",
357786
-  "arguments": {
357786
-      "driver": "file",
357786
-      "node-name": "imgfile",
357786
-      "filename": "$TEST_IMG_FILE"
357786
-  }
357786
-}
357786
-{ "execute": "x-blockdev-create",
357786
-  "arguments": {
357786
-      "driver": "$IMGFMT",
357786
-      "file": "imgfile",
357786
-      "key-secret": "keysec0",
357786
-      "size": $size,
357786
-      "iter-time": 10
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=$((64 * 1024 * 1024))
357786
-
357786
-run_qemu -object secret,id=keysec0,data="foo" <
357786
-{ "execute": "qmp_capabilities" }
357786
-{ "execute": "x-blockdev-create",
357786
-  "arguments": {
357786
-      "driver": "file",
357786
-      "filename": "$TEST_IMG_FILE",
357786
-      "size": 0
357786
-  }
357786
-}
357786
-{ "execute": "x-blockdev-create",
357786
-  "arguments": {
357786
-      "driver": "$IMGFMT",
357786
-      "file": {
357786
-          "driver": "file",
357786
-          "filename": "$TEST_IMG_FILE"
357786
-      },
357786
-      "size": $size,
357786
-      "key-secret": "keysec0",
357786
-      "cipher-alg": "twofish-128",
357786
-      "cipher-mode": "ctr",
357786
-      "ivgen-alg": "plain64",
357786
-      "ivgen-hash-alg": "md5",
357786
-      "hash-alg": "sha1",
357786
-      "iter-time": 10
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_FILE",node-name=node0 \
357786
-         -object secret,id=keysec0,data="foo" <
357786
-{ "execute": "qmp_capabilities" }
357786
-{ "execute": "x-blockdev-create",
357786
-  "arguments": {
357786
-      "driver": "$IMGFMT",
357786
-      "file": "node0",
357786
-      "key-secret": "keysec0",
357786
-      "size": 0,
357786
-      "iter-time": 10
357786
-  }
357786
-}
357786
-{ "execute": "quit" }
357786
-EOF
357786
-
357786
-_img_info | _filter_img_info
357786
-
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 crypto header the file will
357786
-#                exceed 63 bits)
357786
-
357786
-run_qemu -blockdev driver=file,filename="$TEST_IMG_FILE",node-name=node0 \
357786
-         -object secret,id=keysec0,data="foo" <
357786
-{ "execute": "qmp_capabilities" }
357786
-{ "execute": "x-blockdev-create",
357786
-  "arguments": {
357786
-      "driver": "$IMGFMT",
357786
-      "file": "node0",
357786
-      "key-secret": "keysec0",
357786
-      "size": 18446744073709551104
357786
-  }
357786
-}
357786
-{ "execute": "x-blockdev-create",
357786
-  "arguments": {
357786
-      "driver": "$IMGFMT",
357786
-      "file": "node0",
357786
-      "key-secret": "keysec0",
357786
-      "size": 9223372036854775808
357786
-  }
357786
-}
357786
-{ "execute": "x-blockdev-create",
357786
-  "arguments": {
357786
-      "driver": "$IMGFMT",
357786
-      "file": "node0",
357786
-      "key-secret": "keysec0",
357786
-      "size": 9223372036854775296
357786
-  }
357786
-}
357786
-{ "execute": "quit" }
357786
-EOF
357786
-
357786
-echo
357786
-echo "=== Resize image with invalid sizes ==="
357786
-echo
357786
-
357786
-run_qemu -blockdev driver=file,filename="$TEST_IMG_FILE",node-name=node0 \
357786
-         -blockdev driver=luks,file=node0,key-secret=keysec0,node-name=node1 \
357786
-         -object secret,id=keysec0,data="foo" <
357786
-{ "execute": "qmp_capabilities" }
357786
-{ "execute": "block_resize",
357786
-  "arguments": {
357786
-      "node-name": "node1",
357786
-      "size": 9223372036854775296
357786
-  }
357786
-}
357786
-{ "execute": "block_resize",
357786
-  "arguments": {
357786
-      "node-name": "node1",
357786
-      "size": 9223372036854775808
357786
-  }
357786
-}
357786
-{ "execute": "block_resize",
357786
-  "arguments": {
357786
-      "node-name": "node1",
357786
-      "size": 18446744073709551104
357786
-  }
357786
-}
357786
-{ "execute": "block_resize",
357786
-  "arguments": {
357786
-      "node-name": "node1",
357786
-      "size": -9223372036854775808
357786
-  }
357786
-}
357786
-{ "execute": "quit" }
357786
-EOF
357786
-
357786
-_img_info | _filter_img_info
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=['luks'])
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.luks') as disk_path, \
357786
+     iotests.VM() as vm:
357786
+
357786
+    vm.add_object('secret,id=keysec0,data=foo')
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
+                          'key-secret': 'keysec0',
357786
+                          'size': size,
357786
+                          'iter-time': 10 })
357786
+    vm.shutdown()
357786
+
357786
+    # TODO Proper support for images to be used with imgopts and/or protocols
357786
+    iotests.img_info_log(
357786
+        'driver=luks,file.driver=file,file.filename=%s,key-secret=keysec0' % (disk_path),
357786
+        filter_path=disk_path,
357786
+        extra_args=['--object', 'secret,id=keysec0,data=foo'],
357786
+        imgopts=True)
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
+    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
+                          'key-secret': 'keysec0',
357786
+                          'cipher-alg': 'twofish-128',
357786
+                          'cipher-mode': 'ctr',
357786
+                          'ivgen-alg': 'plain64',
357786
+                          'ivgen-hash-alg': 'md5',
357786
+                          'hash-alg': 'sha1',
357786
+                          'iter-time': 10 })
357786
+    vm.shutdown()
357786
+
357786
+    # TODO Proper support for images to be used with imgopts and/or protocols
357786
+    iotests.img_info_log(
357786
+        'driver=luks,file.driver=file,file.filename=%s,key-secret=keysec0' % (disk_path),
357786
+        filter_path=disk_path,
357786
+        extra_args=['--object', 'secret,id=keysec0,data=foo'],
357786
+        imgopts=True)
357786
+
357786
+    #
357786
+    # Invalid BlockdevRef
357786
+    #
357786
+    iotests.log("=== Invalid BlockdevRef ===")
357786
+    iotests.log("")
357786
+
357786
+    size = 64 * 1024 * 1024
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
+                          'key-secret': 'keysec0',
357786
+                          'size': 0,
357786
+                          'iter-time': 10 })
357786
+    vm.shutdown()
357786
+
357786
+    # TODO Proper support for images to be used with imgopts and/or protocols
357786
+    iotests.img_info_log(
357786
+        'driver=luks,file.driver=file,file.filename=%s,key-secret=keysec0' % (disk_path),
357786
+        filter_path=disk_path,
357786
+        extra_args=['--object', 'secret,id=keysec0,data=foo'],
357786
+        imgopts=True)
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 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 crypto header the file will
357786
+    #                exceed 63 bits)
357786
+    iotests.log("=== Invalid sizes ===")
357786
+    iotests.log("")
357786
+
357786
+    vm.launch()
357786
+    for size in [ 18446744073709551104, 9223372036854775808, 9223372036854775296 ]:
357786
+        blockdev_create(vm, { 'driver': imgfmt,
357786
+                              'file': 'node0',
357786
+                              'key-secret': 'keysec0',
357786
+                              'size': size })
357786
+    vm.shutdown()
357786
+
357786
+    #
357786
+    # Resize image with invalid sizes
357786
+    #
357786
+    iotests.log("=== Resize image with invalid sizes ===")
357786
+    iotests.log("")
357786
+
357786
+    vm.add_blockdev('driver=luks,file=node0,key-secret=keysec0,node-name=node1')
357786
+    vm.launch()
357786
+    vm.qmp_log('block_resize', node_name='node1', size=9223372036854775296)
357786
+    vm.qmp_log('block_resize', node_name='node1', size=9223372036854775808)
357786
+    vm.qmp_log('block_resize', node_name='node1', size=18446744073709551104)
357786
+    vm.qmp_log('block_resize', node_name='node1', size=-9223372036854775808)
357786
+    vm.shutdown()
357786
+
357786
+    # TODO Proper support for images to be used with imgopts and/or protocols
357786
+    iotests.img_info_log(
357786
+        'driver=luks,file.driver=file,file.filename=%s,key-secret=keysec0' % (disk_path),
357786
+        filter_path=disk_path,
357786
+        extra_args=['--object', 'secret,id=keysec0,data=foo'],
357786
+        imgopts=True)
357786
diff --git a/tests/qemu-iotests/210.out b/tests/qemu-iotests/210.out
357786
index 8198f8c..0e6e5c0 100644
357786
--- a/tests/qemu-iotests/210.out
357786
+++ b/tests/qemu-iotests/210.out
357786
@@ -1,29 +1,31 @@
357786
-QA output created by 210
357786
-
357786
 === Successful image creation (defaults) ===
357786
 
357786
-Testing: -object secret,id=keysec0,data=foo
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.luks'}}}
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.luks'}}
357786
+{u'return': {}}
357786
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'key-secret': 'keysec0', 'iter-time': 10, 'driver': 'luks', 'file': 'imgfile', 'size': 134217728}}}
357786
+{u'return': {}}
357786
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
357786
+{u'return': {}}
357786
 
357786
-image: json:{"driver": "IMGFMT", "file": {"driver": "file", "filename": "TEST_DIR/t.IMGFMT"}, "key-secret": "keysec0"}
357786
+image: json:{"driver": "IMGFMT", "file": {"driver": "file", "filename": "TEST_IMG"}, "key-secret": "keysec0"}
357786
 file format: IMGFMT
357786
 virtual size: 128M (134217728 bytes)
357786
+encrypted: yes
357786
 Format specific information:
357786
     ivgen alg: plain64
357786
     hash alg: sha256
357786
     cipher alg: aes-256
357786
-    uuid: 00000000-0000-0000-0000-000000000000
357786
+    uuid: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
357786
     cipher mode: xts
357786
     slots:
357786
         [0]:
357786
             active: true
357786
-            iters: 1024
357786
+            iters: XXX
357786
             key offset: 4096
357786
             stripes: 4000
357786
         [1]:
357786
@@ -48,31 +50,34 @@ Format specific information:
357786
             active: false
357786
             key offset: 1810432
357786
     payload offset: 2068480
357786
-    master key iters: 1024
357786
+    master key iters: XXX
357786
 
357786
 === Successful image creation (with non-default options) ===
357786
 
357786
-Testing: -object secret,id=keysec0,data=foo
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.luks'}}}
357786
+{u'return': {}}
357786
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
357786
+{u'return': {}}
357786
+
357786
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'key-secret': 'keysec0', 'hash-alg': 'sha1', 'cipher-mode': 'ctr', 'cipher-alg': 'twofish-128', 'file': {'driver': 'file', 'filename': 'TEST_DIR/PID-t.luks'}, 'iter-time': 10, 'ivgen-alg': 'plain64', 'ivgen-hash-alg': 'md5', 'driver': 'luks', 'size': 67108864}}}
357786
+{u'return': {}}
357786
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
357786
+{u'return': {}}
357786
 
357786
-image: json:{"driver": "IMGFMT", "file": {"driver": "file", "filename": "TEST_DIR/t.IMGFMT"}, "key-secret": "keysec0"}
357786
+image: json:{"driver": "IMGFMT", "file": {"driver": "file", "filename": "TEST_IMG"}, "key-secret": "keysec0"}
357786
 file format: IMGFMT
357786
 virtual size: 64M (67108864 bytes)
357786
+encrypted: yes
357786
 Format specific information:
357786
     ivgen alg: plain64
357786
     hash alg: sha1
357786
     cipher alg: twofish-128
357786
-    uuid: 00000000-0000-0000-0000-000000000000
357786
+    uuid: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
357786
     cipher mode: ctr
357786
     slots:
357786
         [0]:
357786
             active: true
357786
-            iters: 1024
357786
+            iters: XXX
357786
             key offset: 4096
357786
             stripes: 4000
357786
         [1]:
357786
@@ -97,56 +102,130 @@ Format specific information:
357786
             active: false
357786
             key offset: 462848
357786
     payload offset: 528384
357786
-    master key iters: 1024
357786
+    master key iters: XXX
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': 'luks', 'file': "this doesn't exist", 'size': 67108864}}}
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 -object secret,id=keysec0,data=foo
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': {'key-secret': 'keysec0', 'iter-time': 10, 'driver': 'luks', 'file': 'node0', 'size': 0}}}
357786
+{u'return': {}}
357786
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
357786
+{u'return': {}}
357786
 
357786
-image: json:{"driver": "IMGFMT", "file": {"driver": "file", "filename": "TEST_DIR/t.IMGFMT"}, "key-secret": "keysec0"}
357786
+image: json:{"driver": "IMGFMT", "file": {"driver": "file", "filename": "TEST_IMG"}, "key-secret": "keysec0"}
357786
 file format: IMGFMT
357786
 virtual size: 0 (0 bytes)
357786
+encrypted: yes
357786
+Format specific information:
357786
+    ivgen alg: plain64
357786
+    hash alg: sha256
357786
+    cipher alg: aes-256
357786
+    uuid: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
357786
+    cipher mode: xts
357786
+    slots:
357786
+        [0]:
357786
+            active: true
357786
+            iters: XXX
357786
+            key offset: 4096
357786
+            stripes: 4000
357786
+        [1]:
357786
+            active: false
357786
+            key offset: 262144
357786
+        [2]:
357786
+            active: false
357786
+            key offset: 520192
357786
+        [3]:
357786
+            active: false
357786
+            key offset: 778240
357786
+        [4]:
357786
+            active: false
357786
+            key offset: 1036288
357786
+        [5]:
357786
+            active: false
357786
+            key offset: 1294336
357786
+        [6]:
357786
+            active: false
357786
+            key offset: 1552384
357786
+        [7]:
357786
+            active: false
357786
+            key offset: 1810432
357786
+    payload offset: 2068480
357786
+    master key iters: XXX
357786
 
357786
 === Invalid sizes ===
357786
 
357786
-Testing: -blockdev driver=file,filename=TEST_DIR/t.IMGFMT,node-name=node0 -object secret,id=keysec0,data=foo
357786
-QMP_VERSION
357786
-{"return": {}}
357786
-{"error": {"class": "GenericError", "desc": "The requested file size is too large"}}
357786
-{"error": {"class": "GenericError", "desc": "The requested file size is too large"}}
357786
-{"error": {"class": "GenericError", "desc": "The requested file size is too large"}}
357786
-{"return": {}}
357786
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false}}
357786
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'key-secret': 'keysec0', 'driver': 'luks', 'file': 'node0', 'size': 18446744073709551104L}}}
357786
+{u'return': {}}
357786
+Job failed: The requested file size is too large
357786
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
357786
+{u'return': {}}
357786
+
357786
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'key-secret': 'keysec0', 'driver': 'luks', 'file': 'node0', 'size': 9223372036854775808L}}}
357786
+{u'return': {}}
357786
+Job failed: The requested file size is too large
357786
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
357786
+{u'return': {}}
357786
 
357786
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'key-secret': 'keysec0', 'driver': 'luks', 'file': 'node0', 'size': 9223372036854775296}}}
357786
+{u'return': {}}
357786
+Job failed: The requested file size is too large
357786
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
357786
+{u'return': {}}
357786
 
357786
 === Resize image with invalid sizes ===
357786
 
357786
-Testing: -blockdev driver=file,filename=TEST_DIR/t.IMGFMT,node-name=node0 -blockdev driver=IMGFMT,file=node0,key-secret=keysec0,node-name=node1 -object secret,id=keysec0,data=foo
357786
-QMP_VERSION
357786
-{"return": {}}
357786
-{"error": {"class": "GenericError", "desc": "The requested file size is too large"}}
357786
-{"error": {"class": "GenericError", "desc": "Invalid parameter type for 'size', expected: integer"}}
357786
-{"error": {"class": "GenericError", "desc": "Invalid parameter type for 'size', expected: integer"}}
357786
-{"error": {"class": "GenericError", "desc": "Parameter 'size' expects a >0 size"}}
357786
-{"return": {}}
357786
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false}}
357786
-
357786
-image: json:{"driver": "IMGFMT", "file": {"driver": "file", "filename": "TEST_DIR/t.IMGFMT"}, "key-secret": "keysec0"}
357786
+{'execute': 'block_resize', 'arguments': {'size': 9223372036854775296, 'node_name': 'node1'}}
357786
+{u'error': {u'class': u'GenericError', u'desc': u'The requested file size is too large'}}
357786
+{'execute': 'block_resize', 'arguments': {'size': 9223372036854775808L, 'node_name': 'node1'}}
357786
+{u'error': {u'class': u'GenericError', u'desc': u"Invalid parameter type for 'size', expected: integer"}}
357786
+{'execute': 'block_resize', 'arguments': {'size': 18446744073709551104L, 'node_name': 'node1'}}
357786
+{u'error': {u'class': u'GenericError', u'desc': u"Invalid parameter type for 'size', expected: integer"}}
357786
+{'execute': 'block_resize', 'arguments': {'size': -9223372036854775808, 'node_name': 'node1'}}
357786
+{u'error': {u'class': u'GenericError', u'desc': u"Parameter 'size' expects a >0 size"}}
357786
+image: json:{"driver": "IMGFMT", "file": {"driver": "file", "filename": "TEST_IMG"}, "key-secret": "keysec0"}
357786
 file format: IMGFMT
357786
 virtual size: 0 (0 bytes)
357786
-*** done
357786
+encrypted: yes
357786
+Format specific information:
357786
+    ivgen alg: plain64
357786
+    hash alg: sha256
357786
+    cipher alg: aes-256
357786
+    uuid: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
357786
+    cipher mode: xts
357786
+    slots:
357786
+        [0]:
357786
+            active: true
357786
+            iters: XXX
357786
+            key offset: 4096
357786
+            stripes: 4000
357786
+        [1]:
357786
+            active: false
357786
+            key offset: 262144
357786
+        [2]:
357786
+            active: false
357786
+            key offset: 520192
357786
+        [3]:
357786
+            active: false
357786
+            key offset: 778240
357786
+        [4]:
357786
+            active: false
357786
+            key offset: 1036288
357786
+        [5]:
357786
+            active: false
357786
+            key offset: 1294336
357786
+        [6]:
357786
+            active: false
357786
+            key offset: 1552384
357786
+        [7]:
357786
+            active: false
357786
+            key offset: 1810432
357786
+    payload offset: 2068480
357786
+    master key iters: XXX
357786
+
357786
diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group
357786
index 649291a..3ecdafa 100644
357786
--- a/tests/qemu-iotests/group
357786
+++ b/tests/qemu-iotests/group
357786
@@ -208,9 +208,9 @@
357786
 207 rw auto
357786
 208 rw auto quick
357786
 209 rw auto quick
357786
+210 rw auto
357786
 # TODO The following commented out tests need to be reworked to work
357786
 # with the x-blockdev-create job
357786
-#210 rw auto
357786
 #211 rw auto quick
357786
 #212 rw auto quick
357786
 #213 rw auto quick
357786
diff --git a/tests/qemu-iotests/iotests.py b/tests/qemu-iotests/iotests.py
357786
index 9f1759d..0b204dc 100644
357786
--- a/tests/qemu-iotests/iotests.py
357786
+++ b/tests/qemu-iotests/iotests.py
357786
@@ -109,8 +109,16 @@ def qemu_img_pipe(*args):
357786
         sys.stderr.write('qemu-img received signal %i: %s\n' % (-exitcode, ' '.join(qemu_img_args + list(args))))
357786
     return subp.communicate()[0]
357786
 
357786
-def img_info_log(filename, filter_path=None):
357786
-    output = qemu_img_pipe('info', '-f', imgfmt, filename)
357786
+def img_info_log(filename, filter_path=None, imgopts=False, extra_args=[]):
357786
+    args = [ 'info' ]
357786
+    if imgopts:
357786
+        args.append('--image-opts')
357786
+    else:
357786
+        args += [ '-f', imgfmt ]
357786
+    args += extra_args
357786
+    args.append(filename)
357786
+
357786
+    output = qemu_img_pipe(*args)
357786
     if not filter_path:
357786
         filter_path = filename
357786
     log(filter_img_info(output, filter_path))
357786
-- 
357786
1.8.3.1
357786