[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-block] [PATCH v7 5/5] block: add tests for the 'blockdev-snaps
From: |
Jeff Cody |
Subject: |
Re: [Qemu-block] [PATCH v7 5/5] block: add tests for the 'blockdev-snapshot' command |
Date: |
Tue, 13 Oct 2015 18:54:36 -0400 |
User-agent: |
Mutt/1.5.21 (2010-09-15) |
On Mon, Oct 12, 2015 at 12:16:17PM +0300, Alberto Garcia wrote:
> Signed-off-by: Alberto Garcia <address@hidden>
> Reviewed-by: Max Reitz <address@hidden>
> ---
> 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 <address@hidden>
- [Qemu-block] [PATCH v7 0/5] Add 'blockdev-snapshot' command, Alberto Garcia, 2015/10/12
- [Qemu-block] [PATCH v7 3/5] block: support passing 'backing': '' to 'blockdev-add', Alberto Garcia, 2015/10/12
- [Qemu-block] [PATCH v7 1/5] block: check for existing device IDs in external_snapshot_prepare(), Alberto Garcia, 2015/10/12
- [Qemu-block] [PATCH v7 4/5] block: add a 'blockdev-snapshot' QMP command, Alberto Garcia, 2015/10/12
- [Qemu-block] [PATCH v7 5/5] block: add tests for the 'blockdev-snapshot' command, Alberto Garcia, 2015/10/12
- Re: [Qemu-block] [PATCH v7 5/5] block: add tests for the 'blockdev-snapshot' command,
Jeff Cody <=
- [Qemu-block] [PATCH v7 2/5] block: rename BlockdevSnapshot to BlockdevSnapshotSync, Alberto Garcia, 2015/10/15