On Thu, 05/22 23:30, Max Reitz wrote: > 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 <mre...@redhat.com> > --- > tests/qemu-iotests/check | 98 > ++++++++++++++++++++++++++++++++++------ > tests/qemu-iotests/common | 8 ++-- > tests/qemu-iotests/common.config | 2 +- > tests/qemu-iotests/common.rc | 8 ++-- > tests/qemu-iotests/iotests.py | 3 +- > 5 files changed, 94 insertions(+), 25 deletions(-) > > diff --git a/tests/qemu-iotests/check b/tests/qemu-iotests/check > index e2ed5a9..bd917a1 100755 > --- a/tests/qemu-iotests/check > +++ b/tests/qemu-iotests/check > @@ -34,22 +34,89 @@ timestamp=${TIMESTAMP:=false} > # generic initialization > iam=check > > +_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 as and always 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 -q "$build_root" > + for binary in *-softmmu/qemu-system-* > + do > + if [ -x "$binary" ] > + then > + export QEMU_PROG="$build_root/$binary" > + break > + fi > + done > + popd -q > + fi > +fi
Sensible probe! > + > +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 ! . ./common.config > +if ! . "$source_iotests/common.config" > then > - echo "$iam: failed to source common.config" > - exit 1 > + _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 > diff --git a/tests/qemu-iotests/common b/tests/qemu-iotests/common > index 0aaf84d..3c53c4f 100644 > --- a/tests/qemu-iotests/common > +++ b/tests/qemu-iotests/common > @@ -59,7 +59,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 +84,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 +366,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 +402,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 > > diff --git a/tests/qemu-iotests/common.config > b/tests/qemu-iotests/common.config > index d90a8bc..bd6790b 100644 > --- a/tests/qemu-iotests/common.config > +++ b/tests/qemu-iotests/common.config > @@ -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 > diff --git a/tests/qemu-iotests/common.rc b/tests/qemu-iotests/common.rc > index 195c564..e0ea7e3 100644 > --- a/tests/qemu-iotests/common.rc > +++ b/tests/qemu-iotests/common.rc > @@ -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 $here is unused now, Worth to clean up in all test cases in a follow up patch. Reviewed-by: Fam Zheng <f...@redhat.com>