Statistics
| Branch: | Revision:

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