161 3.8 KB
Newer Older
1 2
#!/bin/bash
#
3
# Test reopening a backing image after block-stream and block-commit
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
#
# Copyright (C) 2018 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
# 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/>.
#

# creator
owner=berto@igalia.com

seq=`basename $0`
echo "QA output created by $seq"

here=`pwd`
status=1	# failure is the default!

_cleanup()
{
    _cleanup_test_img
    rm -f "$TEST_IMG.base"
    rm -f "$TEST_IMG.int"
}
trap "_cleanup; exit \$status" 0 1 2 3 15

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

# Any format implementing BlockDriver.bdrv_change_backing_file
_supported_fmt qcow2 qed
_supported_proto file
_supported_os Linux

IMG_SIZE=1M

# Create the images
TEST_IMG="$TEST_IMG.base" _make_test_img $IMG_SIZE | _filter_imgfmt
TEST_IMG="$TEST_IMG.int" _make_test_img -b "$TEST_IMG.base" | _filter_imgfmt
_make_test_img -b "$TEST_IMG.int" | _filter_imgfmt

# First test: reopen $TEST.IMG changing the detect-zeroes option on
# its backing file ($TEST_IMG.int).
echo
echo "*** Change an option on the backing file"
echo
_launch_qemu -drive if=none,file="${TEST_IMG}"
_send_qemu_cmd $QEMU_HANDLE \
    "{ 'execute': 'qmp_capabilities' }" \
    'return'

_send_qemu_cmd $QEMU_HANDLE \
    "{ 'execute': 'human-monitor-command',
       'arguments': { 'command-line':
                      'qemu-io none0 \"reopen -o backing.detect-zeroes=on\"' } }" \
    "return"

_cleanup_qemu

# Second test: stream $TEST_IMG.base into $TEST_IMG.int and then
# reopen $TEST.IMG changing the detect-zeroes option on its new
# backing file ($TEST_IMG.base).
echo
echo "*** Stream and then change an option on the backing file"
echo
_launch_qemu -drive if=none,file="${TEST_IMG}"
_send_qemu_cmd $QEMU_HANDLE \
    "{ 'execute': 'qmp_capabilities' }" \
    'return'

_send_qemu_cmd $QEMU_HANDLE \
    "{ 'execute': 'block-stream', \
       'arguments': { 'device': 'none0',
                      'base': '${TEST_IMG}.base' } }" \
    'return'

# Wait for block-stream to finish
sleep 0.5

_send_qemu_cmd $QEMU_HANDLE \
    "{ 'execute': 'human-monitor-command',
       'arguments': { 'command-line':
                      'qemu-io none0 \"reopen -o backing.detect-zeroes=on\"' } }" \
    "return"

_cleanup_qemu

101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
# Third test: commit $TEST_IMG.int into $TEST_IMG.base and then reopen
# $TEST.IMG changing the detect-zeroes option on its new backing file
# ($TEST_IMG.base).
echo
echo "*** Commit and then change an option on the backing file"
echo
# Create the images again
TEST_IMG="$TEST_IMG.base" _make_test_img $IMG_SIZE | _filter_imgfmt
TEST_IMG="$TEST_IMG.int" _make_test_img -b "$TEST_IMG.base" | _filter_imgfmt
_make_test_img -b "$TEST_IMG.int" | _filter_imgfmt

_launch_qemu -drive if=none,file="${TEST_IMG}"
_send_qemu_cmd $QEMU_HANDLE \
    "{ 'execute': 'qmp_capabilities' }" \
    'return'

_send_qemu_cmd $QEMU_HANDLE \
    "{ 'execute': 'block-commit', \
       'arguments': { 'device': 'none0',
                      'top': '${TEST_IMG}.int' } }" \
    'return'

# Wait for block-commit to finish
sleep 0.5

_send_qemu_cmd $QEMU_HANDLE \
    "{ 'execute': 'human-monitor-command',
       'arguments': { 'command-line':
                      'qemu-io none0 \"reopen -o backing.detect-zeroes=on\"' } }" \
    "return"

_cleanup_qemu

134 135 136 137
# success, all done
echo "*** done"
rm -f $seq.full
status=0