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

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