[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [qemu-xen staging-4.13] iotests: Test internal snapshots with -blockdev
commit d868d30db6799cf0bc7da7ec67ca6be1e8ec07b2 Author: Kevin Wolf <kwolf@xxxxxxxxxx> AuthorDate: Tue Sep 17 12:43:42 2019 +0200 Commit: Michael Roth <mdroth@xxxxxxxxxxxxxxxxxx> CommitDate: Mon Nov 4 08:07:08 2019 -0600 iotests: Test internal snapshots with -blockdev Signed-off-by: Kevin Wolf <kwolf@xxxxxxxxxx> Reviewed-by: Peter Krempa <pkrempa@xxxxxxxxxx> Tested-by: Peter Krempa <pkrempa@xxxxxxxxxx> (cherry picked from commit 92b22e7b1789b0e5f20d245706e72eae70dbddce) Signed-off-by: Michael Roth <mdroth@xxxxxxxxxxxxxxxxxx> --- tests/qemu-iotests/267 | 168 ++++++++++++++++++++++++++++++++++++ tests/qemu-iotests/267.out | 182 +++++++++++++++++++++++++++++++++++++++ tests/qemu-iotests/common.filter | 11 ++- tests/qemu-iotests/group | 1 + 4 files changed, 358 insertions(+), 4 deletions(-) diff --git a/tests/qemu-iotests/267 b/tests/qemu-iotests/267 new file mode 100755 index 0000000000..d37a67c012 --- /dev/null +++ b/tests/qemu-iotests/267 @@ -0,0 +1,168 @@ +#!/usr/bin/env bash +# +# Test which nodes are involved in internal snapshots +# +# Copyright (C) 2019 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=kwolf@xxxxxxxxxx + +seq=`basename $0` +echo "QA output created by $seq" + +status=1 # failure is the default! + +_cleanup() +{ + _cleanup_test_img + rm -f "$TEST_DIR/nbd" +} +trap "_cleanup; exit \$status" 0 1 2 3 15 + +# get standard environment, filters and checks +. ./common.rc +. ./common.filter + +_supported_fmt qcow2 +_supported_proto file +_supported_os Linux + +# Internal snapshots are (currently) impossible with refcount_bits=1 +_unsupported_imgopts 'refcount_bits=1[^0-9]' + +do_run_qemu() +{ + echo Testing: "$@" + ( + if ! test -t 0; then + while read cmd; do + echo $cmd + done + fi + echo quit + ) | $QEMU -nographic -monitor stdio -nodefaults "$@" + echo +} + +run_qemu() +{ + do_run_qemu "$@" 2>&1 | _filter_testdir | _filter_qemu | _filter_hmp | + _filter_generated_node_ids | _filter_imgfmt | _filter_vmstate_size +} + +size=128M + +run_test() +{ + _make_test_img $size + printf "savevm snap0\ninfo snapshots\nloadvm snap0\n" | run_qemu "$@" | _filter_date +} + + +echo +echo "=== No block devices at all ===" +echo + +run_test + +echo +echo "=== -drive if=none ===" +echo + +run_test -drive driver=file,file="$TEST_IMG",if=none +run_test -drive driver=$IMGFMT,file="$TEST_IMG",if=none +run_test -drive driver=$IMGFMT,file="$TEST_IMG",if=none -device virtio-blk,drive=none0 + +echo +echo "=== -drive if=virtio ===" +echo + +run_test -drive driver=file,file="$TEST_IMG",if=virtio +run_test -drive driver=$IMGFMT,file="$TEST_IMG",if=virtio + +echo +echo "=== Simple -blockdev ===" +echo + +run_test -blockdev driver=file,filename="$TEST_IMG",node-name=file +run_test -blockdev driver=file,filename="$TEST_IMG",node-name=file \ + -blockdev driver=$IMGFMT,file=file,node-name=fmt +run_test -blockdev driver=file,filename="$TEST_IMG",node-name=file \ + -blockdev driver=raw,file=file,node-name=raw \ + -blockdev driver=$IMGFMT,file=raw,node-name=fmt + +echo +echo "=== -blockdev with a filter on top ===" +echo + +run_test -blockdev driver=file,filename="$TEST_IMG",node-name=file \ + -blockdev driver=$IMGFMT,file=file,node-name=fmt \ + -blockdev driver=copy-on-read,file=fmt,node-name=filter + +echo +echo "=== -blockdev with a backing file ===" +echo + +TEST_IMG="$TEST_IMG.base" _make_test_img $size + +IMGOPTS="backing_file=$TEST_IMG.base" \ +run_test -blockdev driver=file,filename="$TEST_IMG.base",node-name=backing-file \ + -blockdev driver=file,filename="$TEST_IMG",node-name=file \ + -blockdev driver=$IMGFMT,file=file,backing=backing-file,node-name=fmt + +IMGOPTS="backing_file=$TEST_IMG.base" \ +run_test -blockdev driver=file,filename="$TEST_IMG.base",node-name=backing-file \ + -blockdev driver=$IMGFMT,file=backing-file,node-name=backing-fmt \ + -blockdev driver=file,filename="$TEST_IMG",node-name=file \ + -blockdev driver=$IMGFMT,file=file,backing=backing-fmt,node-name=fmt + +# A snapshot should be present on the overlay, but not the backing file +echo Internal snapshots on overlay: +$QEMU_IMG snapshot -l "$TEST_IMG" | _filter_date | _filter_vmstate_size + +echo Internal snapshots on backing file: +$QEMU_IMG snapshot -l "$TEST_IMG.base" | _filter_date | _filter_vmstate_size + +echo +echo "=== -blockdev with NBD server on the backing file ===" +echo + +IMGOPTS="backing_file=$TEST_IMG.base" _make_test_img $size +cat <<EOF | +nbd_server_start unix:$TEST_DIR/nbd +nbd_server_add -w backing-fmt +savevm snap0 +info snapshots +loadvm snap0 +EOF +run_qemu -blockdev driver=file,filename="$TEST_IMG.base",node-name=backing-file \ + -blockdev driver=$IMGFMT,file=backing-file,node-name=backing-fmt \ + -blockdev driver=file,filename="$TEST_IMG",node-name=file \ + -blockdev driver=$IMGFMT,file=file,backing=backing-fmt,node-name=fmt | + _filter_date + +# This time, a snapshot should be created on both files +echo Internal snapshots on overlay: +$QEMU_IMG snapshot -l "$TEST_IMG" | _filter_date | _filter_vmstate_size + +echo Internal snapshots on backing file: +$QEMU_IMG snapshot -l "$TEST_IMG.base" | _filter_date | _filter_vmstate_size + +# success, all done +echo "*** done" +rm -f $seq.full +status=0 diff --git a/tests/qemu-iotests/267.out b/tests/qemu-iotests/267.out new file mode 100644 index 0000000000..9d812e3c72 --- /dev/null +++ b/tests/qemu-iotests/267.out @@ -0,0 +1,182 @@ +QA output created by 267 + +=== No block devices at all === + +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 +Testing: +QEMU X.Y.Z monitor - type 'help' for more information +(qemu) savevm snap0 +Error: No block device can accept snapshots +(qemu) info snapshots +No available block device supports snapshots +(qemu) loadvm snap0 +Error: No block device supports snapshots +(qemu) quit + + +=== -drive if=none === + +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 +Testing: -drive driver=file,file=TEST_DIR/t.IMGFMT,if=none +QEMU X.Y.Z monitor - type 'help' for more information +(qemu) savevm snap0 +Error: Device 'none0' is writable but does not support snapshots +(qemu) info snapshots +No available block device supports snapshots +(qemu) loadvm snap0 +Error: Device 'none0' is writable but does not support snapshots +(qemu) quit + +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 +Testing: -drive driver=IMGFMT,file=TEST_DIR/t.IMGFMT,if=none +QEMU X.Y.Z monitor - type 'help' for more information +(qemu) savevm snap0 +(qemu) info snapshots +List of snapshots present on all disks: +ID TAG VM SIZE DATE VM CLOCK +-- snap0 SIZE yyyy-mm-dd hh:mm:ss 00:00:00.000 +(qemu) loadvm snap0 +(qemu) quit + +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 +Testing: -drive driver=IMGFMT,file=TEST_DIR/t.IMGFMT,if=none -device virtio-blk,drive=none0 +QEMU X.Y.Z monitor - type 'help' for more information +(qemu) savevm snap0 +(qemu) info snapshots +List of snapshots present on all disks: +ID TAG VM SIZE DATE VM CLOCK +-- snap0 SIZE yyyy-mm-dd hh:mm:ss 00:00:00.000 +(qemu) loadvm snap0 +(qemu) quit + + +=== -drive if=virtio === + +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 +Testing: -drive driver=file,file=TEST_DIR/t.IMGFMT,if=virtio +QEMU X.Y.Z monitor - type 'help' for more information +(qemu) savevm snap0 +Error: Device 'virtio0' is writable but does not support snapshots +(qemu) info snapshots +No available block device supports snapshots +(qemu) loadvm snap0 +Error: Device 'virtio0' is writable but does not support snapshots +(qemu) quit + +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 +Testing: -drive driver=IMGFMT,file=TEST_DIR/t.IMGFMT,if=virtio +QEMU X.Y.Z monitor - type 'help' for more information +(qemu) savevm snap0 +(qemu) info snapshots +List of snapshots present on all disks: +ID TAG VM SIZE DATE VM CLOCK +-- snap0 SIZE yyyy-mm-dd hh:mm:ss 00:00:00.000 +(qemu) loadvm snap0 +(qemu) quit + + +=== Simple -blockdev === + +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 +Testing: -blockdev driver=file,filename=TEST_DIR/t.IMGFMT,node-name=file +QEMU X.Y.Z monitor - type 'help' for more information +(qemu) savevm snap0 +Error: Device '' is writable but does not support snapshots +(qemu) info snapshots +No available block device supports snapshots +(qemu) loadvm snap0 +Error: Device '' is writable but does not support snapshots +(qemu) quit + +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 +Testing: -blockdev driver=file,filename=TEST_DIR/t.IMGFMT,node-name=file -blockdev driver=IMGFMT,file=file,node-name=fmt +QEMU X.Y.Z monitor - type 'help' for more information +(qemu) savevm snap0 +(qemu) info snapshots +List of snapshots present on all disks: +ID TAG VM SIZE DATE VM CLOCK +-- snap0 SIZE yyyy-mm-dd hh:mm:ss 00:00:00.000 +(qemu) loadvm snap0 +(qemu) quit + +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 +Testing: -blockdev driver=file,filename=TEST_DIR/t.IMGFMT,node-name=file -blockdev driver=raw,file=file,node-name=raw -blockdev driver=IMGFMT,file=raw,node-name=fmt +QEMU X.Y.Z monitor - type 'help' for more information +(qemu) savevm snap0 +(qemu) info snapshots +List of snapshots present on all disks: +ID TAG VM SIZE DATE VM CLOCK +-- snap0 SIZE yyyy-mm-dd hh:mm:ss 00:00:00.000 +(qemu) loadvm snap0 +(qemu) quit + + +=== -blockdev with a filter on top === + +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 +Testing: -blockdev driver=file,filename=TEST_DIR/t.IMGFMT,node-name=file -blockdev driver=IMGFMT,file=file,node-name=fmt -blockdev driver=copy-on-read,file=fmt,node-name=filter +QEMU X.Y.Z monitor - type 'help' for more information +(qemu) savevm snap0 +(qemu) info snapshots +List of snapshots present on all disks: +ID TAG VM SIZE DATE VM CLOCK +-- snap0 SIZE yyyy-mm-dd hh:mm:ss 00:00:00.000 +(qemu) loadvm snap0 +(qemu) quit + + +=== -blockdev with a backing file === + +Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=134217728 +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 backing_file=TEST_DIR/t.IMGFMT.base +Testing: -blockdev driver=file,filename=TEST_DIR/t.IMGFMT.base,node-name=backing-file -blockdev driver=file,filename=TEST_DIR/t.IMGFMT,node-name=file -blockdev driver=IMGFMT,file=file,backing=backing-file,node-name=fmt +QEMU X.Y.Z monitor - type 'help' for more information +(qemu) savevm snap0 +(qemu) info snapshots +List of snapshots present on all disks: +ID TAG VM SIZE DATE VM CLOCK +-- snap0 SIZE yyyy-mm-dd hh:mm:ss 00:00:00.000 +(qemu) loadvm snap0 +(qemu) quit + +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 backing_file=TEST_DIR/t.IMGFMT.base +Testing: -blockdev driver=file,filename=TEST_DIR/t.IMGFMT.base,node-name=backing-file -blockdev driver=IMGFMT,file=backing-file,node-name=backing-fmt -blockdev driver=file,filename=TEST_DIR/t.IMGFMT,node-name=file -blockdev driver=IMGFMT,file=file,backing=backing-fmt,node-name=fmt +QEMU X.Y.Z monitor - type 'help' for more information +(qemu) savevm snap0 +(qemu) info snapshots +List of snapshots present on all disks: +ID TAG VM SIZE DATE VM CLOCK +-- snap0 SIZE yyyy-mm-dd hh:mm:ss 00:00:00.000 +(qemu) loadvm snap0 +(qemu) quit + +Internal snapshots on overlay: +Snapshot list: +ID TAG VM SIZE DATE VM CLOCK +1 snap0 SIZE yyyy-mm-dd hh:mm:ss 00:00:00.000 +Internal snapshots on backing file: + +=== -blockdev with NBD server on the backing file === + +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 backing_file=TEST_DIR/t.IMGFMT.base +Testing: -blockdev driver=file,filename=TEST_DIR/t.IMGFMT.base,node-name=backing-file -blockdev driver=IMGFMT,file=backing-file,node-name=backing-fmt -blockdev driver=file,filename=TEST_DIR/t.IMGFMT,node-name=file -blockdev driver=IMGFMT,file=file,backing=backing-fmt,node-name=fmt +QEMU X.Y.Z monitor - type 'help' for more information +(qemu) nbd_server_start unix:TEST_DIR/nbd +(qemu) nbd_server_add -w backing-fmt +(qemu) savevm snap0 +(qemu) info snapshots +List of snapshots present on all disks: +ID TAG VM SIZE DATE VM CLOCK +-- snap0 SIZE yyyy-mm-dd hh:mm:ss 00:00:00.000 +(qemu) loadvm snap0 +(qemu) quit + +Internal snapshots on overlay: +Snapshot list: +ID TAG VM SIZE DATE VM CLOCK +1 snap0 SIZE yyyy-mm-dd hh:mm:ss 00:00:00.000 +Internal snapshots on backing file: +Snapshot list: +ID TAG VM SIZE DATE VM CLOCK +1 snap0 SIZE yyyy-mm-dd hh:mm:ss 00:00:00.000 +*** done diff --git a/tests/qemu-iotests/common.filter b/tests/qemu-iotests/common.filter index 35fddc746f..67fd5f4e41 100644 --- a/tests/qemu-iotests/common.filter +++ b/tests/qemu-iotests/common.filter @@ -19,12 +19,15 @@ # standard filters # -# ctime(3) dates -# _filter_date() { - $SED \ - -e 's/[A-Z][a-z][a-z] [A-z][a-z][a-z] *[0-9][0-9]* [0-9][0-9]:[0-9][0-9]:[0-9][0-9] [0-9][0-9][0-9][0-9]$/DATE/' + $SED -re 's/[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}/yyyy-mm-dd hh:mm:ss/' +} + +_filter_vmstate_size() +{ + $SED -r -e 's/[0-9. ]{5} [KMGT]iB/ SIZE/' \ + -e 's/[0-9. ]{5} B/ SIZE/' } _filter_generated_node_ids() diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group index 3660a741f2..8bc2f3857d 100644 --- a/tests/qemu-iotests/group +++ b/tests/qemu-iotests/group @@ -273,3 +273,4 @@ 256 rw quick 265 rw auto quick 266 rw quick +267 rw auto quick snapshot -- generated by git-patchbot for /home/xen/git/qemu-xen.git#staging-4.13
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |