tests: make compatible with autotools

The command 'make check' is called from 'make distcheck' (which is
used to generate official util-linux tarballs).

It means that tests/ stuff has to be compatible with autotools and
differentiate between source and build directories.

 * remove run-nonroot.sh (merged into run.sh
 * remove commands.sh.in
 * all tests and top level run.sh accept --builddir and --srcdir
   command line options
 * functions.sh modified to use $top_builddir/tests for output files

Signed-off-by: Karel Zak <kzak@redhat.com>
This commit is contained in:
Karel Zak 2012-08-03 21:24:51 +02:00
parent b456a677f2
commit 1b03e2cd33
8 changed files with 86 additions and 33 deletions

View File

@ -47,6 +47,7 @@ INSTALL_EXEC_HOOKS =
UNINSTALL_HOOKS =
INSTALL_DATA_HOOKS =
CLEAN_LOCALS =
CHECK_LOCALS =
EXTRA_DIST = man/ru/ddate.1
CLEANFILES =
@ -153,3 +154,5 @@ uninstall-hook: $(UNINSTALL_HOOKS)
install-data-hook: $(INSTALL_DATA_HOOKS)
clean-local: $(CLEAN_LOCALS)
check-local: $(CHECK_LOCALS)

View File

@ -1341,7 +1341,6 @@ misc-utils/uuidd.rc
misc-utils/uuidd.service
misc-utils/uuidd.socket
po/Makefile.in
tests/commands.sh
])

1
tests/.gitignore vendored
View File

@ -1,3 +1,2 @@
commands.sh
diff
output

View File

@ -4,12 +4,17 @@ include tests/helpers/Makemodule.am
EXTRA_DIST += \
tests/expected \
tests/functions.sh \
tests/commands.sh \
tests/run.sh \
tests/run-nonroot.sh \
tests/ts
clean-local-tests:
rm -rf output diff
rm -rf $(top_builddir)/tests/output $(top_builddir)/tests/diff
TESTS += tests/run-nonroot.sh
CLEAN_LOCALS += clean-local-tests
check-local-tests: $(check_PROGRAMS)
$(top_srcdir)/tests/run.sh --srcdir=$(abs_top_srcdir) --builddir=$(abs_top_builddir) --nonroot
CHECK_LOCALS += check-local-tests

View File

@ -1,7 +1,3 @@
top_builddir=@abs_top_builddir@
top_srcdir=@abs_top_srcdir@
# Misc settings
TS_TESTUSER=${TS_TESTUSER:-"test"}

View File

@ -86,6 +86,12 @@ function ts_has_option {
echo -n $ALL | sed 's/ //g' | awk 'BEGIN { FS="="; RS="--" } /('$NAME'$|'$NAME'=)/ { print "yes" }'
}
function ts_option_argument {
NAME="$1"
ALL="$2"
echo -n $ALL | sed 's/ //g' | awk 'BEGIN { FS="="; RS="--" } /'$NAME'=/ { print $2 }'
}
function ts_init_core_env {
TS_NS="$TS_COMPONENT/$TS_TESTNAME"
TS_OUTPUT="$TS_OUTDIR/$TS_TESTNAME"
@ -118,11 +124,28 @@ function ts_init_env {
LC_ALL="POSIX"
CHARSET="UTF-8"
mydir=$(ts_canonicalize "$mydir")
export LANG LANGUAGE LC_ALL CHARSET
mydir=$(ts_canonicalize "$mydir")
# automake directories
top_srcdir=$(ts_option_argument "srcdir" "$*")
top_builddir=$(ts_option_argument "builddir" "$*")
# where is this script
TS_TOPDIR=$(ts_abspath $mydir/../../)
# default
if [ -z "$top_srcdir" ]; then
top_srcdir="$TS_TOPDIR/.."
fi
if [ -z "$top_builddir" ]; then
top_builddir="$TS_TOPDIR/.."
fi
top_srcdir=$(ts_abspath $top_srcdir)
top_builddir=$(ts_abspath $top_builddir)
TS_SCRIPT="$mydir/$(basename $0)"
TS_SUBDIR=$(dirname $TS_SCRIPT)
TS_TESTNAME=$(basename $TS_SCRIPT)
@ -133,8 +156,8 @@ function ts_init_env {
TS_SELF="$TS_SUBDIR"
TS_OUTDIR="$TS_TOPDIR/output/$TS_COMPONENT"
TS_DIFFDIR="$TS_TOPDIR/diff/$TS_COMPONENT"
TS_OUTDIR="$top_builddir/tests/output/$TS_COMPONENT"
TS_DIFFDIR="$top_builddir/tests/diff/$TS_COMPONENT"
ts_init_core_env
@ -142,7 +165,6 @@ function ts_init_env {
BLKID_FILE="$TS_OUTDIR/${TS_TESTNAME}.blkidtab"
declare -a TS_SUID_PROGS
declare -a TS_SUID_USER
declare -a TS_SUID_GROUP

View File

@ -1,9 +0,0 @@
#!/bin/bash
MYUID=$(id -ru)
if [ $MYUID -eq 0 ]; then
echo "The automatically executed tests suite is allowed for non-root users only."
exit 0
fi
exec $(cd $(dirname $0) && pwd)/run.sh

View File

@ -20,6 +20,9 @@ TS_TOPDIR=$(cd $(dirname $0) && pwd)
SUBTESTS=
OPTS=
top_srcdir=
top_builddir=
while [ -n "$1" ]; do
case "$1" in
--force)
@ -31,9 +34,34 @@ while [ -n "$1" ]; do
--memcheck)
OPTS="$OPTS --memcheck"
;;
--verbose)
OPTS="$OPTS --verbose"
;;
--nonroot)
if [ $(id -ru) -eq 0 ]; then
echo "Ignore utils-linux test suite [non-root UID expected]."
exit 0
fi
;;
--srcdir=*)
top_srcdir="${1##--srcdir=}"
;;
--builddir=*)
top_builddir="${1##--builddir=}"
;;
--*)
echo "Unknown option $1"
echo "Usage: run [--fake] [--force] [<component> ...]"
echo "Usage: "
echo " $(basename $0) [options] [<component> ...]"
echo "Options:"
echo " --force execute demanding tests"
echo " --fake do not run, setup tests only"
echo " --memcheck run with valgrind"
echo " --verbose verbose mode"
echo " --nonroot ignore test suite if user is root"
echo " --srcdir=<path> autotools top source directory"
echo " --builddir=<path> autotools top build directory"
echo
exit 1
;;
@ -44,11 +72,26 @@ while [ -n "$1" ]; do
shift
done
# For compatibility with autotools is necessary to differentiate between source
# (with test scripts) and build (with temporary files) directories when
# executed by our build-system.
#
# The default is the source tree with this script.
#
if [ -z "$top_srcdir" ]; then
top_srcdir="$TS_TOPDIR/.."
fi
if [ -z "$top_builddir" ]; then
top_builddir="$TS_TOPDIR/.."
fi
OPTS="$OPTS --srcdir=$top_srcdir --builddir=$top_builddir"
if [ -n "$SUBTESTS" ]; then
# selected tests only
for s in $SUBTESTS; do
if [ -d "$TS_TOPDIR/ts/$s" ]; then
co=$(find $TS_TOPDIR/ts/$s -type f -perm /a+x -regex ".*/[^\.~]*" | sort)
if [ -d "$top_srcdir/tests/ts/$s" ]; then
co=$(find $top_srcdir/tests/ts/$s -type f -perm /a+x -regex ".*/[^\.~]*" | sort)
comps="$comps $co"
else
echo "Unknown test component '$s'"
@ -56,17 +99,12 @@ if [ -n "$SUBTESTS" ]; then
fi
done
else
# all tests
if [ ! -f "$TS_TOPDIR/../test_tt" ]; then
if [ ! -f "$top_builddir/test_tt" ]; then
echo "Tests not compiled! Run 'make check' to fix the problem."
exit 1
fi
if [ ! -f "$TS_TOPDIR/commands.sh" ]; then
echo "Not ready to run tests! Run './configure' or './config.status' to fix the problem."
exit 1
fi
comps=$(find $TS_TOPDIR/ts/ -type f -perm /a+x -regex ".*/[^\.~]*" | sort)
comps=$(find $top_srcdir/tests/ts/ -type f -perm /a+x -regex ".*/[^\.~]*" | sort)
fi