On Mon, Oct 12, 2015 at 12:16:17PM +0300, Alberto Garcia wrote: > Signed-off-by: Alberto Garcia <be...@igalia.com> > Reviewed-by: Max Reitz <mre...@redhat.com> > --- > tests/qemu-iotests/085 | 102 > ++++++++++++++++++++++++++++++++++++++++++--- > tests/qemu-iotests/085.out | 34 ++++++++++++++- > 2 files changed, 128 insertions(+), 8 deletions(-) > > diff --git a/tests/qemu-iotests/085 b/tests/qemu-iotests/085 > index 56cd6f8..9484117 100755 > --- a/tests/qemu-iotests/085 > +++ b/tests/qemu-iotests/085 > @@ -7,6 +7,7 @@ > # snapshots are performed. > # > # Copyright (C) 2014 Red Hat, Inc. > +# Copyright (C) 2015 Igalia, S.L. > # > # 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 > @@ -34,17 +35,17 @@ status=1 # failure is the default! > snapshot_virt0="snapshot-v0.qcow2" > snapshot_virt1="snapshot-v1.qcow2" > > -MAX_SNAPSHOTS=10 > +SNAPSHOTS=10 > > _cleanup() > { > _cleanup_qemu > - for i in $(seq 1 ${MAX_SNAPSHOTS}) > + for i in $(seq 1 ${SNAPSHOTS}) > do > rm -f "${TEST_DIR}/${i}-${snapshot_virt0}" > rm -f "${TEST_DIR}/${i}-${snapshot_virt1}" > done > - _cleanup_test_img > + rm -f "${TEST_IMG}.1" "${TEST_IMG}.2" > > } > trap "_cleanup; exit \$status" 0 1 2 3 15 > @@ -85,18 +86,50 @@ function create_group_snapshot() > _send_qemu_cmd $h "${cmd}" "return" > } > > +# ${1}: unique identifier for the snapshot filename > +# ${2}: true: open backing images; false: don't open them (default) > +function add_snapshot_image() > +{ > + if [ "${2}" = "true" ]; then > + extra_params="" > + else > + extra_params="'backing': '', " > + fi > + base_image="${TEST_DIR}/$((${1}-1))-${snapshot_virt0}" > + snapshot_file="${TEST_DIR}/${1}-${snapshot_virt0}" > + _make_test_img -b "${base_image}" "$size" > + mv "${TEST_IMG}" "${snapshot_file}" > + cmd="{ 'execute': 'blockdev-add', 'arguments': > + { 'options': > + { 'driver': 'qcow2', 'node-name': 'snap_"${1}"', > "${extra_params}" > + 'file': > + { 'driver': 'file', 'filename': '"${snapshot_file}"' } } } }" > + _send_qemu_cmd $h "${cmd}" "return" > +} > + > +# ${1}: unique identifier for the snapshot filename > +# ${2}: expected response, defaults to 'return' > +function blockdev_snapshot() > +{ > + cmd="{ 'execute': 'blockdev-snapshot', > + 'arguments': { 'node': 'virtio0', > + 'overlay':'snap_"${1}"' } }" > + _send_qemu_cmd $h "${cmd}" "${2:-return}" > +} > + > size=128M > > _make_test_img $size > -mv "${TEST_IMG}" "${TEST_IMG}.orig" > +mv "${TEST_IMG}" "${TEST_IMG}.1" > _make_test_img $size > +mv "${TEST_IMG}" "${TEST_IMG}.2" > > echo > echo === Running QEMU === > echo > > qemu_comm_method="qmp" > -_launch_qemu -drive file="${TEST_IMG}.orig",if=virtio -drive > file="${TEST_IMG}",if=virtio > +_launch_qemu -drive file="${TEST_IMG}.1",if=virtio -drive > file="${TEST_IMG}.2",if=virtio > h=$QEMU_HANDLE > > echo > @@ -105,6 +138,8 @@ echo > > _send_qemu_cmd $h "{ 'execute': 'qmp_capabilities' }" "return" > > +# Tests for the blockdev-snapshot-sync command > + > echo > echo === Create a single snapshot on virtio0 === > echo > @@ -132,11 +167,66 @@ echo > echo === Create several transactional group snapshots === > echo > > -for i in $(seq 2 ${MAX_SNAPSHOTS}) > +for i in $(seq 2 ${SNAPSHOTS}) > do > create_group_snapshot ${i} > done > > +# Tests for the blockdev-snapshot command > + > +echo > +echo === Create a couple of snapshots using blockdev-snapshot === > +echo > + > +SNAPSHOTS=$((${SNAPSHOTS}+1)) > +add_snapshot_image ${SNAPSHOTS} > +blockdev_snapshot ${SNAPSHOTS} > + > +SNAPSHOTS=$((${SNAPSHOTS}+1)) > +add_snapshot_image ${SNAPSHOTS} > +blockdev_snapshot ${SNAPSHOTS} > + > +echo > +echo === Invalid command - snapshot node used as active layer === > +echo > + > +blockdev_snapshot ${SNAPSHOTS} error > + > +_send_qemu_cmd $h "{ 'execute': 'blockdev-snapshot', > + 'arguments': { 'node':'virtio0', > + 'overlay':'virtio0' } > + }" "error" > + > +_send_qemu_cmd $h "{ 'execute': 'blockdev-snapshot', > + 'arguments': { 'node':'virtio0', > + 'overlay':'virtio1' } > + }" "error" > + > +echo > +echo === Invalid command - snapshot node used as backing hd === > +echo > + > +blockdev_snapshot $((${SNAPSHOTS}-1)) error > + > +echo > +echo === Invalid command - snapshot node has a backing image === > +echo > + > +SNAPSHOTS=$((${SNAPSHOTS}+1)) > +add_snapshot_image ${SNAPSHOTS} true > +blockdev_snapshot ${SNAPSHOTS} error > + > +echo > +echo === Invalid command - The node does not exist === > +echo > + > +blockdev_snapshot $((${SNAPSHOTS}+1)) error > + > +_send_qemu_cmd $h "{ 'execute': 'blockdev-snapshot', > + 'arguments': { 'node':'nodevice', > + 'overlay':'snap_"${SNAPSHOTS}"' } > + }" "error" > + > # success, all done > echo "*** done" > rm -f $seq.full > diff --git a/tests/qemu-iotests/085.out b/tests/qemu-iotests/085.out > index a6cf19e..52292ea 100644 > --- a/tests/qemu-iotests/085.out > +++ b/tests/qemu-iotests/085.out > @@ -11,7 +11,7 @@ Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 > > === Create a single snapshot on virtio0 === > > -Formatting 'TEST_DIR/1-snapshot-v0.qcow2', fmt=qcow2 size=134217728 > backing_file=TEST_DIR/t.qcow2.orig backing_fmt=qcow2 encryption=off > cluster_size=65536 lazy_refcounts=off refcount_bits=16 > +Formatting 'TEST_DIR/1-snapshot-v0.qcow2', fmt=qcow2 size=134217728 > backing_file=TEST_DIR/t.qcow2.1 backing_fmt=qcow2 encryption=off > cluster_size=65536 lazy_refcounts=off refcount_bits=16 > {"return": {}} > > === Invalid command - missing device and nodename === > @@ -26,7 +26,7 @@ Formatting 'TEST_DIR/1-snapshot-v0.qcow2', fmt=qcow2 > size=134217728 backing_file > === Create several transactional group snapshots === > > Formatting 'TEST_DIR/2-snapshot-v0.qcow2', fmt=qcow2 size=134217728 > backing_file=TEST_DIR/1-snapshot-v0.qcow2 backing_fmt=qcow2 encryption=off > cluster_size=65536 lazy_refcounts=off refcount_bits=16 > -Formatting 'TEST_DIR/2-snapshot-v1.qcow2', fmt=qcow2 size=134217728 > backing_file=TEST_DIR/t.qcow2 backing_fmt=qcow2 encryption=off > cluster_size=65536 lazy_refcounts=off refcount_bits=16 > +Formatting 'TEST_DIR/2-snapshot-v1.qcow2', fmt=qcow2 size=134217728 > backing_file=TEST_DIR/t.qcow2.2 backing_fmt=qcow2 encryption=off > cluster_size=65536 lazy_refcounts=off refcount_bits=16 > {"return": {}} > Formatting 'TEST_DIR/3-snapshot-v0.qcow2', fmt=qcow2 size=134217728 > backing_file=TEST_DIR/2-snapshot-v0.qcow2 backing_fmt=qcow2 encryption=off > cluster_size=65536 lazy_refcounts=off refcount_bits=16 > Formatting 'TEST_DIR/3-snapshot-v1.qcow2', fmt=qcow2 size=134217728 > backing_file=TEST_DIR/2-snapshot-v1.qcow2 backing_fmt=qcow2 encryption=off > cluster_size=65536 lazy_refcounts=off refcount_bits=16 > @@ -52,4 +52,34 @@ Formatting 'TEST_DIR/9-snapshot-v1.qcow2', fmt=qcow2 > size=134217728 backing_file > Formatting 'TEST_DIR/10-snapshot-v0.qcow2', fmt=qcow2 size=134217728 > backing_file=TEST_DIR/9-snapshot-v0.qcow2 backing_fmt=qcow2 encryption=off > cluster_size=65536 lazy_refcounts=off refcount_bits=16 > Formatting 'TEST_DIR/10-snapshot-v1.qcow2', fmt=qcow2 size=134217728 > backing_file=TEST_DIR/9-snapshot-v1.qcow2 backing_fmt=qcow2 encryption=off > cluster_size=65536 lazy_refcounts=off refcount_bits=16 > {"return": {}} > + > +=== Create a couple of snapshots using blockdev-snapshot === > + > +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 > backing_file=TEST_DIR/10-snapshot-v0.IMGFMT > +{"return": {}} > +{"return": {}} > +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 > backing_file=TEST_DIR/11-snapshot-v0.IMGFMT > +{"return": {}} > +{"return": {}} > + > +=== Invalid command - snapshot node used as active layer === > + > +{"error": {"class": "GenericError", "desc": "The snapshot is already in use > by virtio0"}} > +{"error": {"class": "GenericError", "desc": "The snapshot is already in use > by virtio0"}} > +{"error": {"class": "GenericError", "desc": "The snapshot is already in use > by virtio1"}} > + > +=== Invalid command - snapshot node used as backing hd === > + > +{"error": {"class": "GenericError", "desc": "Node 'snap_11' is busy: node is > used as backing hd of 'virtio0'"}} > + > +=== Invalid command - snapshot node has a backing image === > + > +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 > backing_file=TEST_DIR/12-snapshot-v0.IMGFMT > +{"return": {}} > +{"error": {"class": "GenericError", "desc": "The snapshot already has a > backing image"}} > + > +=== Invalid command - The node does not exist === > + > +{"error": {"class": "GenericError", "desc": "Cannot find device=snap_14 nor > node_name=snap_14"}} > +{"error": {"class": "GenericError", "desc": "Cannot find device=nodevice nor > node_name=nodevice"}} > *** done > -- > 2.6.1 > >
Reviewed-by: Jeff Cody <jc...@redhat.com>