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