From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:42293) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dG3fV-0006ns-GS for qemu-devel@nongnu.org; Wed, 31 May 2017 09:28:10 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dG3fT-0001Z7-T2 for qemu-devel@nongnu.org; Wed, 31 May 2017 09:28:09 -0400 Date: Wed, 31 May 2017 09:27:59 -0400 From: Jeff Cody Message-ID: <20170531132759.GB19181@localhost.localdomain> References: <1496224367-24935-1-git-send-email-kwolf@redhat.com> <1496224367-24935-5-git-send-email-kwolf@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1496224367-24935-5-git-send-email-kwolf@redhat.com> Subject: Re: [Qemu-devel] [PATCH v3 4/4] qemu-iotests: Block migration test List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Kevin Wolf Cc: qemu-block@nongnu.org, eblake@redhat.com, qemu-devel@nongnu.org On Wed, May 31, 2017 at 11:52:47AM +0200, Kevin Wolf wrote: > Signed-off-by: Kevin Wolf > --- > tests/qemu-iotests/183 | 140 +++++++++++++++++++++++++++++++++++++++++++++ > tests/qemu-iotests/183.out | 46 +++++++++++++++ > tests/qemu-iotests/group | 1 + > 3 files changed, 187 insertions(+) > create mode 100755 tests/qemu-iotests/183 > create mode 100644 tests/qemu-iotests/183.out > > diff --git a/tests/qemu-iotests/183 b/tests/qemu-iotests/183 > new file mode 100755 > index 0000000..0a87541 > --- /dev/null > +++ b/tests/qemu-iotests/183 > @@ -0,0 +1,140 @@ > +#!/bin/bash > +# > +# Test old-style block migration (migrate -b) > +# > +# Copyright (C) 2017 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 . > +# > + > +# creator > +owner=kwolf@redhat.com > + > +seq=`basename $0` > +echo "QA output created by $seq" > + > +here=`pwd` > +status=1 # failure is the default! > + > +MIG_SOCKET="${TEST_DIR}/migrate" > + > +_cleanup() > +{ > + rm -f "${MIG_SOCKET}" > + rm -f "${TEST_IMG}.dest" > + _cleanup_test_img > + _cleanup_qemu > +} > +trap "_cleanup; exit \$status" 0 1 2 3 15 > + > +# get standard environment, filters and checks > +. ./common.rc > +. ./common.filter > +. ./common.qemu > + > +_supported_fmt qcow2 raw qed dmg quorum > +_supported_proto file > +_supported_os Linux > + > +size=64M > +_make_test_img $size > +TEST_IMG="${TEST_IMG}.dest" _make_test_img $size > + > +echo > +echo === Starting VMs === > +echo > + > +qemu_comm_method="qmp" > + > +_launch_qemu \ > + -drive file="${TEST_IMG}",cache=${CACHEMODE},driver=$IMGFMT,id=disk > +src=$QEMU_HANDLE > +_send_qemu_cmd $src "{ 'execute': 'qmp_capabilities' }" 'return' > + > +_launch_qemu \ > + -drive file="${TEST_IMG}.dest",cache=${CACHEMODE},driver=$IMGFMT,id=disk \ > + -incoming "unix:${MIG_SOCKET}" > +dest=$QEMU_HANDLE > +_send_qemu_cmd $dest "{ 'execute': 'qmp_capabilities' }" 'return' > + > +echo > +echo === Write something on the source === > +echo > + > +_send_qemu_cmd $src \ > + "{ 'execute': 'human-monitor-command', > + 'arguments': { 'command-line': > + 'qemu-io disk \"write -P 0x55 0 64k\"' } }" \ > + 'return' > +_send_qemu_cmd $src \ > + "{ 'execute': 'human-monitor-command', > + 'arguments': { 'command-line': > + 'qemu-io disk \"read -P 0x55 0 64k\"' } }" \ > + 'return' > + > +echo > +echo === Do block migration to destination === > +echo > + > +reply="$(_send_qemu_cmd $src \ > + "{ 'execute': 'migrate', > + 'arguments': { 'uri': 'unix:${MIG_SOCKET}', 'blk': true } }" \ > + 'return\|error')" > +echo "$reply" > +if echo "$reply" | grep "compiled without old-style" > /dev/null; then > + _notrun "migrate -b support not compiled in" > +fi > + > +QEMU_COMM_TIMEOUT=0.1 qemu_cmd_repeat=50 silent=yes \ > + _send_qemu_cmd $src "{ 'execute': 'query-migrate' }" '"status": "completed"' > +_send_qemu_cmd $src "{ 'execute': 'query-status' }" "return" > + > +echo > +echo === Do some I/O on the destination === > +echo > + > +# It is important that we use the BlockBackend of the guest device here instead > +# of the node name, which would create a new BlockBackend and not test whether > +# the guest has the necessary permissions to access the image now > +silent=yes _send_qemu_cmd $dest "" "100 %" > +_send_qemu_cmd $dest "{ 'execute': 'query-status' }" "return" > +_send_qemu_cmd $dest \ > + "{ 'execute': 'human-monitor-command', > + 'arguments': { 'command-line': > + 'qemu-io disk \"read -P 0x55 0 64k\"' } }" \ > + 'return' > +_send_qemu_cmd $dest \ > + "{ 'execute': 'human-monitor-command', > + 'arguments': { 'command-line': > + 'qemu-io disk \"write -P 0x66 1M 64k\"' } }" \ > + 'return' > + > +echo > +echo === Shut down and check image === > +echo > + > +_send_qemu_cmd $src '{"execute":"quit"}' 'return' > +_send_qemu_cmd $dest '{"execute":"quit"}' 'return' > +wait=1 _cleanup_qemu > + > +_check_test_img > +TEST_IMG="${TEST_IMG}.dest" _check_test_img > + > +$QEMU_IO -c 'write -P 0x66 1M 64k' "$TEST_IMG" | _filter_qemu_io > +$QEMU_IMG compare "$TEST_IMG.dest" "$TEST_IMG" > + > +# success, all done > +echo "*** done" > +rm -f $seq.full > +status=0 > diff --git a/tests/qemu-iotests/183.out b/tests/qemu-iotests/183.out > new file mode 100644 > index 0000000..103fdc7 > --- /dev/null > +++ b/tests/qemu-iotests/183.out > @@ -0,0 +1,46 @@ > +QA output created by 183 > +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 > +Formatting 'TEST_DIR/t.IMGFMT.dest', fmt=IMGFMT size=67108864 > + > +=== Starting VMs === > + > +{"return": {}} > +{"return": {}} > + > +=== Write something on the source === > + > +wrote 65536/65536 bytes at offset 0 > +64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) > +{"return": ""} > +read 65536/65536 bytes at offset 0 > +64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) > +{"return": ""} > + > +=== Do block migration to destination === > + > +{"return": {}} > +{"return": {"status": "postmigrate", "singlestep": false, "running": false}} > + > +=== Do some I/O on the destination === > + > +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "RESUME"} > +{"return": {"status": "running", "singlestep": false, "running": true}} > +read 65536/65536 bytes at offset 0 > +64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) > +{"return": ""} > +wrote 65536/65536 bytes at offset 1048576 > +64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) > +{"return": ""} > + > +=== Shut down and check image === > + > +{"return": {}} > +{"return": {}} > +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false}} > +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false}} > +No errors were found on the image. > +No errors were found on the image. > +wrote 65536/65536 bytes at offset 1048576 > +64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) > +Images are identical. > +*** done > diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group > index 5c8ea0f..a6acaff 100644 > --- a/tests/qemu-iotests/group > +++ b/tests/qemu-iotests/group > @@ -174,3 +174,4 @@ > 179 rw auto quick > 181 rw auto migration > 182 rw auto quick > +183 rw auto migration > -- > 1.8.3.1 > Reviewed-by: Jeff Cody