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

ae23c9
From 1687b0798a047ac15c4d93ad32daa0378975be0e Mon Sep 17 00:00:00 2001
ae23c9
From: Kevin Wolf <kwolf@redhat.com>
ae23c9
Date: Tue, 26 Jun 2018 09:48:48 +0200
ae23c9
Subject: [PATCH 140/268] qemu-iotests: Rewrite 210 for blockdev-create job
ae23c9
ae23c9
RH-Author: Kevin Wolf <kwolf@redhat.com>
ae23c9
Message-id: <20180626094856.6924-66-kwolf@redhat.com>
ae23c9
Patchwork-id: 81090
ae23c9
O-Subject: [RHV-7.6 qemu-kvm-rhev PATCH v2 65/73] qemu-iotests: Rewrite 210 for blockdev-create job
ae23c9
Bugzilla: 1513543
ae23c9
RH-Acked-by: Jeffrey Cody <jcody@redhat.com>
ae23c9
RH-Acked-by: Max Reitz <mreitz@redhat.com>
ae23c9
RH-Acked-by: Fam Zheng <famz@redhat.com>
ae23c9
ae23c9
This rewrites the test case 210 to work with the new x-blockdev-create
ae23c9
job rather than the old synchronous version of the command.
ae23c9
ae23c9
All of the test cases stay the same as before, but in order to be able
ae23c9
to implement proper job handling, the test case is rewritten in Python.
ae23c9
ae23c9
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
ae23c9
Reviewed-by: Max Reitz <mreitz@redhat.com>
ae23c9
Reviewed-by: Jeff Cody <jcody@redhat.com>
ae23c9
(cherry picked from commit 5ba141dc6f17ca0f250f107aace2df19558c8bc4)
ae23c9
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
ae23c9
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
ae23c9
---
ae23c9
 tests/qemu-iotests/210        | 393 ++++++++++++++++++------------------------
ae23c9
 tests/qemu-iotests/210.out    | 197 ++++++++++++++-------
ae23c9
 tests/qemu-iotests/group      |   2 +-
ae23c9
 tests/qemu-iotests/iotests.py |  12 +-
ae23c9
 4 files changed, 314 insertions(+), 290 deletions(-)
ae23c9
ae23c9
diff --git a/tests/qemu-iotests/210 b/tests/qemu-iotests/210
ae23c9
index e607c0d..ff4fdde 100755
ae23c9
--- a/tests/qemu-iotests/210
ae23c9
+++ b/tests/qemu-iotests/210
ae23c9
@@ -1,9 +1,11 @@
ae23c9
-#!/bin/bash
ae23c9
+#!/usr/bin/env python
ae23c9
 #
ae23c9
 # Test luks and file image creation
ae23c9
 #
ae23c9
 # Copyright (C) 2018 Red Hat, Inc.
ae23c9
 #
ae23c9
+# Creator/Owner: Kevin Wolf <kwolf@redhat.com>
ae23c9
+#
ae23c9
 # This program is free software; you can redistribute it and/or modify
ae23c9
 # it under the terms of the GNU General Public License as published by
ae23c9
 # the Free Software Foundation; either version 2 of the License, or
ae23c9
@@ -18,230 +20,165 @@
ae23c9
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
ae23c9
 #
ae23c9
 
ae23c9
-# creator
ae23c9
-owner=kwolf@redhat.com
ae23c9
-
ae23c9
-seq=`basename $0`
ae23c9
-echo "QA output created by $seq"
ae23c9
-
ae23c9
-here=`pwd`
ae23c9
-status=1	# failure is the default!
ae23c9
-
ae23c9
-# get standard environment, filters and checks
ae23c9
-. ./common.rc
ae23c9
-. ./common.filter
ae23c9
-
ae23c9
-_supported_fmt luks
ae23c9
-_supported_proto file
ae23c9
-_supported_os Linux
ae23c9
-
ae23c9
-function do_run_qemu()
ae23c9
-{
ae23c9
-    echo Testing: "$@"
ae23c9
-    $QEMU -nographic -qmp stdio -serial none "$@"
ae23c9
-    echo
ae23c9
-}
ae23c9
-
ae23c9
-function run_qemu()
ae23c9
-{
ae23c9
-    do_run_qemu "$@" 2>&1 | _filter_testdir | _filter_qmp \
ae23c9
-                          | _filter_qemu | _filter_imgfmt \
ae23c9
-                          | _filter_actual_image_size
ae23c9
-}
ae23c9
-
ae23c9
-echo
ae23c9
-echo "=== Successful image creation (defaults) ==="
ae23c9
-echo
ae23c9
-
ae23c9
-size=$((128 * 1024 * 1024))
ae23c9
-
ae23c9
-run_qemu -object secret,id=keysec0,data="foo" <
ae23c9
-{ "execute": "qmp_capabilities" }
ae23c9
-{ "execute": "x-blockdev-create",
ae23c9
-  "arguments": {
ae23c9
-      "driver": "file",
ae23c9
-      "filename": "$TEST_IMG_FILE",
ae23c9
-      "size": 0
ae23c9
-  }
ae23c9
-}
ae23c9
-{ "execute": "blockdev-add",
ae23c9
-  "arguments": {
ae23c9
-      "driver": "file",
ae23c9
-      "node-name": "imgfile",
ae23c9
-      "filename": "$TEST_IMG_FILE"
ae23c9
-  }
ae23c9
-}
ae23c9
-{ "execute": "x-blockdev-create",
ae23c9
-  "arguments": {
ae23c9
-      "driver": "$IMGFMT",
ae23c9
-      "file": "imgfile",
ae23c9
-      "key-secret": "keysec0",
ae23c9
-      "size": $size,
ae23c9
-      "iter-time": 10
ae23c9
-  }
ae23c9
-}
ae23c9
-{ "execute": "quit" }
ae23c9
-EOF
ae23c9
-
ae23c9
-_img_info --format-specific | _filter_img_info --format-specific
ae23c9
-
ae23c9
-echo
ae23c9
-echo "=== Successful image creation (with non-default options) ==="
ae23c9
-echo
ae23c9
-
ae23c9
-# Choose a different size to show that we got a new image
ae23c9
-size=$((64 * 1024 * 1024))
ae23c9
-
ae23c9
-run_qemu -object secret,id=keysec0,data="foo" <
ae23c9
-{ "execute": "qmp_capabilities" }
ae23c9
-{ "execute": "x-blockdev-create",
ae23c9
-  "arguments": {
ae23c9
-      "driver": "file",
ae23c9
-      "filename": "$TEST_IMG_FILE",
ae23c9
-      "size": 0
ae23c9
-  }
ae23c9
-}
ae23c9
-{ "execute": "x-blockdev-create",
ae23c9
-  "arguments": {
ae23c9
-      "driver": "$IMGFMT",
ae23c9
-      "file": {
ae23c9
-          "driver": "file",
ae23c9
-          "filename": "$TEST_IMG_FILE"
ae23c9
-      },
ae23c9
-      "size": $size,
ae23c9
-      "key-secret": "keysec0",
ae23c9
-      "cipher-alg": "twofish-128",
ae23c9
-      "cipher-mode": "ctr",
ae23c9
-      "ivgen-alg": "plain64",
ae23c9
-      "ivgen-hash-alg": "md5",
ae23c9
-      "hash-alg": "sha1",
ae23c9
-      "iter-time": 10
ae23c9
-  }
ae23c9
-}
ae23c9
-{ "execute": "quit" }
ae23c9
-EOF
ae23c9
-
ae23c9
-_img_info --format-specific | _filter_img_info --format-specific
ae23c9
-
ae23c9
-echo
ae23c9
-echo "=== Invalid BlockdevRef ==="
ae23c9
-echo
ae23c9
-
ae23c9
-run_qemu <
ae23c9
-{ "execute": "qmp_capabilities" }
ae23c9
-{ "execute": "x-blockdev-create",
ae23c9
-  "arguments": {
ae23c9
-      "driver": "$IMGFMT",
ae23c9
-      "file": "this doesn't exist",
ae23c9
-      "size": $size
ae23c9
-  }
ae23c9
-}
ae23c9
-{ "execute": "quit" }
ae23c9
-EOF
ae23c9
-
ae23c9
-echo
ae23c9
-echo "=== Zero size ==="
ae23c9
-echo
ae23c9
-
ae23c9
-run_qemu -blockdev driver=file,filename="$TEST_IMG_FILE",node-name=node0 \
ae23c9
-         -object secret,id=keysec0,data="foo" <
ae23c9
-{ "execute": "qmp_capabilities" }
ae23c9
-{ "execute": "x-blockdev-create",
ae23c9
-  "arguments": {
ae23c9
-      "driver": "$IMGFMT",
ae23c9
-      "file": "node0",
ae23c9
-      "key-secret": "keysec0",
ae23c9
-      "size": 0,
ae23c9
-      "iter-time": 10
ae23c9
-  }
ae23c9
-}
ae23c9
-{ "execute": "quit" }
ae23c9
-EOF
ae23c9
-
ae23c9
-_img_info | _filter_img_info
ae23c9
-
ae23c9
-
ae23c9
-echo
ae23c9
-echo "=== Invalid sizes ==="
ae23c9
-echo
ae23c9
-
ae23c9
-# TODO Negative image sizes aren't handled correctly, but this is a problem
ae23c9
-# with QAPI's implementation of the 'size' type and affects other commands as
ae23c9
-# well. Once this is fixed, we may want to add a test case here.
ae23c9
-
ae23c9
-# 1. 2^64 - 512
ae23c9
-# 2. 2^63 = 8 EB (qemu-img enforces image sizes less than this)
ae23c9
-# 3. 2^63 - 512 (generally valid, but with the crypto header the file will
ae23c9
-#                exceed 63 bits)
ae23c9
-
ae23c9
-run_qemu -blockdev driver=file,filename="$TEST_IMG_FILE",node-name=node0 \
ae23c9
-         -object secret,id=keysec0,data="foo" <
ae23c9
-{ "execute": "qmp_capabilities" }
ae23c9
-{ "execute": "x-blockdev-create",
ae23c9
-  "arguments": {
ae23c9
-      "driver": "$IMGFMT",
ae23c9
-      "file": "node0",
ae23c9
-      "key-secret": "keysec0",
ae23c9
-      "size": 18446744073709551104
ae23c9
-  }
ae23c9
-}
ae23c9
-{ "execute": "x-blockdev-create",
ae23c9
-  "arguments": {
ae23c9
-      "driver": "$IMGFMT",
ae23c9
-      "file": "node0",
ae23c9
-      "key-secret": "keysec0",
ae23c9
-      "size": 9223372036854775808
ae23c9
-  }
ae23c9
-}
ae23c9
-{ "execute": "x-blockdev-create",
ae23c9
-  "arguments": {
ae23c9
-      "driver": "$IMGFMT",
ae23c9
-      "file": "node0",
ae23c9
-      "key-secret": "keysec0",
ae23c9
-      "size": 9223372036854775296
ae23c9
-  }
ae23c9
-}
ae23c9
-{ "execute": "quit" }
ae23c9
-EOF
ae23c9
-
ae23c9
-echo
ae23c9
-echo "=== Resize image with invalid sizes ==="
ae23c9
-echo
ae23c9
-
ae23c9
-run_qemu -blockdev driver=file,filename="$TEST_IMG_FILE",node-name=node0 \
ae23c9
-         -blockdev driver=luks,file=node0,key-secret=keysec0,node-name=node1 \
ae23c9
-         -object secret,id=keysec0,data="foo" <
ae23c9
-{ "execute": "qmp_capabilities" }
ae23c9
-{ "execute": "block_resize",
ae23c9
-  "arguments": {
ae23c9
-      "node-name": "node1",
ae23c9
-      "size": 9223372036854775296
ae23c9
-  }
ae23c9
-}
ae23c9
-{ "execute": "block_resize",
ae23c9
-  "arguments": {
ae23c9
-      "node-name": "node1",
ae23c9
-      "size": 9223372036854775808
ae23c9
-  }
ae23c9
-}
ae23c9
-{ "execute": "block_resize",
ae23c9
-  "arguments": {
ae23c9
-      "node-name": "node1",
ae23c9
-      "size": 18446744073709551104
ae23c9
-  }
ae23c9
-}
ae23c9
-{ "execute": "block_resize",
ae23c9
-  "arguments": {
ae23c9
-      "node-name": "node1",
ae23c9
-      "size": -9223372036854775808
ae23c9
-  }
ae23c9
-}
ae23c9
-{ "execute": "quit" }
ae23c9
-EOF
ae23c9
-
ae23c9
-_img_info | _filter_img_info
ae23c9
-
ae23c9
-# success, all done
ae23c9
-echo "*** done"
ae23c9
-rm -f $seq.full
ae23c9
-status=0
ae23c9
+import iotests
ae23c9
+from iotests import imgfmt
ae23c9
+
ae23c9
+iotests.verify_image_format(supported_fmts=['luks'])
ae23c9
+iotests.verify_protocol(supported=['file'])
ae23c9
+
ae23c9
+def blockdev_create(vm, options):
ae23c9
+    result = vm.qmp_log('x-blockdev-create', job_id='job0', options=options)
ae23c9
+
ae23c9
+    if 'return' in result:
ae23c9
+        assert result['return'] == {}
ae23c9
+        vm.run_job('job0')
ae23c9
+    iotests.log("")
ae23c9
+
ae23c9
+with iotests.FilePath('t.luks') as disk_path, \
ae23c9
+     iotests.VM() as vm:
ae23c9
+
ae23c9
+    vm.add_object('secret,id=keysec0,data=foo')
ae23c9
+
ae23c9
+    #
ae23c9
+    # Successful image creation (defaults)
ae23c9
+    #
ae23c9
+    iotests.log("=== Successful image creation (defaults) ===")
ae23c9
+    iotests.log("")
ae23c9
+
ae23c9
+    size = 128 * 1024 * 1024
ae23c9
+
ae23c9
+    vm.launch()
ae23c9
+    blockdev_create(vm, { 'driver': 'file',
ae23c9
+                          'filename': disk_path,
ae23c9
+                          'size': 0 })
ae23c9
+
ae23c9
+    vm.qmp_log('blockdev-add', driver='file', filename=disk_path,
ae23c9
+               node_name='imgfile')
ae23c9
+
ae23c9
+    blockdev_create(vm, { 'driver': imgfmt,
ae23c9
+                          'file': 'imgfile',
ae23c9
+                          'key-secret': 'keysec0',
ae23c9
+                          'size': size,
ae23c9
+                          'iter-time': 10 })
ae23c9
+    vm.shutdown()
ae23c9
+
ae23c9
+    # TODO Proper support for images to be used with imgopts and/or protocols
ae23c9
+    iotests.img_info_log(
ae23c9
+        'driver=luks,file.driver=file,file.filename=%s,key-secret=keysec0' % (disk_path),
ae23c9
+        filter_path=disk_path,
ae23c9
+        extra_args=['--object', 'secret,id=keysec0,data=foo'],
ae23c9
+        imgopts=True)
ae23c9
+
ae23c9
+    #
ae23c9
+    # Successful image creation (with non-default options)
ae23c9
+    #
ae23c9
+    iotests.log("=== Successful image creation (with non-default options) ===")
ae23c9
+    iotests.log("")
ae23c9
+
ae23c9
+    size = 64 * 1024 * 1024
ae23c9
+
ae23c9
+    vm.launch()
ae23c9
+    blockdev_create(vm, { 'driver': 'file',
ae23c9
+                          'filename': disk_path,
ae23c9
+                          'size': 0 })
ae23c9
+    blockdev_create(vm, { 'driver': imgfmt,
ae23c9
+                          'file': {
ae23c9
+                              'driver': 'file',
ae23c9
+                              'filename': disk_path,
ae23c9
+                          },
ae23c9
+                          'size': size,
ae23c9
+                          'key-secret': 'keysec0',
ae23c9
+                          'cipher-alg': 'twofish-128',
ae23c9
+                          'cipher-mode': 'ctr',
ae23c9
+                          'ivgen-alg': 'plain64',
ae23c9
+                          'ivgen-hash-alg': 'md5',
ae23c9
+                          'hash-alg': 'sha1',
ae23c9
+                          'iter-time': 10 })
ae23c9
+    vm.shutdown()
ae23c9
+
ae23c9
+    # TODO Proper support for images to be used with imgopts and/or protocols
ae23c9
+    iotests.img_info_log(
ae23c9
+        'driver=luks,file.driver=file,file.filename=%s,key-secret=keysec0' % (disk_path),
ae23c9
+        filter_path=disk_path,
ae23c9
+        extra_args=['--object', 'secret,id=keysec0,data=foo'],
ae23c9
+        imgopts=True)
ae23c9
+
ae23c9
+    #
ae23c9
+    # Invalid BlockdevRef
ae23c9
+    #
ae23c9
+    iotests.log("=== Invalid BlockdevRef ===")
ae23c9
+    iotests.log("")
ae23c9
+
ae23c9
+    size = 64 * 1024 * 1024
ae23c9
+
ae23c9
+    vm.launch()
ae23c9
+    blockdev_create(vm, { 'driver': imgfmt,
ae23c9
+                          'file': "this doesn't exist",
ae23c9
+                          'size': size })
ae23c9
+    vm.shutdown()
ae23c9
+
ae23c9
+    #
ae23c9
+    # Zero size
ae23c9
+    #
ae23c9
+    iotests.log("=== Zero size ===")
ae23c9
+    iotests.log("")
ae23c9
+
ae23c9
+    vm.add_blockdev('driver=file,filename=%s,node-name=node0' % (disk_path))
ae23c9
+    vm.launch()
ae23c9
+    blockdev_create(vm, { 'driver': imgfmt,
ae23c9
+                          'file': 'node0',
ae23c9
+                          'key-secret': 'keysec0',
ae23c9
+                          'size': 0,
ae23c9
+                          'iter-time': 10 })
ae23c9
+    vm.shutdown()
ae23c9
+
ae23c9
+    # TODO Proper support for images to be used with imgopts and/or protocols
ae23c9
+    iotests.img_info_log(
ae23c9
+        'driver=luks,file.driver=file,file.filename=%s,key-secret=keysec0' % (disk_path),
ae23c9
+        filter_path=disk_path,
ae23c9
+        extra_args=['--object', 'secret,id=keysec0,data=foo'],
ae23c9
+        imgopts=True)
ae23c9
+
ae23c9
+    #
ae23c9
+    # Invalid sizes
ae23c9
+    #
ae23c9
+
ae23c9
+    # TODO Negative image sizes aren't handled correctly, but this is a problem
ae23c9
+    # with QAPI's implementation of the 'size' type and affects other commands as
ae23c9
+    # well. Once this is fixed, we may want to add a test case here.
ae23c9
+
ae23c9
+    # 1. 2^64 - 512
ae23c9
+    # 2. 2^63 = 8 EB (qemu-img enforces image sizes less than this)
ae23c9
+    # 3. 2^63 - 512 (generally valid, but with the crypto header the file will
ae23c9
+    #                exceed 63 bits)
ae23c9
+    iotests.log("=== Invalid sizes ===")
ae23c9
+    iotests.log("")
ae23c9
+
ae23c9
+    vm.launch()
ae23c9
+    for size in [ 18446744073709551104, 9223372036854775808, 9223372036854775296 ]:
ae23c9
+        blockdev_create(vm, { 'driver': imgfmt,
ae23c9
+                              'file': 'node0',
ae23c9
+                              'key-secret': 'keysec0',
ae23c9
+                              'size': size })
ae23c9
+    vm.shutdown()
ae23c9
+
ae23c9
+    #
ae23c9
+    # Resize image with invalid sizes
ae23c9
+    #
ae23c9
+    iotests.log("=== Resize image with invalid sizes ===")
ae23c9
+    iotests.log("")
ae23c9
+
ae23c9
+    vm.add_blockdev('driver=luks,file=node0,key-secret=keysec0,node-name=node1')
ae23c9
+    vm.launch()
ae23c9
+    vm.qmp_log('block_resize', node_name='node1', size=9223372036854775296)
ae23c9
+    vm.qmp_log('block_resize', node_name='node1', size=9223372036854775808)
ae23c9
+    vm.qmp_log('block_resize', node_name='node1', size=18446744073709551104)
ae23c9
+    vm.qmp_log('block_resize', node_name='node1', size=-9223372036854775808)
ae23c9
+    vm.shutdown()
ae23c9
+
ae23c9
+    # TODO Proper support for images to be used with imgopts and/or protocols
ae23c9
+    iotests.img_info_log(
ae23c9
+        'driver=luks,file.driver=file,file.filename=%s,key-secret=keysec0' % (disk_path),
ae23c9
+        filter_path=disk_path,
ae23c9
+        extra_args=['--object', 'secret,id=keysec0,data=foo'],
ae23c9
+        imgopts=True)
ae23c9
diff --git a/tests/qemu-iotests/210.out b/tests/qemu-iotests/210.out
ae23c9
index 8198f8c..0e6e5c0 100644
ae23c9
--- a/tests/qemu-iotests/210.out
ae23c9
+++ b/tests/qemu-iotests/210.out
ae23c9
@@ -1,29 +1,31 @@
ae23c9
-QA output created by 210
ae23c9
-
ae23c9
 === Successful image creation (defaults) ===
ae23c9
 
ae23c9
-Testing: -object secret,id=keysec0,data=foo
ae23c9
-QMP_VERSION
ae23c9
-{"return": {}}
ae23c9
-{"return": {}}
ae23c9
-{"return": {}}
ae23c9
-{"return": {}}
ae23c9
-{"return": {}}
ae23c9
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false}}
ae23c9
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'size': 0, 'driver': 'file', 'filename': 'TEST_DIR/PID-t.luks'}}}
ae23c9
+{u'return': {}}
ae23c9
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
ae23c9
+{u'return': {}}
ae23c9
+
ae23c9
+{'execute': 'blockdev-add', 'arguments': {'node_name': 'imgfile', 'driver': 'file', 'filename': 'TEST_DIR/PID-t.luks'}}
ae23c9
+{u'return': {}}
ae23c9
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'key-secret': 'keysec0', 'iter-time': 10, 'driver': 'luks', 'file': 'imgfile', 'size': 134217728}}}
ae23c9
+{u'return': {}}
ae23c9
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
ae23c9
+{u'return': {}}
ae23c9
 
ae23c9
-image: json:{"driver": "IMGFMT", "file": {"driver": "file", "filename": "TEST_DIR/t.IMGFMT"}, "key-secret": "keysec0"}
ae23c9
+image: json:{"driver": "IMGFMT", "file": {"driver": "file", "filename": "TEST_IMG"}, "key-secret": "keysec0"}
ae23c9
 file format: IMGFMT
ae23c9
 virtual size: 128M (134217728 bytes)
ae23c9
+encrypted: yes
ae23c9
 Format specific information:
ae23c9
     ivgen alg: plain64
ae23c9
     hash alg: sha256
ae23c9
     cipher alg: aes-256
ae23c9
-    uuid: 00000000-0000-0000-0000-000000000000
ae23c9
+    uuid: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
ae23c9
     cipher mode: xts
ae23c9
     slots:
ae23c9
         [0]:
ae23c9
             active: true
ae23c9
-            iters: 1024
ae23c9
+            iters: XXX
ae23c9
             key offset: 4096
ae23c9
             stripes: 4000
ae23c9
         [1]:
ae23c9
@@ -48,31 +50,34 @@ Format specific information:
ae23c9
             active: false
ae23c9
             key offset: 1810432
ae23c9
     payload offset: 2068480
ae23c9
-    master key iters: 1024
ae23c9
+    master key iters: XXX
ae23c9
 
ae23c9
 === Successful image creation (with non-default options) ===
ae23c9
 
ae23c9
-Testing: -object secret,id=keysec0,data=foo
ae23c9
-QMP_VERSION
ae23c9
-{"return": {}}
ae23c9
-{"return": {}}
ae23c9
-{"return": {}}
ae23c9
-{"return": {}}
ae23c9
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false}}
ae23c9
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'size': 0, 'driver': 'file', 'filename': 'TEST_DIR/PID-t.luks'}}}
ae23c9
+{u'return': {}}
ae23c9
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
ae23c9
+{u'return': {}}
ae23c9
+
ae23c9
+{'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}}}
ae23c9
+{u'return': {}}
ae23c9
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
ae23c9
+{u'return': {}}
ae23c9
 
ae23c9
-image: json:{"driver": "IMGFMT", "file": {"driver": "file", "filename": "TEST_DIR/t.IMGFMT"}, "key-secret": "keysec0"}
ae23c9
+image: json:{"driver": "IMGFMT", "file": {"driver": "file", "filename": "TEST_IMG"}, "key-secret": "keysec0"}
ae23c9
 file format: IMGFMT
ae23c9
 virtual size: 64M (67108864 bytes)
ae23c9
+encrypted: yes
ae23c9
 Format specific information:
ae23c9
     ivgen alg: plain64
ae23c9
     hash alg: sha1
ae23c9
     cipher alg: twofish-128
ae23c9
-    uuid: 00000000-0000-0000-0000-000000000000
ae23c9
+    uuid: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
ae23c9
     cipher mode: ctr
ae23c9
     slots:
ae23c9
         [0]:
ae23c9
             active: true
ae23c9
-            iters: 1024
ae23c9
+            iters: XXX
ae23c9
             key offset: 4096
ae23c9
             stripes: 4000
ae23c9
         [1]:
ae23c9
@@ -97,56 +102,130 @@ Format specific information:
ae23c9
             active: false
ae23c9
             key offset: 462848
ae23c9
     payload offset: 528384
ae23c9
-    master key iters: 1024
ae23c9
+    master key iters: XXX
ae23c9
 
ae23c9
 === Invalid BlockdevRef ===
ae23c9
 
ae23c9
-Testing:
ae23c9
-QMP_VERSION
ae23c9
-{"return": {}}
ae23c9
-{"error": {"class": "GenericError", "desc": "Cannot find device=this doesn't exist nor node_name=this doesn't exist"}}
ae23c9
-{"return": {}}
ae23c9
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false}}
ae23c9
-
ae23c9
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'luks', 'file': "this doesn't exist", 'size': 67108864}}}
ae23c9
+{u'return': {}}
ae23c9
+Job failed: Cannot find device=this doesn't exist nor node_name=this doesn't exist
ae23c9
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
ae23c9
+{u'return': {}}
ae23c9
 
ae23c9
 === Zero size ===
ae23c9
 
ae23c9
-Testing: -blockdev driver=file,filename=TEST_DIR/t.IMGFMT,node-name=node0 -object secret,id=keysec0,data=foo
ae23c9
-QMP_VERSION
ae23c9
-{"return": {}}
ae23c9
-{"return": {}}
ae23c9
-{"return": {}}
ae23c9
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false}}
ae23c9
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'key-secret': 'keysec0', 'iter-time': 10, 'driver': 'luks', 'file': 'node0', 'size': 0}}}
ae23c9
+{u'return': {}}
ae23c9
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
ae23c9
+{u'return': {}}
ae23c9
 
ae23c9
-image: json:{"driver": "IMGFMT", "file": {"driver": "file", "filename": "TEST_DIR/t.IMGFMT"}, "key-secret": "keysec0"}
ae23c9
+image: json:{"driver": "IMGFMT", "file": {"driver": "file", "filename": "TEST_IMG"}, "key-secret": "keysec0"}
ae23c9
 file format: IMGFMT
ae23c9
 virtual size: 0 (0 bytes)
ae23c9
+encrypted: yes
ae23c9
+Format specific information:
ae23c9
+    ivgen alg: plain64
ae23c9
+    hash alg: sha256
ae23c9
+    cipher alg: aes-256
ae23c9
+    uuid: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
ae23c9
+    cipher mode: xts
ae23c9
+    slots:
ae23c9
+        [0]:
ae23c9
+            active: true
ae23c9
+            iters: XXX
ae23c9
+            key offset: 4096
ae23c9
+            stripes: 4000
ae23c9
+        [1]:
ae23c9
+            active: false
ae23c9
+            key offset: 262144
ae23c9
+        [2]:
ae23c9
+            active: false
ae23c9
+            key offset: 520192
ae23c9
+        [3]:
ae23c9
+            active: false
ae23c9
+            key offset: 778240
ae23c9
+        [4]:
ae23c9
+            active: false
ae23c9
+            key offset: 1036288
ae23c9
+        [5]:
ae23c9
+            active: false
ae23c9
+            key offset: 1294336
ae23c9
+        [6]:
ae23c9
+            active: false
ae23c9
+            key offset: 1552384
ae23c9
+        [7]:
ae23c9
+            active: false
ae23c9
+            key offset: 1810432
ae23c9
+    payload offset: 2068480
ae23c9
+    master key iters: XXX
ae23c9
 
ae23c9
 === Invalid sizes ===
ae23c9
 
ae23c9
-Testing: -blockdev driver=file,filename=TEST_DIR/t.IMGFMT,node-name=node0 -object secret,id=keysec0,data=foo
ae23c9
-QMP_VERSION
ae23c9
-{"return": {}}
ae23c9
-{"error": {"class": "GenericError", "desc": "The requested file size is too large"}}
ae23c9
-{"error": {"class": "GenericError", "desc": "The requested file size is too large"}}
ae23c9
-{"error": {"class": "GenericError", "desc": "The requested file size is too large"}}
ae23c9
-{"return": {}}
ae23c9
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false}}
ae23c9
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'key-secret': 'keysec0', 'driver': 'luks', 'file': 'node0', 'size': 18446744073709551104L}}}
ae23c9
+{u'return': {}}
ae23c9
+Job failed: The requested file size is too large
ae23c9
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
ae23c9
+{u'return': {}}
ae23c9
+
ae23c9
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'key-secret': 'keysec0', 'driver': 'luks', 'file': 'node0', 'size': 9223372036854775808L}}}
ae23c9
+{u'return': {}}
ae23c9
+Job failed: The requested file size is too large
ae23c9
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
ae23c9
+{u'return': {}}
ae23c9
 
ae23c9
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'key-secret': 'keysec0', 'driver': 'luks', 'file': 'node0', 'size': 9223372036854775296}}}
ae23c9
+{u'return': {}}
ae23c9
+Job failed: The requested file size is too large
ae23c9
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
ae23c9
+{u'return': {}}
ae23c9
 
ae23c9
 === Resize image with invalid sizes ===
ae23c9
 
ae23c9
-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
ae23c9
-QMP_VERSION
ae23c9
-{"return": {}}
ae23c9
-{"error": {"class": "GenericError", "desc": "The requested file size is too large"}}
ae23c9
-{"error": {"class": "GenericError", "desc": "Invalid parameter type for 'size', expected: integer"}}
ae23c9
-{"error": {"class": "GenericError", "desc": "Invalid parameter type for 'size', expected: integer"}}
ae23c9
-{"error": {"class": "GenericError", "desc": "Parameter 'size' expects a >0 size"}}
ae23c9
-{"return": {}}
ae23c9
-{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false}}
ae23c9
-
ae23c9
-image: json:{"driver": "IMGFMT", "file": {"driver": "file", "filename": "TEST_DIR/t.IMGFMT"}, "key-secret": "keysec0"}
ae23c9
+{'execute': 'block_resize', 'arguments': {'size': 9223372036854775296, 'node_name': 'node1'}}
ae23c9
+{u'error': {u'class': u'GenericError', u'desc': u'The requested file size is too large'}}
ae23c9
+{'execute': 'block_resize', 'arguments': {'size': 9223372036854775808L, 'node_name': 'node1'}}
ae23c9
+{u'error': {u'class': u'GenericError', u'desc': u"Invalid parameter type for 'size', expected: integer"}}
ae23c9
+{'execute': 'block_resize', 'arguments': {'size': 18446744073709551104L, 'node_name': 'node1'}}
ae23c9
+{u'error': {u'class': u'GenericError', u'desc': u"Invalid parameter type for 'size', expected: integer"}}
ae23c9
+{'execute': 'block_resize', 'arguments': {'size': -9223372036854775808, 'node_name': 'node1'}}
ae23c9
+{u'error': {u'class': u'GenericError', u'desc': u"Parameter 'size' expects a >0 size"}}
ae23c9
+image: json:{"driver": "IMGFMT", "file": {"driver": "file", "filename": "TEST_IMG"}, "key-secret": "keysec0"}
ae23c9
 file format: IMGFMT
ae23c9
 virtual size: 0 (0 bytes)
ae23c9
-*** done
ae23c9
+encrypted: yes
ae23c9
+Format specific information:
ae23c9
+    ivgen alg: plain64
ae23c9
+    hash alg: sha256
ae23c9
+    cipher alg: aes-256
ae23c9
+    uuid: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
ae23c9
+    cipher mode: xts
ae23c9
+    slots:
ae23c9
+        [0]:
ae23c9
+            active: true
ae23c9
+            iters: XXX
ae23c9
+            key offset: 4096
ae23c9
+            stripes: 4000
ae23c9
+        [1]:
ae23c9
+            active: false
ae23c9
+            key offset: 262144
ae23c9
+        [2]:
ae23c9
+            active: false
ae23c9
+            key offset: 520192
ae23c9
+        [3]:
ae23c9
+            active: false
ae23c9
+            key offset: 778240
ae23c9
+        [4]:
ae23c9
+            active: false
ae23c9
+            key offset: 1036288
ae23c9
+        [5]:
ae23c9
+            active: false
ae23c9
+            key offset: 1294336
ae23c9
+        [6]:
ae23c9
+            active: false
ae23c9
+            key offset: 1552384
ae23c9
+        [7]:
ae23c9
+            active: false
ae23c9
+            key offset: 1810432
ae23c9
+    payload offset: 2068480
ae23c9
+    master key iters: XXX
ae23c9
+
ae23c9
diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group
ae23c9
index 649291a..3ecdafa 100644
ae23c9
--- a/tests/qemu-iotests/group
ae23c9
+++ b/tests/qemu-iotests/group
ae23c9
@@ -208,9 +208,9 @@
ae23c9
 207 rw auto
ae23c9
 208 rw auto quick
ae23c9
 209 rw auto quick
ae23c9
+210 rw auto
ae23c9
 # TODO The following commented out tests need to be reworked to work
ae23c9
 # with the x-blockdev-create job
ae23c9
-#210 rw auto
ae23c9
 #211 rw auto quick
ae23c9
 #212 rw auto quick
ae23c9
 #213 rw auto quick
ae23c9
diff --git a/tests/qemu-iotests/iotests.py b/tests/qemu-iotests/iotests.py
ae23c9
index 4461e1d..0dbfbfd 100644
ae23c9
--- a/tests/qemu-iotests/iotests.py
ae23c9
+++ b/tests/qemu-iotests/iotests.py
ae23c9
@@ -110,8 +110,16 @@ def qemu_img_pipe(*args):
ae23c9
         sys.stderr.write('qemu-img received signal %i: %s\n' % (-exitcode, ' '.join(qemu_img_args + list(args))))
ae23c9
     return subp.communicate()[0]
ae23c9
 
ae23c9
-def img_info_log(filename, filter_path=None):
ae23c9
-    output = qemu_img_pipe('info', '-f', imgfmt, filename)
ae23c9
+def img_info_log(filename, filter_path=None, imgopts=False, extra_args=[]):
ae23c9
+    args = [ 'info' ]
ae23c9
+    if imgopts:
ae23c9
+        args.append('--image-opts')
ae23c9
+    else:
ae23c9
+        args += [ '-f', imgfmt ]
ae23c9
+    args += extra_args
ae23c9
+    args.append(filename)
ae23c9
+
ae23c9
+    output = qemu_img_pipe(*args)
ae23c9
     if not filter_path:
ae23c9
         filter_path = filename
ae23c9
     log(filter_img_info(output, filter_path))
ae23c9
-- 
ae23c9
1.8.3.1
ae23c9