From e7d29902a6a7d9cea7c8a524478bb70062100d34 Mon Sep 17 00:00:00 2001 From: Martin Pool Date: Wed, 29 Aug 2001 07:33:27 +0000 Subject: [PATCH] Redraft testsuite driver script to unify 'make check', 'make installcheck' and buildfarm tests. Add note from discussion with Tim about finding files/directories under different circumstances. Now works (?) with VPATH build. --- .cvsignore | 1 + Makefile.in | 13 ++- configure.in | 2 +- runtests.sh | 137 ++++++++++++++++++++++++++ testsuite/config.sh.in => shconfig.in | 0 testsuite/master.test | 99 ------------------- 6 files changed, 151 insertions(+), 101 deletions(-) create mode 100755 runtests.sh rename testsuite/config.sh.in => shconfig.in (100%) delete mode 100755 testsuite/master.test diff --git a/.cvsignore b/.cvsignore index 7e45f316..10ea6087 100644 --- a/.cvsignore +++ b/.cvsignore @@ -5,5 +5,6 @@ config.h config.log config.status rsync +shconfig testdir zlib/dummy diff --git a/Makefile.in b/Makefile.in index 7e3df792..d2799c71 100644 --- a/Makefile.in +++ b/Makefile.in @@ -91,5 +91,16 @@ finddead: test: check + +# There seems to be no standard way to specify some variables as +# exported from a Makefile apart from listing them like this. + +# TODO: These targets both ought to depend on a set of test programs +# to build, if any. + check: - rsync_bin=`pwd`/rsync srcdir="$(srcdir)" testdir=`pwd`/testdir $(srcdir)/testsuite/master.test + rsync_bin=./rsync srcdir="$(srcdir)" $(srcdir)/runtests.sh + +installcheck: + rsync_bin="$(bindir)/rsync" srcdir="$(srcdir)" $(srcdir)/runtests.sh + diff --git a/configure.in b/configure.in index 4460caed..5f72a312 100644 --- a/configure.in +++ b/configure.in @@ -340,4 +340,4 @@ AC_SUBST(OBJ_RESTORE) AC_SUBST(CC_SHOBJ_FLAG) AC_SUBST(BUILD_POPT) -AC_OUTPUT(Makefile lib/dummy zlib/dummy testsuite/config.sh) +AC_OUTPUT(Makefile lib/dummy zlib/dummy shconfig) diff --git a/runtests.sh b/runtests.sh new file mode 100755 index 00000000..2f67d456 --- /dev/null +++ b/runtests.sh @@ -0,0 +1,137 @@ +#! /bin/sh + +# Copyright (C) 2001 by Martin Pool + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License version +# 2.1 as published by the Free Software Foundation. +# +# 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + +# rsync top-level test script -- this invokes all the other more +# detailed tests in order. This script can either be called by `make +# check' or `make installcheck'. `check' runs against the copies of +# the program and other files in the build directory, and +# `installcheck' against the installed copy of the program. + +# In either case we need to also be able to find the source directory, +# since we read test scripts and possibly other information from +# there. + +# Whenever possible, informational messages are written to stdout and +# error messages to stderr. They're separated out by the build farm +# display scripts. + +# According to the GNU autoconf manual, the only valid place to set up +# directory locations is through Make, since users are allowed to (try +# to) change their mind on the Make command line. So, Make has to +# pass in all the values we need. + +# For other configured settings we read ./config.sh, which tells us +# about shell commands on this machine and similar things. + +# rsync_bin gives the location of the rsync binary. This is either +# builddir/rsync if we're testing an uninstalled copy, or +# install_prefix/bin/rsync if we're testing an installed copy. On the +# build farm rsync will be installed, but into a scratch /usr. + +# srcdir gives the location of the source tree, which lets us find the +# build scripts. At the moment we assume we are invoked from the +# source directory. + +# This script must be invoked from the build directory. + +# A scratch directory, 'testtmp', is created in the build directory to +# hold working files. + +# Both this script and the Makefile have to be pretty conservative +# about which Unix features they use. + +# Exit codes: (passed back to build farm): + +# 1 tests failed +# 2 error in starting tests + + +set -e + +. "./shconfig" + + +echo "============================================================" +echo "$0 running in `pwd`" +echo " rsync_bin=$rsync_bin" +echo " srcdir=$srcdir" + +if ! test -f $rsync_bin +then + echo "rsync_bin $rsync_bin is not a file" >&2 + exit 2 +fi + +if ! test -d $srcdir +then + echo "srcdir $srcdir is not a directory" >&2 + exit 2 +fi + + +export rsync_bin + +skipped=0 +missing=0 +passed=0 +failed=0 + +scratchdir=./testtmp +[ -d "$scratchdir" ] && rm -r "$scratchdir" +mkdir "$scratchdir" + +echo " scratchdir=$scratchdir" +suitedir="$srcdir/testsuite" + +for testbase in rsync-hello hands +do + testscript="$suitedir/$testbase.test" + if test \! -f "$testscript" + then + echo "$testscript does not exist" >&2 + missing=`expr $missing + 1` + continue + fi + + echo "------------------------------------------------------------" + echo "----- $testbase running" + + if sh "$testscript" + then + echo "----- $testbase completed succesfully" + passed=`expr $passed + 1` + else + echo "----- $testbase failed!" + failed=`expr $failed + 1` + fi +done + +echo '------------------------------------------------------------' +echo "----- overall results:" +echo " $passed passed" +echo " $failed failed" +echo " $skipped skipped" +echo " $missing missing" +echo '------------------------------------------------------------' + +if test $failed -gt 0 +then + exit 1 +else + exit 0 +fi diff --git a/testsuite/config.sh.in b/shconfig.in similarity index 100% rename from testsuite/config.sh.in rename to shconfig.in diff --git a/testsuite/master.test b/testsuite/master.test deleted file mode 100755 index 4df5f343..00000000 --- a/testsuite/master.test +++ /dev/null @@ -1,99 +0,0 @@ -#! /bin/sh - -# Copyright (C) 2001 by Martin Pool - -# rsync top-level test script -- this invokes all the other more -# detailed tests in order. This script can either be called by 'make -# check' or through 'runlist' from the build farm. - -# We need a few environment variables to know what to test. - -# rsync_bin gives the location of the rsync binary. This is either -# builddir/rsync if we're testing an uninstalled copy, or -# install_prefix/bin/rsync if we're testing an installed copy. On the -# build farm rsync will be installed, but into a scratch /usr. - -# srcdir gives the location of the source tree, which lets us find the -# build scripts. At the moment we assume we are invoked from the -# source directory. - -# testdir is a scratch directory for holding temporary test files. - -# The pwd is undefined when this script starts. - -set -x - -set -e - -if ! [ -d "$testdir" ] && ! mkdir "$testdir" -then - echo "warning: testdir $testdir is not a directory!" >&2 - exit 1 -fi - -testdir=`cd $testdir && pwd` - -echo "srcdir is originally \"$srcdir\"" -if [ "$srcdir" != "" ] -then - srcdir=`cd "$srcdir" && pwd` -fi - -echo "============================================================" -echo "$0 running in `pwd`" -echo " rsync_bin=$rsync_bin" -echo " srcdir=$srcdir" -echo " testdir=$testdir" - -test_names="rsync-hello hands" - -export rsync_bin -export testdir - -skipped=0 -missing=0 -passed=0 -failed=0 - -suitedir="$srcdir/testsuite" -echo " suitedir=$suitedir" - -. "$suitedir/config.sh" - -for testbase in $test_names -do - testscript="$suitedir/$testbase.test" - if test \! -f "$testscript" - then - echo "$testscript does not exist" >&2 - missing=`expr $missing + 1` - continue - fi - - echo "------------------------------------------------------------" - echo "----- $testbase running" - - if sh "$testscript" - then - echo "----- $testbase completed succesfully" - passed=`expr $passed + 1` - else - echo "----- $testbase failed!" - failed=`expr $failed + 1` - fi -done - -echo '------------------------------------------------------------' -echo "----- overall results:" -echo " $passed passed" -echo " $failed failed" -echo " $skipped skipped" -echo " $missing missing" -echo '------------------------------------------------------------' - -if test $failed -gt 0 -then - exit 1 -else - exit 0 -fi -- 2.34.1