yeahuh / rpms / qemu-kvm

Forked from rpms/qemu-kvm 2 years ago
Clone

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

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