iotests: Do not suppress segfaults in bash tests
Currently, if a qemu/qemu-io/qemu-img/qemu-nbd invocation receives a segmentation fault, that message is invisible in most cases since the output is generally filtered and bash suppresses the segmentation fault notice for any but the last element of a pipe. Most of the time, the test will then fail anyway because of missing output, but not necessarily (as happened with test 82 recently). Fix this by making the corresponding environment variables point to wrapper functions which execute the respective command in a subshell. Giving options to qemu/qemu-io/qemu-img and path names with spaces were broken for the Python tests; this patch "accidentally" fixes that. Signed-off-by: Max Reitz <mreitz@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
0ed82f7a09
commit
934659c460
@ -47,13 +47,6 @@ _supported_os Linux
|
||||
_default_cache_mode "writethrough"
|
||||
_supported_cache_modes "writethrough"
|
||||
|
||||
_subshell_exec()
|
||||
{
|
||||
# Executing crashing commands in a subshell prevents information like the
|
||||
# "Killed" line from being lost
|
||||
(exec "$@")
|
||||
}
|
||||
|
||||
size=128M
|
||||
|
||||
echo
|
||||
@ -74,7 +67,7 @@ echo "== Creating a dirty image file =="
|
||||
IMGOPTS="compat=1.1,lazy_refcounts=on"
|
||||
_make_test_img $size
|
||||
|
||||
_subshell_exec $QEMU_IO -c "write -P 0x5a 0 512" \
|
||||
$QEMU_IO -c "write -P 0x5a 0 512" \
|
||||
-c "sigraise $(kill -l KILL)" "$TEST_IMG" 2>&1 \
|
||||
| _filter_qemu_io
|
||||
|
||||
@ -109,7 +102,7 @@ echo "== Opening a dirty image read/write should repair it =="
|
||||
IMGOPTS="compat=1.1,lazy_refcounts=on"
|
||||
_make_test_img $size
|
||||
|
||||
_subshell_exec $QEMU_IO -c "write -P 0x5a 0 512" \
|
||||
$QEMU_IO -c "write -P 0x5a 0 512" \
|
||||
-c "sigraise $(kill -l KILL)" "$TEST_IMG" 2>&1 \
|
||||
| _filter_qemu_io
|
||||
|
||||
@ -127,7 +120,7 @@ echo "== Creating an image file with lazy_refcounts=off =="
|
||||
IMGOPTS="compat=1.1,lazy_refcounts=off"
|
||||
_make_test_img $size
|
||||
|
||||
_subshell_exec $QEMU_IO -c "write -P 0x5a 0 512" \
|
||||
$QEMU_IO -c "write -P 0x5a 0 512" \
|
||||
-c "sigraise $(kill -l KILL)" "$TEST_IMG" 2>&1 \
|
||||
| _filter_qemu_io
|
||||
|
||||
|
@ -11,7 +11,7 @@ No errors were found on the image.
|
||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728
|
||||
wrote 512/512 bytes at offset 0
|
||||
512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
./039: Killed ( exec "$@" )
|
||||
./common.config: Killed ( exec "$QEMU_IO_PROG" $QEMU_IO_OPTIONS "$@" )
|
||||
incompatible_features 0x1
|
||||
ERROR cluster 5 refcount=0 reference=1
|
||||
ERROR OFLAG_COPIED data cluster: l2_entry=8000000000050000 refcount=0
|
||||
@ -46,7 +46,7 @@ read 512/512 bytes at offset 0
|
||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728
|
||||
wrote 512/512 bytes at offset 0
|
||||
512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
./039: Killed ( exec "$@" )
|
||||
./common.config: Killed ( exec "$QEMU_IO_PROG" $QEMU_IO_OPTIONS "$@" )
|
||||
incompatible_features 0x1
|
||||
ERROR cluster 5 refcount=0 reference=1
|
||||
Rebuilding refcount structure
|
||||
@ -60,7 +60,7 @@ incompatible_features 0x0
|
||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728
|
||||
wrote 512/512 bytes at offset 0
|
||||
512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
./039: Killed ( exec "$@" )
|
||||
./common.config: Killed ( exec "$QEMU_IO_PROG" $QEMU_IO_OPTIONS "$@" )
|
||||
incompatible_features 0x0
|
||||
No errors were found on the image.
|
||||
|
||||
|
@ -58,7 +58,8 @@ echo
|
||||
echo "=== Testing dirty version downgrade ==="
|
||||
echo
|
||||
IMGOPTS="compat=1.1,lazy_refcounts=on" _make_test_img 64M
|
||||
$QEMU_IO -c "write -P 0x2a 0 128k" -c flush -c abort "$TEST_IMG" | _filter_qemu_io
|
||||
$QEMU_IO -c "write -P 0x2a 0 128k" -c flush -c abort "$TEST_IMG" 2>&1 \
|
||||
| _filter_qemu_io
|
||||
$PYTHON qcow2.py "$TEST_IMG" dump-header
|
||||
$QEMU_IMG amend -o "compat=0.10" "$TEST_IMG"
|
||||
$PYTHON qcow2.py "$TEST_IMG" dump-header
|
||||
@ -91,7 +92,8 @@ echo
|
||||
echo "=== Testing dirty lazy_refcounts=off ==="
|
||||
echo
|
||||
IMGOPTS="compat=1.1,lazy_refcounts=on" _make_test_img 64M
|
||||
$QEMU_IO -c "write -P 0x2a 0 128k" -c flush -c abort "$TEST_IMG" | _filter_qemu_io
|
||||
$QEMU_IO -c "write -P 0x2a 0 128k" -c flush -c abort "$TEST_IMG" 2>&1 \
|
||||
| _filter_qemu_io
|
||||
$PYTHON qcow2.py "$TEST_IMG" dump-header
|
||||
$QEMU_IMG amend -o "lazy_refcounts=off" "$TEST_IMG"
|
||||
$PYTHON qcow2.py "$TEST_IMG" dump-header
|
||||
|
@ -57,6 +57,7 @@ No errors were found on the image.
|
||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864
|
||||
wrote 131072/131072 bytes at offset 0
|
||||
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
./common.config: Aborted (core dumped) ( exec "$QEMU_IO_PROG" $QEMU_IO_OPTIONS "$@" )
|
||||
magic 0x514649fb
|
||||
version 3
|
||||
backing_file_offset 0x0
|
||||
@ -214,6 +215,7 @@ No errors were found on the image.
|
||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864
|
||||
wrote 131072/131072 bytes at offset 0
|
||||
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
./common.config: Aborted (core dumped) ( exec "$QEMU_IO_PROG" $QEMU_IO_OPTIONS "$@" )
|
||||
magic 0x514649fb
|
||||
version 3
|
||||
backing_file_offset 0x0
|
||||
|
@ -231,10 +231,10 @@ FULL_HOST_DETAILS=`_full_platform_details`
|
||||
#FULL_MOUNT_OPTIONS=`_scratch_mount_options`
|
||||
|
||||
cat <<EOF
|
||||
QEMU -- $QEMU
|
||||
QEMU_IMG -- $QEMU_IMG
|
||||
QEMU_IO -- $QEMU_IO
|
||||
QEMU_NBD -- $QEMU_NBD
|
||||
QEMU -- "$QEMU_PROG" $QEMU_OPTIONS
|
||||
QEMU_IMG -- "$QEMU_IMG_PROG" $QEMU_IMG_OPTIONS
|
||||
QEMU_IO -- "$QEMU_IO_PROG" $QEMU_IO_OPTIONS
|
||||
QEMU_NBD -- "$QEMU_NBD_PROG" $QEMU_NBD_OPTIONS
|
||||
IMGFMT -- $FULL_IMGFMT_DETAILS
|
||||
IMGPROTO -- $FULL_IMGPROTO_DETAILS
|
||||
PLATFORM -- $FULL_HOST_DETAILS
|
||||
|
@ -103,10 +103,31 @@ if [ -z "$QEMU_NBD_PROG" ]; then
|
||||
export QEMU_NBD_PROG="`set_prog_path qemu-nbd`"
|
||||
fi
|
||||
|
||||
export QEMU="$QEMU_PROG $QEMU_OPTIONS"
|
||||
export QEMU_IMG=$QEMU_IMG_PROG
|
||||
export QEMU_IO="$QEMU_IO_PROG $QEMU_IO_OPTIONS"
|
||||
export QEMU_NBD=$QEMU_NBD_PROG
|
||||
_qemu_wrapper()
|
||||
{
|
||||
(exec "$QEMU_PROG" $QEMU_OPTIONS "$@")
|
||||
}
|
||||
|
||||
_qemu_img_wrapper()
|
||||
{
|
||||
(exec "$QEMU_IMG_PROG" $QEMU_IMG_OPTIONS "$@")
|
||||
}
|
||||
|
||||
_qemu_io_wrapper()
|
||||
{
|
||||
(exec "$QEMU_IO_PROG" $QEMU_IO_OPTIONS "$@")
|
||||
}
|
||||
|
||||
_qemu_nbd_wrapper()
|
||||
{
|
||||
(exec "$QEMU_NBD_PROG" $QEMU_NBD_OPTIONS "$@")
|
||||
}
|
||||
|
||||
export QEMU=_qemu_wrapper
|
||||
export QEMU_IMG=_qemu_img_wrapper
|
||||
export QEMU_IO=_qemu_io_wrapper
|
||||
export QEMU_NBD=_qemu_nbd_wrapper
|
||||
|
||||
default_machine=$($QEMU -machine \? | awk '/(default)/{print $1}')
|
||||
default_alias_machine=$($QEMU -machine \? |\
|
||||
awk -v var_default_machine="$default_machine"\)\
|
||||
|
@ -439,7 +439,17 @@ _unsupported_imgopts()
|
||||
#
|
||||
_require_command()
|
||||
{
|
||||
if [ "$1" = "QEMU" ]; then
|
||||
c=$QEMU_PROG
|
||||
elif [ "$1" = "QEMU_IMG" ]; then
|
||||
c=$QEMU_IMG_PROG
|
||||
elif [ "$1" = "QEMU_IO" ]; then
|
||||
c=$QEMU_IO_PROG
|
||||
elif [ "$1" = "QEMU_NBD" ]; then
|
||||
c=$QEMU_NBD_PROG
|
||||
else
|
||||
eval c=\$$1
|
||||
fi
|
||||
[ -x "$c" ] || _notrun "$1 utility required, skipped this test"
|
||||
}
|
||||
|
||||
|
@ -31,11 +31,19 @@ import struct
|
||||
__all__ = ['imgfmt', 'imgproto', 'test_dir' 'qemu_img', 'qemu_io',
|
||||
'VM', 'QMPTestCase', 'notrun', 'main']
|
||||
|
||||
# This will not work if arguments or path contain spaces but is necessary if we
|
||||
# This will not work if arguments contain spaces but is necessary if we
|
||||
# want to support the override options that ./check supports.
|
||||
qemu_img_args = os.environ.get('QEMU_IMG', 'qemu-img').strip().split(' ')
|
||||
qemu_io_args = os.environ.get('QEMU_IO', 'qemu-io').strip().split(' ')
|
||||
qemu_args = os.environ.get('QEMU', 'qemu').strip().split(' ')
|
||||
qemu_img_args = [os.environ.get('QEMU_IMG_PROG', 'qemu-img')]
|
||||
if os.environ.get('QEMU_IMG_OPTIONS'):
|
||||
qemu_img_args += os.environ['QEMU_IMG_OPTIONS'].strip().split(' ')
|
||||
|
||||
qemu_io_args = [os.environ.get('QEMU_IO_PROG', 'qemu-io')]
|
||||
if os.environ.get('QEMU_IO_OPTIONS'):
|
||||
qemu_io_args += os.environ['QEMU_IO_OPTIONS'].strip().split(' ')
|
||||
|
||||
qemu_args = [os.environ.get('QEMU_PROG', 'qemu')]
|
||||
if os.environ.get('QEMU_OPTIONS'):
|
||||
qemu_args += os.environ['QEMU_OPTIONS'].strip().split(' ')
|
||||
|
||||
imgfmt = os.environ.get('IMGFMT', 'raw')
|
||||
imgproto = os.environ.get('IMGPROTO', 'file')
|
||||
|
Loading…
Reference in New Issue
Block a user