1#!/bin/bash 2# 3# Test unsupported blockdev-add cases 4# 5# Copyright (C) 2014 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 27here=`pwd` 28status=1 # failure is the default! 29 30# get standard environment, filters and checks 31. ./common.rc 32. ./common.filter 33 34_supported_fmt qcow2 35_supported_proto file 36_supported_os Linux 37 38function do_run_qemu() 39{ 40 echo Testing: "$@" 41 $QEMU -nographic -qmp stdio -serial none "$@" 42 echo 43} 44 45function run_qemu() 46{ 47 do_run_qemu "$@" 2>&1 | _filter_testdir | _filter_qmp \ 48 | _filter_qemu | _filter_imgfmt \ 49 | sed -e 's/\("actual-size":\s*\)[0-9]\+/\1SIZE/g' 50} 51 52size=128M 53 54_make_test_img $size 55 56echo 57echo === Missing ID and node-name === 58echo 59 60run_qemu <<EOF 61{ "execute": "qmp_capabilities" } 62{ "execute": "blockdev-add", 63 "arguments": { 64 "driver": "$IMGFMT", 65 "file": { 66 "driver": "file", 67 "filename": "$TEST_IMG" 68 } 69 } 70 } 71{ "execute": "quit" } 72EOF 73 74echo 75echo === Duplicate ID === 76echo 77 78run_qemu -drive driver=$IMGFMT,id=disk,node-name=test-node,file="$TEST_IMG" <<EOF 79{ "execute": "qmp_capabilities" } 80{ "execute": "blockdev-add", 81 "arguments": { 82 "driver": "$IMGFMT", 83 "node-name": "disk", 84 "file": { 85 "driver": "null-co" 86 } 87 } 88 } 89{ "execute": "blockdev-add", 90 "arguments": { 91 "driver": "$IMGFMT", 92 "node-name": "test-node", 93 "file": { 94 "driver": "null-co" 95 } 96 } 97 } 98{ "execute": "quit" } 99EOF 100 101echo 102echo === aio=native without O_DIRECT === 103echo 104 105run_qemu <<EOF 106{ "execute": "qmp_capabilities" } 107{ "execute": "blockdev-add", 108 "arguments": { 109 "driver": "$IMGFMT", 110 "node-name": "disk", 111 "file": { 112 "driver": "file", 113 "filename": "$TEST_IMG", 114 "aio": "native" 115 } 116 } 117 } 118{ "execute": "quit" } 119EOF 120 121echo 122echo === Encrypted image QCow === 123echo 124 125_make_test_img --object secret,id=sec0,data=123456 -o encryption=on,encrypt.key-secret=sec0 $size 126run_qemu <<EOF 127{ "execute": "qmp_capabilities" } 128{ "execute": "object-add", 129 "arguments": { 130 "qom-type": "secret", 131 "id": "sec0", 132 "props": { 133 "data": "123456" 134 } 135 } 136} 137{ "execute": "blockdev-add", 138 "arguments": { 139 "driver": "$IMGFMT", 140 "node-name": "disk", 141 "file": { 142 "driver": "file", 143 "filename": "$TEST_IMG" 144 }, 145 "encrypt": { 146 "format": "aes", 147 "key-secret": "sec0" 148 } 149 } 150 } 151{ "execute": "quit" } 152EOF 153 154echo 155echo === Encrypted image LUKS === 156echo 157 158_make_test_img --object secret,id=sec0,data=123456 -o encrypt.format=luks,encrypt.key-secret=sec0 $size 159run_qemu <<EOF 160{ "execute": "qmp_capabilities" } 161{ "execute": "object-add", 162 "arguments": { 163 "qom-type": "secret", 164 "id": "sec0", 165 "props": { 166 "data": "123456" 167 } 168 } 169} 170{ "execute": "blockdev-add", 171 "arguments": { 172 "driver": "$IMGFMT", 173 "node-name": "disk", 174 "file": { 175 "driver": "file", 176 "filename": "$TEST_IMG" 177 }, 178 "encrypt": { 179 "format": "luks", 180 "key-secret": "sec0" 181 } 182 } 183 } 184{ "execute": "quit" } 185EOF 186 187echo 188echo === Missing driver === 189echo 190 191_make_test_img --object secret,id=sec0,data=123456 -o encryption=on,encrypt.key-secret=sec0 $size 192run_qemu -S <<EOF 193{ "execute": "qmp_capabilities" } 194{ "execute": "blockdev-add", 195 "arguments": { 196 "node-name": "disk" 197 } 198 } 199{ "execute": "quit" } 200EOF 201 202# success, all done 203echo "*** done" 204rm -f $seq.full 205status=0 206