1#!/usr/bin/env bash 2# 3# Test automatic deletion of BDSes created by -drive/drive_add 4# 5# Copyright (C) 2013 Red Hat, Inc. 6# 7# This program is free software; you can redistribute it and/or modify 8# it under the terms of the GNU General Public License as published by 9# the Free Software Foundation; either version 2 of the License, or 10# (at your option) any later version. 11# 12# This program is distributed in the hope that it will be useful, 13# but WITHOUT ANY WARRANTY; without even the implied warranty of 14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15# GNU General Public License for more details. 16# 17# You should have received a copy of the GNU General Public License 18# along with this program. If not, see <http://www.gnu.org/licenses/>. 19# 20 21# creator 22owner=kwolf@redhat.com 23 24seq=`basename $0` 25echo "QA output created by $seq" 26 27status=1 # failure is the default! 28 29# get standard environment, filters and checks 30. ./common.rc 31. ./common.filter 32 33_supported_fmt qcow2 34_supported_proto file 35# Because anything other than 16 would change the output of query-block, 36# and external data files would change the output of 37# query-named-block-nodes 38_unsupported_imgopts 'refcount_bits=\([^1]\|.\([^6]\|$\)\)' data_file 39 40do_run_qemu() 41{ 42 echo Testing: "$@" 43 $QEMU -nographic -qmp-pretty stdio -serial none "$@" 44 echo 45} 46 47# Remove QMP events from (pretty-printed) output. Doesn't handle 48# nested dicts correctly, but we don't get any of those in this test. 49_filter_qmp_events() 50{ 51 tr '\n' '\t' | sed -e \ 52 's/{\s*"timestamp":\s*{[^}]*},\s*"event":[^,}]*\(,\s*"data":\s*{[^}]*}\)\?\s*}\s*//g' \ 53 | tr '\t' '\n' 54} 55 56run_qemu() 57{ 58 do_run_qemu "$@" 2>&1 | _filter_testdir | _filter_qmp | _filter_qemu \ 59 | _filter_actual_image_size \ 60 | _filter_generated_node_ids | _filter_qmp_events \ 61 | _filter_img_info 62} 63 64size=128M 65 66_make_test_img $size 67 68echo 69echo === -drive/-device and device_del === 70echo 71 72run_qemu -drive file=$TEST_IMG,format=$IMGFMT,if=none,id=disk -device virtio-blk,drive=disk,id=virtio0 <<EOF 73{ "execute": "qmp_capabilities" } 74{ "execute": "query-block" } 75{ "execute": "device_del", "arguments": { "id": "virtio0" } } 76{ "execute": "system_reset" } 77{ "execute": "query-block" } 78{ "execute": "quit" } 79EOF 80 81echo 82echo === -drive/device_add and device_del === 83echo 84 85run_qemu -drive file=$TEST_IMG,format=$IMGFMT,if=none,id=disk <<EOF 86{ "execute": "qmp_capabilities" } 87{ "execute": "query-block" } 88{ "execute": "device_add", 89 "arguments": { "driver": "virtio-blk", "drive": "disk", 90 "id": "virtio0" } } 91{ "execute": "device_del", "arguments": { "id": "virtio0" } } 92{ "execute": "system_reset" } 93{ "execute": "query-block" } 94{ "execute": "quit" } 95EOF 96 97echo 98echo === drive_add/device_add and device_del === 99echo 100 101run_qemu <<EOF 102{ "execute": "qmp_capabilities" } 103{ "execute": "human-monitor-command", 104 "arguments": { "command-line": "drive_add 0 file=$TEST_IMG,format=$IMGFMT,if=none,id=disk" } } 105{ "execute": "query-block" } 106{ "execute": "device_add", 107 "arguments": { "driver": "virtio-blk", "drive": "disk", 108 "id": "virtio0" } } 109{ "execute": "device_del", "arguments": { "id": "virtio0" } } 110{ "execute": "system_reset" } 111{ "execute": "query-block" } 112{ "execute": "quit" } 113EOF 114 115echo 116echo === blockdev_add/device_add and device_del === 117echo 118 119run_qemu <<EOF 120{ "execute": "qmp_capabilities" } 121{ "execute": "blockdev-add", 122 "arguments": { 123 "driver": "$IMGFMT", 124 "node-name": "disk", 125 "file": { 126 "driver": "file", 127 "filename": "$TEST_IMG" 128 } 129 } 130 } 131{ "execute": "query-named-block-nodes" } 132{ "execute": "device_add", 133 "arguments": { "driver": "virtio-blk", "drive": "disk", 134 "id": "virtio0" } } 135{ "execute": "device_del", "arguments": { "id": "virtio0" } } 136{ "execute": "system_reset" } 137{ "execute": "query-named-block-nodes" } 138{ "execute": "quit" } 139EOF 140 141echo 142echo === Empty drive with -device and device_del === 143echo 144 145run_qemu -device virtio-scsi -device scsi-cd,id=cd0 <<EOF 146{ "execute": "qmp_capabilities" } 147{ "execute": "query-block" } 148{ "execute": "device_del", "arguments": { "id": "cd0" } } 149{ "execute": "system_reset" } 150{ "execute": "query-block" } 151{ "execute": "quit" } 152EOF 153 154# success, all done 155echo "*** done" 156rm -f $seq.full 157status=0 158