iotests: Add test for drive-mirror with NBD target

When the drive-mirror block job is completed, it will call bdrv_swap()
on the source and the target BDS; this should obviously not result in a
segmentation fault.

Signed-off-by: Max Reitz <mreitz@redhat.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Message-id: 1423256778-3340-4-git-send-email-mreitz@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
Max Reitz 2015-02-06 16:06:18 -05:00 committed by Stefan Hajnoczi
parent ea82aa4283
commit 21c7f3f749
3 changed files with 93 additions and 0 deletions

81
tests/qemu-iotests/094 Executable file
View File

@ -0,0 +1,81 @@
#!/bin/bash
#
# Test case for drive-mirror to NBD (especially bdrv_swap() on NBD BDS)
#
# Copyright (C) 2015 Red Hat, Inc.
#
# 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
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# creator
owner=mreitz@redhat.com
seq="$(basename $0)"
echo "QA output created by $seq"
here="$PWD"
tmp=/tmp/$$
status=1 # failure is the default!
trap "exit \$status" 0 1 2 3 15
# get standard environment, filters and checks
. ./common.rc
. ./common.filter
. ./common.qemu
_supported_fmt generic
_supported_proto nbd
_supported_os Linux
_unsupported_imgopts "subformat=monolithicFlat" "subformat=twoGbMaxExtentFlat"
_make_test_img 64M
$QEMU_IMG create -f $IMGFMT "$TEST_DIR/source.$IMGFMT" 64M | _filter_img_create
_launch_qemu -drive if=none,id=src,file="$TEST_DIR/source.$IMGFMT",format=raw \
-nodefaults
_send_qemu_cmd $QEMU_HANDLE \
"{'execute': 'qmp_capabilities'}" \
'return'
# 'format': 'nbd' is not actually "correct", but this is probably the only way
# to test bdrv_swap() on an NBD BDS
_send_qemu_cmd $QEMU_HANDLE \
"{'execute': 'drive-mirror',
'arguments': {'device': 'src',
'target': '$TEST_IMG',
'format': 'nbd',
'sync':'full',
'mode':'existing'}}" \
'BLOCK_JOB_READY'
_send_qemu_cmd $QEMU_HANDLE \
"{'execute': 'block-job-complete',
'arguments': {'device': 'src'}}" \
'BLOCK_JOB_COMPLETE'
_send_qemu_cmd $QEMU_HANDLE \
"{'execute': 'quit'}" \
'return'
wait=1 _cleanup_qemu
_cleanup_test_img
rm -f "$TEST_DIR/source.$IMGFMT"
# success, all done
echo '*** done'
rm -f $seq.full
status=0

View File

@ -0,0 +1,11 @@
QA output created by 094
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864
Formatting 'TEST_DIR/source.IMGFMT', fmt=IMGFMT size=67108864
{"return": {}}
{"return": {}}
{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "BLOCK_JOB_READY", "data": {"device": "src", "len": 67108864, "offset": 67108864, "speed": 0, "type": "mirror"}}
{"return": {}}
{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "BLOCK_JOB_COMPLETED", "data": {"device": "src", "len": 67108864, "offset": 67108864, "speed": 0, "type": "mirror"}}
{"return": {}}
{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN"}
*** done

View File

@ -99,6 +99,7 @@
090 rw auto quick 090 rw auto quick
091 rw auto 091 rw auto
092 rw auto quick 092 rw auto quick
094 rw auto quick
095 rw auto quick 095 rw auto quick
097 rw auto backing 097 rw auto backing
098 rw auto backing quick 098 rw auto backing quick