root / tests / qemu-iotests / 026 @ 6ce2d77a
History | View | Annotate | Download (3.9 kB)
1 |
#!/bin/bash |
---|---|
2 |
# |
3 |
# qcow2 error path testing |
4 |
# |
5 |
# Copyright (C) 2010 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 |
22 |
owner=kwolf@redhat.com |
23 |
|
24 |
seq=`basename $0` |
25 |
echo "QA output created by $seq" |
26 |
|
27 |
here=`pwd` |
28 |
tmp=/tmp/$$ |
29 |
status=1 # failure is the default! |
30 |
|
31 |
_cleanup() |
32 |
{ |
33 |
_cleanup_test_img |
34 |
rm $TEST_DIR/blkdebug.conf |
35 |
} |
36 |
trap "_cleanup; exit \$status" 0 1 2 3 15 |
37 |
|
38 |
# get standard environment, filters and checks |
39 |
. ./common.rc |
40 |
. ./common.filter |
41 |
. ./common.pattern |
42 |
|
43 |
# Currently only qcow2 supports rebasing |
44 |
_supported_fmt qcow2 |
45 |
_supported_proto generic |
46 |
_supported_os Linux |
47 |
|
48 |
|
49 |
echo "Errors while writing 128 kB" |
50 |
echo |
51 |
|
52 |
CLUSTER_SIZE=1024 |
53 |
|
54 |
BLKDBG_TEST_IMG="blkdebug:$TEST_DIR/blkdebug.conf:$TEST_IMG" |
55 |
|
56 |
for event in \ |
57 |
l1_update \ |
58 |
\ |
59 |
l2_load \ |
60 |
l2_update \ |
61 |
l2_alloc.write \ |
62 |
\ |
63 |
write_aio \ |
64 |
\ |
65 |
refblock_load \ |
66 |
refblock_update_part \ |
67 |
refblock_alloc \ |
68 |
\ |
69 |
cluster_alloc \ |
70 |
|
71 |
do |
72 |
|
73 |
for errno in 5 28; do |
74 |
for imm in off; do |
75 |
for once in on off; do |
76 |
for vmstate in "" "-b"; do |
77 |
|
78 |
cat > $TEST_DIR/blkdebug.conf <<EOF |
79 |
[inject-error] |
80 |
event = "$event" |
81 |
errno = "$errno" |
82 |
immediately = "$imm" |
83 |
once ="$once" |
84 |
EOF |
85 |
|
86 |
_make_test_img 1G |
87 |
|
88 |
echo |
89 |
echo "Event: $event; errno: $errno; imm: $imm; once: $once; write $vmstate" |
90 |
|
91 |
# We want to catch a simple L2 update, not the allocation of the first L2 table |
92 |
if [ "$event" == "l2_update" ]; then |
93 |
$QEMU_IO -c "write $vmstate 0 512" $TEST_IMG > /dev/null 2>&1 |
94 |
fi |
95 |
|
96 |
$QEMU_IO -c "write $vmstate 0 128k " $BLKDBG_TEST_IMG | _filter_qemu_io |
97 |
|
98 |
# l2_load is not called on allocation, so issue a second write |
99 |
# Reads are another path to trigger l2_load, so do a read, too |
100 |
if [ "$event" == "l2_load" ]; then |
101 |
$QEMU_IO -c "write $vmstate 0 128k " $BLKDBG_TEST_IMG | _filter_qemu_io |
102 |
$QEMU_IO -c "read $vmstate 0 128k " $BLKDBG_TEST_IMG | _filter_qemu_io |
103 |
fi |
104 |
|
105 |
$QEMU_IMG check $TEST_IMG 2>&1 | grep -v "refcount=1 reference=0" |
106 |
|
107 |
done |
108 |
done |
109 |
done |
110 |
done |
111 |
done |
112 |
|
113 |
|
114 |
echo |
115 |
echo === Refcout table growth tests === |
116 |
echo |
117 |
CLUSTER_SIZE=512 |
118 |
|
119 |
|
120 |
for event in \ |
121 |
refblock_alloc.hookup \ |
122 |
refblock_alloc.write \ |
123 |
refblock_alloc.write_blocks \ |
124 |
refblock_alloc.write_table \ |
125 |
refblock_alloc.switch_table \ |
126 |
|
127 |
do |
128 |
|
129 |
# This one takes a while, so let's test only one error code (ENOSPC should |
130 |
# never be generated by qemu, so it's probably a good choice) |
131 |
for errno in 28; do |
132 |
for imm in off; do |
133 |
for once in on off; do |
134 |
for vmstate in "" "-b"; do |
135 |
|
136 |
cat > $TEST_DIR/blkdebug.conf <<EOF |
137 |
[inject-error] |
138 |
event = "$event" |
139 |
errno = "$errno" |
140 |
immediately = "$imm" |
141 |
once = "$once" |
142 |
EOF |
143 |
|
144 |
_make_test_img 1G |
145 |
|
146 |
echo |
147 |
echo "Event: $event; errno: $errno; imm: $imm; once: $once; write $vmstate" |
148 |
$QEMU_IO -c "write $vmstate 0 64M" $BLKDBG_TEST_IMG | _filter_qemu_io |
149 |
|
150 |
$QEMU_IMG check $TEST_IMG 2>&1 | grep -v "refcount=1 reference=0" |
151 |
|
152 |
done |
153 |
done |
154 |
done |
155 |
done |
156 |
done |
157 |
|
158 |
echo |
159 |
echo === L1 growth tests === |
160 |
echo |
161 |
CLUSTER_SIZE=1024 |
162 |
|
163 |
|
164 |
for event in \ |
165 |
l1_grow.alloc_table \ |
166 |
l1_grow.write_table \ |
167 |
l1_grow.activate_table \ |
168 |
|
169 |
do |
170 |
|
171 |
for errno in 5 28; do |
172 |
for imm in off; do |
173 |
for once in on off; do |
174 |
|
175 |
cat > $TEST_DIR/blkdebug.conf <<EOF |
176 |
[inject-error] |
177 |
event = "$event" |
178 |
errno = "$errno" |
179 |
immediately = "$imm" |
180 |
once = "$once" |
181 |
EOF |
182 |
|
183 |
_make_test_img 1G |
184 |
|
185 |
echo |
186 |
echo "Event: $event; errno: $errno; imm: $imm; once: $once" |
187 |
$QEMU_IO -c "write -b 0 64k" $BLKDBG_TEST_IMG | _filter_qemu_io |
188 |
|
189 |
$QEMU_IMG check $TEST_IMG 2>&1 | grep -v "refcount=1 reference=0" |
190 |
|
191 |
done |
192 |
done |
193 |
done |
194 |
done |
195 |
|
196 |
# success, all done |
197 |
echo "*** done" |
198 |
rm -f $seq.full |
199 |
status=0 |