Commit b1f6a8e1 authored by Kevin Wolf's avatar Kevin Wolf
Browse files

iotests: Test multiple blockdev-snapshot calls



Test that doing a second blockdev-snapshot doesn't make the first
overlay's backing file go away.

Signed-off-by: default avatarKevin Wolf <kwolf@redhat.com>
Reviewed-by: default avatarPeter Krempa <pkrempa@redhat.com>
parent ae0f57f0
Loading
Loading
Loading
Loading

tests/qemu-iotests/273

0 → 100755
+76 −0
Original line number Diff line number Diff line
#!/usr/bin/env bash
#
# Test multiple blockdev-snapshot calls with 'backing': null
#
# 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/>.
#

seq=$(basename "$0")
echo "QA output created by $seq"

status=1	# failure is the default!

_cleanup()
{
    _cleanup_test_img
}
trap "_cleanup; exit \$status" 0 1 2 3 15

# get standard environment, filters and checks
. ./common.rc
. ./common.filter

# This is a qcow2 regression test
_supported_fmt qcow2
_supported_proto file
_supported_os Linux

do_run_qemu()
{
    echo Testing: "$@"
    $QEMU -nographic -qmp-pretty stdio -nodefaults "$@"
    echo
}

run_qemu()
{
    do_run_qemu "$@" 2>&1 | _filter_testdir | _filter_qemu | _filter_qmp |
        _filter_generated_node_ids | _filter_imgfmt | _filter_actual_image_size
}

TEST_IMG="$TEST_IMG.base" _make_test_img 64M
TEST_IMG="$TEST_IMG.mid" _make_test_img -b "$TEST_IMG.base"
_make_test_img -b "$TEST_IMG.mid"

run_qemu \
    -blockdev file,node-name=base,filename="$TEST_IMG.base" \
     -blockdev file,node-name=midf,filename="$TEST_IMG.mid" \
     -blockdev '{"driver":"qcow2","node-name":"mid","file":"midf","backing":null}' \
     -blockdev file,node-name=topf,filename="$TEST_IMG" \
     -blockdev '{"driver":"qcow2","file":"topf","node-name":"top","backing":null}' \
<<EOF
{"execute":"qmp_capabilities"}
{"execute":"blockdev-snapshot","arguments":{"node":"base","overlay":"mid"}}
{"execute":"blockdev-snapshot","arguments":{"node":"mid","overlay":"top"}}
{"execute":"query-named-block-nodes"}
{"execute":"x-debug-query-block-graph"}
{"execute":"quit"}
EOF

# success, all done
echo "*** done"
rm -f $seq.full
status=0
+337 −0
Original line number Diff line number Diff line
QA output created by 273
Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=67108864
Formatting 'TEST_DIR/t.IMGFMT.mid', fmt=IMGFMT size=67108864 backing_file=TEST_DIR/t.IMGFMT.base
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 backing_file=TEST_DIR/t.IMGFMT.mid
Testing: -blockdev file,node-name=base,filename=TEST_DIR/t.IMGFMT.base -blockdev file,node-name=midf,filename=TEST_DIR/t.IMGFMT.mid -blockdev {"driver":"IMGFMT","node-name":"mid","file":"midf","backing":null} -blockdev file,node-name=topf,filename=TEST_DIR/t.IMGFMT -blockdev {"driver":"IMGFMT","file":"topf","node-name":"top","backing":null}
{
    QMP_VERSION
}
{
    "return": {
    }
}
{
    "return": {
    }
}
{
    "return": {
    }
}
{
    "return": [
        {
            "iops_rd": 0,
            "detect_zeroes": "off",
            "image": {
                "backing-image": {
                    "backing-image": {
                        "virtual-size": 197120,
                        "filename": "TEST_DIR/t.IMGFMT.base",
                        "format": "file",
                        "actual-size": SIZE,
                        "dirty-flag": false
                    },
                    "backing-filename-format": "file",
                    "virtual-size": 67108864,
                    "filename": "TEST_DIR/t.IMGFMT.mid",
                    "cluster-size": 65536,
                    "format": "IMGFMT",
                    "actual-size": SIZE,
                    "format-specific": {
                        "type": "IMGFMT",
                        "data": {
                            "compat": "1.1",
                            "lazy-refcounts": false,
                            "refcount-bits": 16,
                            "corrupt": false
                        }
                    },
                    "full-backing-filename": "TEST_DIR/t.IMGFMT.base",
                    "backing-filename": "TEST_DIR/t.IMGFMT.base",
                    "dirty-flag": false
                },
                "backing-filename-format": "IMGFMT",
                "virtual-size": 67108864,
                "filename": "TEST_DIR/t.IMGFMT",
                "cluster-size": 65536,
                "format": "IMGFMT",
                "actual-size": SIZE,
                "format-specific": {
                    "type": "IMGFMT",
                    "data": {
                        "compat": "1.1",
                        "lazy-refcounts": false,
                        "refcount-bits": 16,
                        "corrupt": false
                    }
                },
                "full-backing-filename": "TEST_DIR/t.IMGFMT.mid",
                "backing-filename": "TEST_DIR/t.IMGFMT.mid",
                "dirty-flag": false
            },
            "iops_wr": 0,
            "ro": false,
            "node-name": "top",
            "backing_file_depth": 2,
            "drv": "IMGFMT",
            "iops": 0,
            "bps_wr": 0,
            "write_threshold": 0,
            "backing_file": "TEST_DIR/t.IMGFMT.mid",
            "encrypted": false,
            "bps": 0,
            "bps_rd": 0,
            "cache": {
                "no-flush": false,
                "direct": false,
                "writeback": true
            },
            "file": "TEST_DIR/t.IMGFMT",
            "encryption_key_missing": false
        },
        {
            "iops_rd": 0,
            "detect_zeroes": "off",
            "image": {
                "virtual-size": 197120,
                "filename": "TEST_DIR/t.IMGFMT",
                "format": "file",
                "actual-size": SIZE,
                "dirty-flag": false
            },
            "iops_wr": 0,
            "ro": false,
            "node-name": "topf",
            "backing_file_depth": 0,
            "drv": "file",
            "iops": 0,
            "bps_wr": 0,
            "write_threshold": 0,
            "encrypted": false,
            "bps": 0,
            "bps_rd": 0,
            "cache": {
                "no-flush": false,
                "direct": false,
                "writeback": true
            },
            "file": "TEST_DIR/t.IMGFMT",
            "encryption_key_missing": false
        },
        {
            "iops_rd": 0,
            "detect_zeroes": "off",
            "image": {
                "backing-image": {
                    "virtual-size": 197120,
                    "filename": "TEST_DIR/t.IMGFMT.base",
                    "format": "file",
                    "actual-size": SIZE,
                    "dirty-flag": false
                },
                "backing-filename-format": "file",
                "virtual-size": 67108864,
                "filename": "TEST_DIR/t.IMGFMT.mid",
                "cluster-size": 65536,
                "format": "IMGFMT",
                "actual-size": SIZE,
                "format-specific": {
                    "type": "IMGFMT",
                    "data": {
                        "compat": "1.1",
                        "lazy-refcounts": false,
                        "refcount-bits": 16,
                        "corrupt": false
                    }
                },
                "full-backing-filename": "TEST_DIR/t.IMGFMT.base",
                "backing-filename": "TEST_DIR/t.IMGFMT.base",
                "dirty-flag": false
            },
            "iops_wr": 0,
            "ro": true,
            "node-name": "mid",
            "backing_file_depth": 1,
            "drv": "IMGFMT",
            "iops": 0,
            "bps_wr": 0,
            "write_threshold": 0,
            "backing_file": "TEST_DIR/t.IMGFMT.base",
            "encrypted": false,
            "bps": 0,
            "bps_rd": 0,
            "cache": {
                "no-flush": false,
                "direct": false,
                "writeback": true
            },
            "file": "TEST_DIR/t.IMGFMT.mid",
            "encryption_key_missing": false
        },
        {
            "iops_rd": 0,
            "detect_zeroes": "off",
            "image": {
                "virtual-size": 197120,
                "filename": "TEST_DIR/t.IMGFMT.mid",
                "format": "file",
                "actual-size": SIZE,
                "dirty-flag": false
            },
            "iops_wr": 0,
            "ro": false,
            "node-name": "midf",
            "backing_file_depth": 0,
            "drv": "file",
            "iops": 0,
            "bps_wr": 0,
            "write_threshold": 0,
            "encrypted": false,
            "bps": 0,
            "bps_rd": 0,
            "cache": {
                "no-flush": false,
                "direct": false,
                "writeback": true
            },
            "file": "TEST_DIR/t.IMGFMT.mid",
            "encryption_key_missing": false
        },
        {
            "iops_rd": 0,
            "detect_zeroes": "off",
            "image": {
                "virtual-size": 197120,
                "filename": "TEST_DIR/t.IMGFMT.base",
                "format": "file",
                "actual-size": SIZE,
                "dirty-flag": false
            },
            "iops_wr": 0,
            "ro": true,
            "node-name": "base",
            "backing_file_depth": 0,
            "drv": "file",
            "iops": 0,
            "bps_wr": 0,
            "write_threshold": 0,
            "encrypted": false,
            "bps": 0,
            "bps_rd": 0,
            "cache": {
                "no-flush": false,
                "direct": false,
                "writeback": true
            },
            "file": "TEST_DIR/t.IMGFMT.base",
            "encryption_key_missing": false
        }
    ]
}
{
    "return": {
        "edges": [
            {
                "name": "file",
                "parent": 5,
                "shared-perm": [
                    "graph-mod",
                    "write-unchanged",
                    "consistent-read"
                ],
                "perm": [
                    "resize",
                    "write",
                    "consistent-read"
                ],
                "child": 4
            },
            {
                "name": "backing",
                "parent": 5,
                "shared-perm": [
                    "graph-mod",
                    "resize",
                    "write-unchanged",
                    "write",
                    "consistent-read"
                ],
                "perm": [
                ],
                "child": 3
            },
            {
                "name": "file",
                "parent": 3,
                "shared-perm": [
                    "graph-mod",
                    "write-unchanged",
                    "consistent-read"
                ],
                "perm": [
                    "consistent-read"
                ],
                "child": 2
            },
            {
                "name": "backing",
                "parent": 3,
                "shared-perm": [
                    "graph-mod",
                    "resize",
                    "write-unchanged",
                    "write",
                    "consistent-read"
                ],
                "perm": [
                ],
                "child": 1
            }
        ],
        "nodes": [
            {
                "name": "top",
                "type": "block-driver",
                "id": 5
            },
            {
                "name": "topf",
                "type": "block-driver",
                "id": 4
            },
            {
                "name": "mid",
                "type": "block-driver",
                "id": 3
            },
            {
                "name": "midf",
                "type": "block-driver",
                "id": 2
            },
            {
                "name": "base",
                "type": "block-driver",
                "id": 1
            }
        ]
    }
}
{
    "return": {
    }
}
{
    "timestamp": {
        "seconds":  TIMESTAMP,
        "microseconds":  TIMESTAMP
    },
    "event": "SHUTDOWN",
    "data": {
        "guest": false,
        "reason": "host-qmp-quit"
    }
}

*** done
+1 −0
Original line number Diff line number Diff line
@@ -284,3 +284,4 @@
268 rw auto quick
270 rw backing quick
272 rw
273 backing quick