All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jeff Cody <jcody@redhat.com>
To: Alberto Garcia <berto@igalia.com>
Cc: Kevin Wolf <kwolf@redhat.com>,
	Stefan Hajnoczi <stefanha@redhat.com>,
	qemu-devel@nongnu.org, qemu-block@nongnu.org,
	Max Reitz <mreitz@redhat.com>
Subject: Re: [Qemu-devel] [Qemu-block] [PATCH v7 5/5] block: add tests for the 'blockdev-snapshot' command
Date: Tue, 13 Oct 2015 18:54:36 -0400	[thread overview]
Message-ID: <20151013225436.GR11943@localhost.localdomain> (raw)
In-Reply-To: <4dff93e49d86450fe64d7accbd936be5a7f6b63c.1444640617.git.berto@igalia.com>

On Mon, Oct 12, 2015 at 12:16:17PM +0300, Alberto Garcia wrote:
> Signed-off-by: Alberto Garcia <berto@igalia.com>
> Reviewed-by: Max Reitz <mreitz@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 <jcody@redhat.com>

      reply	other threads:[~2015-10-13 22:54 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-10-12  9:16 [Qemu-devel] [PATCH v7 0/5] Add 'blockdev-snapshot' command Alberto Garcia
2015-10-12  9:16 ` [Qemu-devel] [PATCH v7 1/5] block: check for existing device IDs in external_snapshot_prepare() Alberto Garcia
2015-10-12 20:20   ` Max Reitz
2015-10-13 22:45   ` [Qemu-devel] [Qemu-block] " Jeff Cody
2015-10-12  9:16 ` [Qemu-devel] [PATCH v7 2/5] block: rename BlockdevSnapshot to BlockdevSnapshotSync Alberto Garcia
2015-10-13 22:47   ` [Qemu-devel] [Qemu-block] " Jeff Cody
2015-10-12  9:16 ` [Qemu-devel] [PATCH v7 3/5] block: support passing 'backing': '' to 'blockdev-add' Alberto Garcia
2015-10-13 22:47   ` [Qemu-devel] [Qemu-block] " Jeff Cody
2015-10-12  9:16 ` [Qemu-devel] [PATCH v7 4/5] block: add a 'blockdev-snapshot' QMP command Alberto Garcia
2015-10-12 20:29   ` Max Reitz
2015-10-13  5:45     ` Alberto Garcia
2015-10-12  9:16 ` [Qemu-devel] [PATCH v7 5/5] block: add tests for the 'blockdev-snapshot' command Alberto Garcia
2015-10-13 22:54   ` Jeff Cody [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20151013225436.GR11943@localhost.localdomain \
    --to=jcody@redhat.com \
    --cc=berto@igalia.com \
    --cc=kwolf@redhat.com \
    --cc=mreitz@redhat.com \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.