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 | _filter_actual_image_size 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 105# Skip this test if AIO is not enabled in this build 106function run_qemu_filter_aio() 107{ 108 run_qemu "$@" | \ 109 sed -e 's/is not supported in this build/it requires cache.direct=on, which was not specified/' 110} 111 112run_qemu_filter_aio <<EOF 113{ "execute": "qmp_capabilities" } 114{ "execute": "blockdev-add", 115 "arguments": { 116 "driver": "$IMGFMT", 117 "node-name": "disk", 118 "file": { 119 "driver": "file", 120 "filename": "$TEST_IMG", 121 "aio": "native" 122 } 123 } 124 } 125{ "execute": "quit" } 126EOF 127 128echo 129echo === Encrypted image QCow === 130echo 131 132_make_test_img --object secret,id=sec0,data=123456 -o encryption=on,encrypt.key-secret=sec0 $size 133run_qemu <<EOF 134{ "execute": "qmp_capabilities" } 135{ "execute": "object-add", 136 "arguments": { 137 "qom-type": "secret", 138 "id": "sec0", 139 "props": { 140 "data": "123456" 141 } 142 } 143} 144{ "execute": "blockdev-add", 145 "arguments": { 146 "driver": "$IMGFMT", 147 "node-name": "disk", 148 "file": { 149 "driver": "file", 150 "filename": "$TEST_IMG" 151 }, 152 "encrypt": { 153 "format": "aes", 154 "key-secret": "sec0" 155 } 156 } 157 } 158{ "execute": "quit" } 159EOF 160 161echo 162echo === Encrypted image LUKS === 163echo 164 165_make_test_img --object secret,id=sec0,data=123456 -o encrypt.format=luks,encrypt.key-secret=sec0 $size 166run_qemu <<EOF 167{ "execute": "qmp_capabilities" } 168{ "execute": "object-add", 169 "arguments": { 170 "qom-type": "secret", 171 "id": "sec0", 172 "props": { 173 "data": "123456" 174 } 175 } 176} 177{ "execute": "blockdev-add", 178 "arguments": { 179 "driver": "$IMGFMT", 180 "node-name": "disk", 181 "file": { 182 "driver": "file", 183 "filename": "$TEST_IMG" 184 }, 185 "encrypt": { 186 "format": "luks", 187 "key-secret": "sec0" 188 } 189 } 190 } 191{ "execute": "quit" } 192EOF 193 194echo 195echo === Missing driver === 196echo 197 198_make_test_img --object secret,id=sec0,data=123456 -o encryption=on,encrypt.key-secret=sec0 $size 199run_qemu -S <<EOF 200{ "execute": "qmp_capabilities" } 201{ "execute": "blockdev-add", 202 "arguments": { 203 "node-name": "disk" 204 } 205 } 206{ "execute": "quit" } 207EOF 208 209# success, all done 210echo "*** done" 211rm -f $seq.full 212status=0 213