[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v2 1/7] iotests: Allow out-of-tree run
From: |
Fam Zheng |
Subject: |
Re: [Qemu-devel] [PATCH v2 1/7] iotests: Allow out-of-tree run |
Date: |
Thu, 22 May 2014 14:45:54 +0800 |
User-agent: |
Mutt/1.5.23 (2014-03-12) |
On Tue, 05/20 22:23, 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 <address@hidden>
> ---
> tests/qemu-iotests/check | 95
> +++++++++++++++++++++++++++++++++-------
> 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, 91 insertions(+), 25 deletions(-)
>
> diff --git a/tests/qemu-iotests/check b/tests/qemu-iotests/check
> index e2ed5a9..aa30ce5 100755
> --- a/tests/qemu-iotests/check
> +++ b/tests/qemu-iotests/check
> @@ -34,22 +34,86 @@ 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
> + build_root="$build_iotests/../.."
> +
> + if [ -x "$build_iotests/socket_scm_helper" ]
> + then
> + export SOCKET_SCM_HELPER="$build_iotests/socket_scm_helper"
> + fi
> +else
> + # called from the source tree
> + source_iotests=$PWD
> +fi
> +
> +if [ -n "$build_root" ]
> +then
> + if [ -z "$QEMU_PROG" ]
> + then
I think it would be a good idea to uniform the two cases: if running from
source tree, simply let build_root=$source_iotests/../.. So we don't need the
condition here, and QEMU_*_PROG is automatically set for both cases, instead of
only for out-of-tree.
Fam
> + 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
> +
> + if [[ -z $QEMU_IMG_PROG && -x "$build_root/qemu-img" ]]
> + then
> + export QEMU_IMG_PROG="$build_root/qemu-img"
> + fi
> +
> + if [[ -z $QEMU_IO_PROG && -x "$build_root/qemu-io" ]]
> + then
> + export QEMU_IO_PROG="$build_root/qemu-io"
> + fi
> +
> + if [[ -z $QEMU_NBD_PROG && -x "$build_root/qemu-nbd" ]]
> + then
> + export QEMU_NBD_PROG="$build_root/qemu-nbd"
> + fi
> +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 +258,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 +279,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 +307,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 +329,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
> diff --git a/tests/qemu-iotests/iotests.py b/tests/qemu-iotests/iotests.py
> index f6c437c..39a4cfc 100644
> --- a/tests/qemu-iotests/iotests.py
> +++ b/tests/qemu-iotests/iotests.py
> @@ -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)
>
> --
> 1.9.2
>
- [Qemu-devel] [PATCH v2 0/7] iotests: Allow out-of-tree run, Max Reitz, 2014/05/20
- [Qemu-devel] [PATCH v2 1/7] iotests: Allow out-of-tree run, Max Reitz, 2014/05/20
- Re: [Qemu-devel] [PATCH v2 1/7] iotests: Allow out-of-tree run,
Fam Zheng <=
- [Qemu-devel] [PATCH v2 2/7] configure: Enable out-of-tree iotests, Max Reitz, 2014/05/20
- [Qemu-devel] [PATCH v2 3/7] iotests: Add default common.env, Max Reitz, 2014/05/20
- [Qemu-devel] [PATCH v2 4/7] iotests: Source common.env, Max Reitz, 2014/05/20
- [Qemu-devel] [PATCH v2 5/7] iotests: Use $PYTHON for Python scripts, Max Reitz, 2014/05/20
- [Qemu-devel] [PATCH v2 6/7] iotests: Drop Python version from 065's Shebang, Max Reitz, 2014/05/20
- [Qemu-devel] [PATCH v2 7/7] iotests: Fix 083 for out-of-tree builds, Max Reitz, 2014/05/20