blob: d8e0e384cdfcfc95cd1f08274d3691f9b3c41ff3 [file] [log] [blame]
Philippe Mathieu-Daudé11a82d12019-03-07 15:58:38 +01001#!/usr/bin/env bash
Vladimir Sementsov-Ogievskiy9dd003a2021-01-16 16:44:19 +03002# group: rw quick
Kevin Wolfc75203c2014-03-06 15:52:14 +01003#
4# Test unsupported blockdev-add cases
5#
6# Copyright (C) 2014 Red Hat, Inc.
7#
8# This program is free software; you can redistribute it and/or modify
9# it under the terms of the GNU General Public License as published by
10# the Free Software Foundation; either version 2 of the License, or
11# (at your option) any later version.
12#
13# This program is distributed in the hope that it will be useful,
14# but WITHOUT ANY WARRANTY; without even the implied warranty of
15# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16# GNU General Public License for more details.
17#
18# You should have received a copy of the GNU General Public License
19# along with this program. If not, see <http://www.gnu.org/licenses/>.
20#
21
22# creator
23owner=kwolf@redhat.com
24
25seq=`basename $0`
26echo "QA output created by $seq"
27
Kevin Wolfc75203c2014-03-06 15:52:14 +010028status=1 # failure is the default!
29
Max Reitz801ddbd2020-02-24 18:16:31 +010030_cleanup()
31{
32 _cleanup_test_img
33}
34trap "_cleanup; exit \$status" 0 1 2 3 15
35
Kevin Wolfc75203c2014-03-06 15:52:14 +010036# get standard environment, filters and checks
37. ./common.rc
38. ./common.filter
39
40_supported_fmt qcow2
41_supported_proto file
42_supported_os Linux
Max Reitzd2a839e2020-06-25 14:55:35 +020043_require_working_luks
Kevin Wolfc75203c2014-03-06 15:52:14 +010044
Eric Blake8cedcff2018-11-16 15:50:02 -060045do_run_qemu()
Kevin Wolfc75203c2014-03-06 15:52:14 +010046{
47 echo Testing: "$@"
48 $QEMU -nographic -qmp stdio -serial none "$@"
49 echo
50}
51
Eric Blake8cedcff2018-11-16 15:50:02 -060052run_qemu()
Kevin Wolfc75203c2014-03-06 15:52:14 +010053{
Daniel P. Berrangee6ff69b2016-03-21 14:11:48 +000054 do_run_qemu "$@" 2>&1 | _filter_testdir | _filter_qmp \
55 | _filter_qemu | _filter_imgfmt \
Max Reitz44673a02017-10-09 18:34:55 +020056 | _filter_actual_image_size
Kevin Wolfc75203c2014-03-06 15:52:14 +010057}
58
59size=128M
60
61_make_test_img $size
62
63echo
Max Reitzbe4b67b2015-10-19 17:53:09 +020064echo === Missing ID and node-name ===
Kevin Wolfc75203c2014-03-06 15:52:14 +010065echo
66
67run_qemu <<EOF
68{ "execute": "qmp_capabilities" }
69{ "execute": "blockdev-add",
70 "arguments": {
Kevin Wolf0153d2f2016-10-07 17:05:04 +020071 "driver": "$IMGFMT",
72 "file": {
73 "driver": "file",
74 "filename": "$TEST_IMG"
Kevin Wolfc75203c2014-03-06 15:52:14 +010075 }
76 }
77 }
78{ "execute": "quit" }
79EOF
80
81echo
Kevin Wolff2d953e2014-04-17 13:27:05 +020082echo === Duplicate ID ===
83echo
84
Kevin Wolf5feb08e2016-09-21 14:56:04 +020085run_qemu -drive driver=$IMGFMT,id=disk,node-name=test-node,file="$TEST_IMG" <<EOF
Kevin Wolff2d953e2014-04-17 13:27:05 +020086{ "execute": "qmp_capabilities" }
87{ "execute": "blockdev-add",
88 "arguments": {
Kevin Wolf0153d2f2016-10-07 17:05:04 +020089 "driver": "$IMGFMT",
90 "node-name": "disk",
91 "file": {
Fam Zhengd5b83362017-05-03 00:35:46 +080092 "driver": "null-co"
Kevin Wolf90d9d302014-04-17 13:40:30 +020093 }
94 }
95 }
96{ "execute": "blockdev-add",
97 "arguments": {
Kevin Wolf0153d2f2016-10-07 17:05:04 +020098 "driver": "$IMGFMT",
99 "node-name": "test-node",
100 "file": {
Fam Zhengd5b83362017-05-03 00:35:46 +0800101 "driver": "null-co"
Kevin Wolf90d9d302014-04-17 13:40:30 +0200102 }
103 }
104 }
Kevin Wolff2d953e2014-04-17 13:27:05 +0200105{ "execute": "quit" }
106EOF
107
108echo
Kevin Wolfc75203c2014-03-06 15:52:14 +0100109echo === aio=native without O_DIRECT ===
110echo
111
Max Reitzc0012e92017-11-15 19:07:32 +0100112# Skip this test if AIO is not enabled in this build
Eric Blake8cedcff2018-11-16 15:50:02 -0600113run_qemu_filter_aio()
Max Reitzc0012e92017-11-15 19:07:32 +0100114{
115 run_qemu "$@" | \
116 sed -e 's/is not supported in this build/it requires cache.direct=on, which was not specified/'
117}
118
119run_qemu_filter_aio <<EOF
Kevin Wolfc75203c2014-03-06 15:52:14 +0100120{ "execute": "qmp_capabilities" }
121{ "execute": "blockdev-add",
122 "arguments": {
Kevin Wolf0153d2f2016-10-07 17:05:04 +0200123 "driver": "$IMGFMT",
124 "node-name": "disk",
125 "file": {
126 "driver": "file",
127 "filename": "$TEST_IMG",
128 "aio": "native"
Kevin Wolfc75203c2014-03-06 15:52:14 +0100129 }
130 }
131 }
132{ "execute": "quit" }
133EOF
134
135echo
Daniel P. Berrange426d52d2017-06-23 17:24:13 +0100136echo === Encrypted image QCow ===
Kevin Wolfc75203c2014-03-06 15:52:14 +0100137echo
138
Daniel P. Berrangeb25b3872017-06-23 17:24:10 +0100139_make_test_img --object secret,id=sec0,data=123456 -o encryption=on,encrypt.key-secret=sec0 $size
Kevin Wolfc75203c2014-03-06 15:52:14 +0100140run_qemu <<EOF
141{ "execute": "qmp_capabilities" }
Daniel P. Berrangeb25b3872017-06-23 17:24:10 +0100142{ "execute": "object-add",
143 "arguments": {
144 "qom-type": "secret",
145 "id": "sec0",
Alberto Garciafa818b22021-02-22 12:57:37 +0100146 "data": "123456"
Daniel P. Berrangeb25b3872017-06-23 17:24:10 +0100147 }
148}
Kevin Wolfc75203c2014-03-06 15:52:14 +0100149{ "execute": "blockdev-add",
150 "arguments": {
Kevin Wolf0153d2f2016-10-07 17:05:04 +0200151 "driver": "$IMGFMT",
152 "node-name": "disk",
153 "file": {
154 "driver": "file",
155 "filename": "$TEST_IMG"
Daniel P. Berrangeb25b3872017-06-23 17:24:10 +0100156 },
157 "encrypt": {
158 "format": "aes",
159 "key-secret": "sec0"
Kevin Wolfc75203c2014-03-06 15:52:14 +0100160 }
161 }
162 }
163{ "execute": "quit" }
164EOF
165
Fam Zhengfe509ee2014-09-18 15:36:43 -0500166echo
Daniel P. Berrange426d52d2017-06-23 17:24:13 +0100167echo === Encrypted image LUKS ===
168echo
169
170_make_test_img --object secret,id=sec0,data=123456 -o encrypt.format=luks,encrypt.key-secret=sec0 $size
171run_qemu <<EOF
172{ "execute": "qmp_capabilities" }
173{ "execute": "object-add",
174 "arguments": {
175 "qom-type": "secret",
176 "id": "sec0",
Alberto Garciafa818b22021-02-22 12:57:37 +0100177 "data": "123456"
Daniel P. Berrange426d52d2017-06-23 17:24:13 +0100178 }
179}
180{ "execute": "blockdev-add",
181 "arguments": {
182 "driver": "$IMGFMT",
183 "node-name": "disk",
184 "file": {
185 "driver": "file",
186 "filename": "$TEST_IMG"
187 },
188 "encrypt": {
189 "format": "luks",
190 "key-secret": "sec0"
191 }
192 }
193 }
194{ "execute": "quit" }
195EOF
196
197echo
Fam Zhengfe509ee2014-09-18 15:36:43 -0500198echo === Missing driver ===
199echo
200
Daniel P. Berrangeb25b3872017-06-23 17:24:10 +0100201_make_test_img --object secret,id=sec0,data=123456 -o encryption=on,encrypt.key-secret=sec0 $size
Fam Zhengfe509ee2014-09-18 15:36:43 -0500202run_qemu -S <<EOF
203{ "execute": "qmp_capabilities" }
204{ "execute": "blockdev-add",
205 "arguments": {
Kevin Wolf0153d2f2016-10-07 17:05:04 +0200206 "node-name": "disk"
Fam Zhengfe509ee2014-09-18 15:36:43 -0500207 }
208 }
209{ "execute": "quit" }
210EOF
211
Kevin Wolfc75203c2014-03-06 15:52:14 +0100212# success, all done
213echo "*** done"
214rm -f $seq.full
215status=0