]> git.proxmox.com Git - mirror_qemu.git/blame - tests/qemu-iotests/071
Merge tag 'pull-maintainer-may24-160524-2' of https://gitlab.com/stsquad/qemu into...
[mirror_qemu.git] / tests / qemu-iotests / 071
CommitLineData
11a82d14 1#!/usr/bin/env bash
9dd003a9 2# group: rw auto quick
30bd6a4d
HR
3#
4# Test case for the QMP blkdebug and blkverify interfaces
5#
6# Copyright (C) 2013 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
42a5009d 23owner=hreitz@redhat.com
30bd6a4d
HR
24
25seq="$(basename $0)"
26echo "QA output created by $seq"
27
30bd6a4d
HR
28status=1 # failure is the default!
29
30_cleanup()
31{
32 _cleanup_test_img
33}
34trap "_cleanup; exit \$status" 0 1 2 3 15
35
36# get standard environment, filters and checks
37. ./common.rc
38. ./common.filter
39
1b7650ef 40_supported_fmt qcow2
57284d2a 41_supported_proto file fuse
21b43d00 42_require_drivers blkdebug blkverify
3be2024a 43# blkdebug can only inject errors on bs->file, not on the data_file,
96420a30 44# so this test does not work with external data files
3be2024a 45_unsupported_imgopts data_file
30bd6a4d 46
8cedcffd 47do_run_qemu()
30bd6a4d
HR
48{
49 echo Testing: "$@" | _filter_imgfmt
50 $QEMU -nographic -qmp stdio -serial none "$@"
51 echo
52}
53
8cedcffd 54run_qemu()
30bd6a4d 55{
4dd7b8d3 56 do_run_qemu "$@" 2>&1 | _filter_testdir | _filter_qemu | _filter_qmp | _filter_qemu_io
30bd6a4d
HR
57}
58
59IMG_SIZE=64M
60
61echo
62echo "=== Testing blkverify through filename ==="
63echo
64
d81fe252
HR
65# _make_test_img may set variables that we need to retain. Everything
66# in a pipe is executed in a subshell, so doing so would throw away
67# all changes. Therefore, we have to store the output in some temp
68# file and filter that.
69scratch_out="$TEST_DIR/img-create.out"
70
71TEST_IMG="$TEST_IMG.base" IMGFMT="raw" _make_test_img --no-opts $IMG_SIZE \
72 >"$scratch_out"
73_filter_imgfmt <"$scratch_out"
74rm -f "$scratch_out"
75
30bd6a4d 76_make_test_img $IMG_SIZE
8f9e835f 77$QEMU_IO -c "open -o driver=raw,file.driver=blkverify,file.raw.filename=$TEST_IMG.base $TEST_IMG" \
30bd6a4d
HR
78 -c 'read 0 512' -c 'write -P 42 0x38000 512' -c 'read -P 42 0x38000 512' | _filter_qemu_io
79
80$QEMU_IO -c 'write -P 42 0 512' "$TEST_IMG" | _filter_qemu_io
81
8f9e835f 82$QEMU_IO -c "open -o driver=raw,file.driver=blkverify,file.raw.filename=$TEST_IMG.base $TEST_IMG" \
30bd6a4d
HR
83 -c 'read -P 42 0 512' | _filter_qemu_io
84
85echo
86echo "=== Testing blkverify through file blockref ==="
87echo
88
d81fe252
HR
89TEST_IMG="$TEST_IMG.base" IMGFMT="raw" _make_test_img --no-opts $IMG_SIZE \
90 >"$scratch_out"
91_filter_imgfmt <"$scratch_out"
92
30bd6a4d 93_make_test_img $IMG_SIZE
8f9e835f 94$QEMU_IO -c "open -o driver=raw,file.driver=blkverify,file.raw.filename=$TEST_IMG.base,file.test.driver=$IMGFMT,file.test.file.filename=$TEST_IMG" \
30bd6a4d
HR
95 -c 'read 0 512' -c 'write -P 42 0x38000 512' -c 'read -P 42 0x38000 512' | _filter_qemu_io
96
97$QEMU_IO -c 'write -P 42 0 512' "$TEST_IMG" | _filter_qemu_io
98
8f9e835f 99$QEMU_IO -c "open -o driver=raw,file.driver=blkverify,file.raw.filename=$TEST_IMG.base $TEST_IMG" \
30bd6a4d
HR
100 -c 'read -P 42 0 512' | _filter_qemu_io
101
102echo
103echo "=== Testing blkdebug through filename ==="
104echo
105
106$QEMU_IO -c "open -o file.driver=blkdebug,file.inject-error.event=l2_load $TEST_IMG" \
107 -c 'read -P 42 0x38000 512'
108
109echo
110echo "=== Testing blkdebug through file blockref ==="
111echo
112
113$QEMU_IO -c "open -o driver=$IMGFMT,file.driver=blkdebug,file.inject-error.event=l2_load,file.image.filename=$TEST_IMG" \
114 -c 'read -P 42 0x38000 512'
115
116echo
117echo "=== Testing blkdebug on existing block device ==="
118echo
119
8e9e6530 120run_qemu <<EOF
30bd6a4d 121{ "execute": "qmp_capabilities" }
8e9e6530
HR
122{ "execute": "blockdev-add",
123 "arguments": {
0153d2f5
KW
124 "node-name": "drive0",
125 "driver": "file",
126 "filename": "$TEST_IMG"
8e9e6530
HR
127 }
128}
30bd6a4d
HR
129{ "execute": "blockdev-add",
130 "arguments": {
0153d2f5
KW
131 "driver": "$IMGFMT",
132 "node-name": "drive0-debug",
133 "file": {
134 "driver": "blkdebug",
135 "image": "drive0",
136 "inject-error": [{
137 "event": "l2_load"
138 }]
30bd6a4d
HR
139 }
140 }
141}
142{ "execute": "human-monitor-command",
143 "arguments": {
144 "command-line": 'qemu-io drive0-debug "read 0 512"'
145 }
146}
147{ "execute": "quit" }
148EOF
149
150echo
151echo "=== Testing blkverify on existing block device ==="
152echo
153
8e9e6530 154run_qemu <<EOF
30bd6a4d 155{ "execute": "qmp_capabilities" }
8e9e6530
HR
156{ "execute": "blockdev-add",
157 "arguments": {
0153d2f5
KW
158 "node-name": "drive0",
159 "driver": "$IMGFMT",
160 "file": {
161 "driver": "file",
162 "filename": "$TEST_IMG"
8e9e6530
HR
163 }
164 }
165}
30bd6a4d
HR
166{ "execute": "blockdev-add",
167 "arguments": {
0153d2f5
KW
168 "driver": "blkverify",
169 "node-name": "drive0-verify",
170 "test": "drive0",
171 "raw": {
172 "driver": "file",
173 "filename": "$TEST_IMG.base"
30bd6a4d
HR
174 }
175 }
176}
177{ "execute": "human-monitor-command",
178 "arguments": {
179 "command-line": 'qemu-io drive0-verify "read 0 512"'
180 }
181}
182{ "execute": "quit" }
183EOF
184
185echo
186echo "=== Testing blkverify on existing raw block device ==="
187echo
188
8e9e6530 189run_qemu <<EOF
30bd6a4d 190{ "execute": "qmp_capabilities" }
8e9e6530
HR
191{ "execute": "blockdev-add",
192 "arguments": {
0153d2f5
KW
193 "node-name": "drive0",
194 "driver": "file",
195 "filename": "$TEST_IMG.base"
8e9e6530
HR
196 }
197}
30bd6a4d
HR
198{ "execute": "blockdev-add",
199 "arguments": {
0153d2f5
KW
200 "driver": "blkverify",
201 "node-name": "drive0-verify",
202 "test": {
203 "driver": "$IMGFMT",
204 "file": {
205 "driver": "file",
206 "filename": "$TEST_IMG"
207 }
208 },
209 "raw": "drive0"
30bd6a4d
HR
210 }
211}
212{ "execute": "human-monitor-command",
213 "arguments": {
214 "command-line": 'qemu-io drive0-verify "read 0 512"'
215 }
216}
217{ "execute": "quit" }
218EOF
219
220echo
221echo "=== Testing blkdebug's set-state through QMP ==="
222echo
223
8e9e6530 224run_qemu <<EOF
30bd6a4d 225{ "execute": "qmp_capabilities" }
8e9e6530
HR
226{ "execute": "blockdev-add",
227 "arguments": {
0153d2f5
KW
228 "node-name": "drive0",
229 "driver": "file",
230 "filename": "$TEST_IMG"
8e9e6530
HR
231 }
232}
30bd6a4d
HR
233{ "execute": "blockdev-add",
234 "arguments": {
0153d2f5
KW
235 "driver": "$IMGFMT",
236 "node-name": "drive0-debug",
237 "file": {
238 "driver": "blkdebug",
239 "image": "drive0",
240 "inject-error": [{
241 "event": "read_aio",
242 "state": 42
243 }],
244 "set-state": [{
245 "event": "write_aio",
246 "new_state": 42
247 }]
30bd6a4d
HR
248 }
249 }
250}
251{ "execute": "human-monitor-command",
252 "arguments": {
253 "command-line": 'qemu-io drive0-debug "read 0 512"'
254 }
255}
256{ "execute": "human-monitor-command",
257 "arguments": {
258 "command-line": 'qemu-io drive0-debug "write 0 512"'
259 }
260}
261{ "execute": "human-monitor-command",
262 "arguments": {
263 "command-line": 'qemu-io drive0-debug "read 0 512"'
264 }
265}
266{ "execute": "quit" }
267EOF
268
269# success, all done
270echo "*** done"
271rm -f $seq.full
272status=0