Browse Source
data_file does not work with v2, and we probably want 026 to keep
working for v2 images. Thus, open a new file for v3-exclusive error
path test cases.
Fixes: 81311255f2
(“iotests/026: Test EIO on allocation in a data-file”)
Signed-off-by: Max Reitz <mreitz@redhat.com>
Message-Id: <20200311140707.1243218-1-mreitz@redhat.com>
Reviewed-by: John Snow <jsnow@redhat.com>
Tested-by: John Snow <jsnow@redhat.com>
Signed-off-by: Max Reitz <mreitz@redhat.com>
pull/88/head
6 changed files with 98 additions and 43 deletions
@ -0,0 +1,89 @@ |
|||
#!/usr/bin/env bash |
|||
# |
|||
# qcow2 v3-exclusive error path testing |
|||
# (026 tests paths common to v2 and v3) |
|||
# |
|||
# Copyright (C) 2020 Red Hat, Inc. |
|||
# |
|||
# This program is free software; you can redistribute it and/or modify |
|||
# it under the terms of the GNU General Public License as published by |
|||
# the Free Software Foundation; either version 2 of the License, or |
|||
# (at your option) any later version. |
|||
# |
|||
# This program is distributed in the hope that it will be useful, |
|||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
# GNU General Public License for more details. |
|||
# |
|||
# You should have received a copy of the GNU General Public License |
|||
# along with this program. If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
|
|||
seq=$(basename $0) |
|||
echo "QA output created by $seq" |
|||
|
|||
status=1 # failure is the default! |
|||
|
|||
_cleanup() |
|||
{ |
|||
_cleanup_test_img |
|||
rm "$TEST_DIR/blkdebug.conf" |
|||
rm -f "$TEST_IMG.data_file" |
|||
} |
|||
trap "_cleanup; exit \$status" 0 1 2 3 15 |
|||
|
|||
# get standard environment, filters and checks |
|||
. ./common.rc |
|||
. ./common.filter |
|||
. ./common.pattern |
|||
|
|||
_supported_fmt qcow2 |
|||
_supported_proto file |
|||
# This is a v3-exclusive test; |
|||
# As for data_file, error paths often very much depend on whether |
|||
# there is an external data file or not; so we create one exactly when |
|||
# we want to test it |
|||
_unsupported_imgopts 'compat=0.10' data_file |
|||
|
|||
echo |
|||
echo === Avoid freeing external data clusters on failure === |
|||
echo |
|||
|
|||
cat > "$TEST_DIR/blkdebug.conf" <<EOF |
|||
[inject-error] |
|||
event = "write_aio" |
|||
errno = "5" |
|||
once = "on" |
|||
EOF |
|||
|
|||
# Test what happens when there is an error when writing to an external |
|||
# data file instead of when writing to a preallocated zero cluster |
|||
_make_test_img -o "data_file=$TEST_IMG.data_file" 64k |
|||
|
|||
# Put blkdebug above the data-file, and a raw node on top of that so |
|||
# that blkdebug will see a write_aio event and emit an error. This |
|||
# will then trigger the alloc abort code, which we want to test here. |
|||
$QEMU_IO -c "write 0 64k" \ |
|||
"json:{ |
|||
'driver': 'qcow2', |
|||
'file': { 'driver': 'file', 'filename': '$TEST_IMG' }, |
|||
'data-file': { |
|||
'driver': 'raw', |
|||
'file': { |
|||
'driver': 'blkdebug', |
|||
'config': '$TEST_DIR/blkdebug.conf', |
|||
'image': { |
|||
'driver': 'file', |
|||
'filename': '$TEST_IMG.data_file' |
|||
} |
|||
} |
|||
} |
|||
}" \ |
|||
| _filter_qemu_io |
|||
|
|||
_check_test_img |
|||
|
|||
# success, all done |
|||
echo "*** done" |
|||
rm -f $seq.full |
|||
status=0 |
|||
@ -0,0 +1,8 @@ |
|||
QA output created by 289 |
|||
|
|||
=== Avoid freeing external data clusters on failure === |
|||
|
|||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=65536 data_file=TEST_DIR/t.IMGFMT.data_file |
|||
write failed: Input/output error |
|||
No errors were found on the image. |
|||
*** done |
|||
Loading…
Reference in new issue