Loading tests/qemu-iotests/085 +96 −6 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 Loading Loading @@ -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 Loading @@ -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 Loading Loading @@ -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 Loading tests/qemu-iotests/085.out +32 −2 Original line number Diff line number Diff line Loading @@ -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 === Loading @@ -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 Loading @@ -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 Loading
tests/qemu-iotests/085 +96 −6 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 Loading Loading @@ -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 Loading @@ -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 Loading Loading @@ -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 Loading
tests/qemu-iotests/085.out +32 −2 Original line number Diff line number Diff line Loading @@ -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 === Loading @@ -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 Loading @@ -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