blob: f61b6e4f77e7bf1395b1d7f999689e010892ae7e [file] [log] [blame]
#!/bin/bash
#
# Copyright (C) 2007 Karel Zak <kzak@redhat.com>
#
# This file is part of util-linux.
#
# This file is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This file 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 General Public License for more details.
#
TS_TOPDIR=$(cd ${0%/*} && pwd)
SUBTESTS=
OPTS=
top_srcdir=
top_builddir=
paraller_jobs=1
function num_cpus()
{
if lscpu -p &>/dev/null; then
lscpu -p | grep -cv '^#'
else
echo 1
fi
}
while [ -n "$1" ]; do
case "$1" in
--force)
OPTS="$OPTS --force"
;;
--fake)
OPTS="$OPTS --fake"
;;
--memcheck)
OPTS="$OPTS --memcheck"
;;
--verbose)
OPTS="$OPTS --verbose"
;;
--nonroot)
if [ $(id -ru) -eq 0 ]; then
echo "Ignore util-linux test suite [non-root UID expected]."
exit 0
fi
;;
--srcdir=*)
top_srcdir="${1##--srcdir=}"
;;
--builddir=*)
top_builddir="${1##--builddir=}"
;;
--parallel=*)
paraller_jobs="${1##--parallel=}"
OPTS="$OPTS --parallel"
;;
--parallel)
paraller_jobs=$(num_cpus)
OPTS="$OPTS --parallel"
;;
--*)
echo "Unknown option $1"
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 " --parallel=<num> number of parallel test jobs, default: num cpus"
echo
exit 1
;;
*)
SUBTESTS="$SUBTESTS $1"
;;
esac
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"
declare -a comps
if [ -n "$SUBTESTS" ]; then
# selected tests only
for s in $SUBTESTS; do
if [ -d "$top_srcdir/tests/ts/$s" ]; then
comps+=( $(find $top_srcdir/tests/ts/$s -type f -perm /a+x -regex ".*/[^\.~]*") )
else
echo "Unknown test component '$s'"
exit 1
fi
done
else
if [ ! -f "$top_builddir/test_ttyutils" ]; then
echo "Tests not compiled! Run 'make check' to fix the problem."
exit 1
fi
comps=( $(find $top_srcdir/tests/ts/ -type f -perm /a+x -regex ".*/[^\.~]*") )
fi
unset LIBMOUNT_DEBUG
unset LIBBLKID_DEBUG
unset LIBFDISK_DEBUG
echo
echo "-------------------- util-linux regression tests --------------------"
echo
echo " For development purpose only. "
echo " Don't execute on production system! "
echo
if [ $paraller_jobs -gt 1 ]; then
echo " Executing the tests in parallel ($paraller_jobs jobs) "
echo
fi
count=0
>| $top_builddir/tests/failures
printf "%s\n" ${comps[*]} |
sort |
xargs -I '{}' -P $paraller_jobs -n 1 bash -c "'{}' \"$OPTS\" ||
echo 1 >> $top_builddir/tests/failures"
declare -a fail_file
fail_file=( $( < $top_builddir/tests/failures ) ) || exit 1
rm -f $top_builddir/tests/failures
echo
echo "---------------------------------------------------------------------"
if [ ${#fail_file[@]} -eq 0 ]; then
echo " All ${#comps[@]} tests PASSED"
res=0
else
echo " ${#fail_file[@]} tests of ${#comps[@]} FAILED"
res=1
fi
echo "---------------------------------------------------------------------"
exit $res