iotests: Allow out-of-tree run
As out-of-tree builds are preferred for qemu, running the qemu-iotests in that out-of-tree build should be supported as well. To do so, a symbolic link has to be created pointing to the check script in the source directory. That script will check whether it has been run through a symlink, and if so, will assume it is run in the build tree. All output and temporary operations performed by iotests are then redirected here and, unless specified otherwise by the user, QEMU_PROG etc. will be set to paths appropriate for the build tree. Also, drop making every test case executable if it is not yet, as this would modify the source tree which is not desired for out-of-tree runs and should be fixed in the repository anyway. Signed-off-by: Max Reitz <mreitz@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
6b8aeca574
commit
e8f8624d3b
@ -34,22 +34,89 @@ timestamp=${TIMESTAMP:=false}
|
||||
# generic initialization
|
||||
iam=check
|
||||
|
||||
# we need common.config
|
||||
if ! . ./common.config
|
||||
then
|
||||
echo "$iam: failed to source common.config"
|
||||
_init_error()
|
||||
{
|
||||
echo "$iam: $1" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
if [ -L "$0" ]
|
||||
then
|
||||
# called from the build tree
|
||||
source_iotests=$(dirname "$(readlink "$0")")
|
||||
if [ -z "$source_iotests" ]
|
||||
then
|
||||
_init_error "failed to obtain source tree name from check symlink"
|
||||
fi
|
||||
source_iotests=$(cd "$source_iotests"; pwd) || _init_error "failed to enter source tree"
|
||||
build_iotests=$PWD
|
||||
else
|
||||
# called from the source tree
|
||||
source_iotests=$PWD
|
||||
# this may be an in-tree build (note that in the following code we may not
|
||||
# assume that it truly is and have to test whether the build results
|
||||
# actually exist)
|
||||
build_iotests=$PWD
|
||||
fi
|
||||
|
||||
build_root="$build_iotests/../.."
|
||||
|
||||
if [ -x "$build_iotests/socket_scm_helper" ]
|
||||
then
|
||||
export SOCKET_SCM_HELPER="$build_iotests/socket_scm_helper"
|
||||
fi
|
||||
|
||||
# if ./qemu exists, it should be prioritized and will be chosen by common.config
|
||||
if [[ -z "$QEMU_PROG" && ! -x './qemu' ]]
|
||||
then
|
||||
arch=$(uname -m 2> /dev/null)
|
||||
|
||||
if [[ -n $arch && -x "$build_root/$arch-softmmu/qemu-system-$arch" ]]
|
||||
then
|
||||
export QEMU_PROG="$build_root/$arch-softmmu/qemu-system-$arch"
|
||||
else
|
||||
pushd "$build_root" > /dev/null
|
||||
for binary in *-softmmu/qemu-system-*
|
||||
do
|
||||
if [ -x "$binary" ]
|
||||
then
|
||||
export QEMU_PROG="$build_root/$binary"
|
||||
break
|
||||
fi
|
||||
done
|
||||
popd > /dev/null
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ -z $QEMU_IMG_PROG && -x "$build_root/qemu-img" && ! -x './qemu-img' ]]
|
||||
then
|
||||
export QEMU_IMG_PROG="$build_root/qemu-img"
|
||||
fi
|
||||
|
||||
if [[ -z $QEMU_IO_PROG && -x "$build_root/qemu-io" && ! -x './qemu-io' ]]
|
||||
then
|
||||
export QEMU_IO_PROG="$build_root/qemu-io"
|
||||
fi
|
||||
|
||||
if [[ -z $QEMU_NBD_PROG && -x "$build_root/qemu-nbd" && ! -x './qemu-nbd' ]]
|
||||
then
|
||||
export QEMU_NBD_PROG="$build_root/qemu-nbd"
|
||||
fi
|
||||
|
||||
# we need common.config
|
||||
if ! . "$source_iotests/common.config"
|
||||
then
|
||||
_init_error "failed to source common.config"
|
||||
fi
|
||||
|
||||
# we need common.rc
|
||||
if ! . ./common.rc
|
||||
if ! . "$source_iotests/common.rc"
|
||||
then
|
||||
echo "check: failed to source common.rc"
|
||||
exit 1
|
||||
_init_error "failed to source common.rc"
|
||||
fi
|
||||
|
||||
# we need common
|
||||
. ./common
|
||||
. "$source_iotests/common"
|
||||
|
||||
#if [ `id -u` -ne 0 ]
|
||||
#then
|
||||
@ -194,7 +261,7 @@ do
|
||||
echo " - expunged"
|
||||
rm -f $seq.out.bad
|
||||
echo "/^$seq\$/d" >>$tmp.expunged
|
||||
elif [ ! -f $seq ]
|
||||
elif [ ! -f "$source_iotests/$seq" ]
|
||||
then
|
||||
echo " - no such test?"
|
||||
echo "/^$seq\$/d" >>$tmp.expunged
|
||||
@ -215,9 +282,10 @@ do
|
||||
|
||||
start=`_wallclock`
|
||||
$timestamp && echo -n " ["`date "+%T"`"]"
|
||||
[ ! -x $seq ] && chmod u+x $seq # ensure we can run it
|
||||
export OUTPUT_DIR=$PWD
|
||||
(cd "$source_iotests";
|
||||
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(($RANDOM % 255 + 1))} \
|
||||
./$seq >$tmp.out 2>&1
|
||||
./$seq >$tmp.out 2>&1)
|
||||
sts=$?
|
||||
$timestamp && _timestamp
|
||||
stop=`_wallclock`
|
||||
@ -242,17 +310,17 @@ do
|
||||
err=true
|
||||
fi
|
||||
|
||||
reference=$seq.out
|
||||
reference="$source_iotests/$seq.out"
|
||||
if [ "$CACHEMODE" = "none" ]; then
|
||||
[ -f $seq.out.nocache ] && reference=$seq.out.nocache
|
||||
[ -f "$source_iotests/$seq.out.nocache" ] && reference="$source_iotests/$seq.out.nocache"
|
||||
fi
|
||||
|
||||
if [ ! -f $reference ]
|
||||
if [ ! -f "$reference" ]
|
||||
then
|
||||
echo " - no qualified output"
|
||||
err=true
|
||||
else
|
||||
if diff -w $reference $tmp.out >/dev/null 2>&1
|
||||
if diff -w "$reference" $tmp.out >/dev/null 2>&1
|
||||
then
|
||||
echo ""
|
||||
if $err
|
||||
@ -264,7 +332,7 @@ do
|
||||
else
|
||||
echo " - output mismatch (see $seq.out.bad)"
|
||||
mv $tmp.out $seq.out.bad
|
||||
$diff -w $reference $seq.out.bad
|
||||
$diff -w "$reference" $seq.out.bad
|
||||
err=true
|
||||
fi
|
||||
fi
|
||||
|
@ -25,8 +25,7 @@ _setenvironment()
|
||||
export MSGVERB
|
||||
}
|
||||
|
||||
here=`pwd`
|
||||
rm -f $here/$iam.out
|
||||
rm -f "$OUTPUT_DIR/$iam.out"
|
||||
_setenvironment
|
||||
|
||||
check=${check-true}
|
||||
@ -59,7 +58,7 @@ do
|
||||
if $group
|
||||
then
|
||||
# arg after -g
|
||||
group_list=`sed -n <group -e 's/$/ /' -e "/^[0-9][0-9][0-9].* $r /"'{
|
||||
group_list=`sed -n <"$source_iotests/group" -e 's/$/ /' -e "/^[0-9][0-9][0-9].* $r /"'{
|
||||
s/ .*//p
|
||||
}'`
|
||||
if [ -z "$group_list" ]
|
||||
@ -84,7 +83,7 @@ s/ .*//p
|
||||
then
|
||||
# arg after -x
|
||||
[ ! -s $tmp.list ] && ls [0-9][0-9][0-9] [0-9][0-9][0-9][0-9] >$tmp.list 2>/dev/null
|
||||
group_list=`sed -n <group -e 's/$/ /' -e "/^[0-9][0-9][0-9].* $r /"'{
|
||||
group_list=`sed -n <"$source_iotests/group" -e 's/$/ /' -e "/^[0-9][0-9][0-9].* $r /"'{
|
||||
s/ .*//p
|
||||
}'`
|
||||
if [ -z "$group_list" ]
|
||||
@ -366,7 +365,7 @@ testlist options
|
||||
BEGIN { for (t='$start'; t<='$end'; t++) printf "%03d\n",t }' \
|
||||
| while read id
|
||||
do
|
||||
if grep -s "^$id " group >/dev/null
|
||||
if grep -s "^$id " "$source_iotests/group" >/dev/null
|
||||
then
|
||||
# in group file ... OK
|
||||
echo $id >>$tmp.list
|
||||
@ -402,7 +401,7 @@ else
|
||||
touch $tmp.list
|
||||
else
|
||||
# no test numbers, do everything from group file
|
||||
sed -n -e '/^[0-9][0-9][0-9]*/s/[ ].*//p' <group >$tmp.list
|
||||
sed -n -e '/^[0-9][0-9][0-9]*/s/[ ].*//p' <"$source_iotests/group" >$tmp.list
|
||||
fi
|
||||
fi
|
||||
|
||||
|
@ -126,7 +126,7 @@ fi
|
||||
export TEST_DIR
|
||||
|
||||
if [ -z "$SAMPLE_IMG_DIR" ]; then
|
||||
SAMPLE_IMG_DIR=`pwd`/sample_images
|
||||
SAMPLE_IMG_DIR="$source_iotests/sample_images"
|
||||
fi
|
||||
|
||||
if [ ! -d "$SAMPLE_IMG_DIR" ]; then
|
||||
|
@ -318,9 +318,9 @@ _do()
|
||||
status=1; exit
|
||||
fi
|
||||
|
||||
(eval "echo '---' \"$_cmd\"") >>$here/$seq.full
|
||||
(eval "echo '---' \"$_cmd\"") >>"$OUTPUT_DIR/$seq.full"
|
||||
(eval "$_cmd") >$tmp._out 2>&1; ret=$?
|
||||
cat $tmp._out >>$here/$seq.full
|
||||
cat $tmp._out >>"$OUTPUT_DIR/$seq.full"
|
||||
if [ $# -eq 2 ]; then
|
||||
if [ $ret -eq 0 ]; then
|
||||
echo "done"
|
||||
@ -344,7 +344,7 @@ _do()
|
||||
#
|
||||
_notrun()
|
||||
{
|
||||
echo "$*" >$seq.notrun
|
||||
echo "$*" >"$OUTPUT_DIR/$seq.notrun"
|
||||
echo "$seq not run: $*"
|
||||
status=0
|
||||
exit
|
||||
@ -354,7 +354,7 @@ _notrun()
|
||||
#
|
||||
_fail()
|
||||
{
|
||||
echo "$*" | tee -a $here/$seq.full
|
||||
echo "$*" | tee -a "$OUTPUT_DIR/$seq.full"
|
||||
echo "(see $seq.full for details)"
|
||||
status=1
|
||||
exit 1
|
||||
|
@ -37,6 +37,7 @@ qemu_args = os.environ.get('QEMU', 'qemu').strip().split(' ')
|
||||
imgfmt = os.environ.get('IMGFMT', 'raw')
|
||||
imgproto = os.environ.get('IMGPROTO', 'file')
|
||||
test_dir = os.environ.get('TEST_DIR', '/var/tmp')
|
||||
output_dir = os.environ.get('OUTPUT_DIR', '.')
|
||||
cachemode = os.environ.get('CACHEMODE')
|
||||
|
||||
socket_scm_helper = os.environ.get('SOCKET_SCM_HELPER', 'socket_scm_helper')
|
||||
@ -278,7 +279,7 @@ def notrun(reason):
|
||||
# Each test in qemu-iotests has a number ("seq")
|
||||
seq = os.path.basename(sys.argv[0])
|
||||
|
||||
open('%s.notrun' % seq, 'wb').write(reason + '\n')
|
||||
open('%s/%s.notrun' % (output_dir, seq), 'wb').write(reason + '\n')
|
||||
print '%s not run: %s' % (seq, reason)
|
||||
sys.exit(0)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user