]>
git.ipfire.org Git - thirdparty/util-linux.git/blob - tests/run.sh
4 # Copyright (C) 2007 Karel Zak <kzak@redhat.com>
6 # This file is part of util-linux.
8 # This file is free software; you can redistribute it and/or modify
9 # it under the terms of the GNU General Public License as published by
10 # the Free Software Foundation; either version 2 of the License, or
11 # (at your option) any later version.
13 # This file is distributed in the hope that it will be useful,
14 # but WITHOUT ANY WARRANTY; without even the implied warranty of
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 # GNU General Public License for more details.
19 TS_TOPDIR
=$
(cd ${0%/*} && pwd)
35 if num
=$
(nproc
--all 2>/dev
/null
); then
38 elif num
=$
(sysctl
-n hw.ncpu
2>/dev
/null
); then
41 num
=$
(grep -c "^processor" /proc
/cpuinfo
2>/dev
/null
)
44 # translate garbage output to "1"
45 if test "$num" -gt "0" 2>/dev
/null
;then
52 function find_test_scripts
()
55 find "$searchdir" -type f
-regex ".*/[^\.~]*" \
56 \
( -perm -u=x
-o -perm -g=x
-o -perm -o=x \
)
63 --memcheck-valgrind |\
70 # these options are simply forwarded to the test scripts
77 --use-system-commands)
83 if [ $
(id
-ru) -eq 0 ]; then
84 echo "Ignore util-linux test suite [non-root UID expected]."
89 top_srcdir
="${1##--srcdir=}"
92 top_builddir
="${1##--builddir=}"
95 paraller_jobs
="${1##--parallel=}"
96 if ! [ "$paraller_jobs" -ge 0 ] 2>/dev
/null
; then
97 echo "invalid argument '$paraller_jobs' for --parallel="
102 paraller_jobs
=$
(num_cpus
)
105 EXCLUDETESTS
="${1##--exclude=}"
108 echo "Unknown option $1"
110 echo " $(basename $0) [options] [<component> ...]"
112 echo " --force execute demanding tests"
113 echo " --fake do not run, setup tests only"
114 echo " --memcheck-valgrind run with valgrind"
115 echo " --memcheck-asan enable ASAN (requires ./configure --enable-asan)"
116 echo " --nolocks don't use flock to lock resources"
117 echo " --verbose verbose mode"
118 echo " --show-diff show diff from failed tests"
119 echo " --nonroot ignore test suite if user is root"
120 echo " --use-system-commands use PATH rather than builddir"
121 echo " --noskip-commands fail on missing commands"
122 echo " --srcdir=<path> autotools top source directory"
123 echo " --builddir=<path> autotools top build directory"
124 echo " --parallel=<num> number of parallel test jobs, default: num cpus"
125 echo " --exclude=<list> exclude tests by list '<utilname>/<testname> ..'"
131 SUBTESTS
="$SUBTESTS $1"
137 # For compatibility with autotools is necessary to differentiate between source
138 # (with test scripts) and build (with temporary files) directories when
139 # executed by our build-system.
141 # The default is the source tree with this script.
143 if [ -z "$top_srcdir" ]; then
144 top_srcdir
="$TS_TOPDIR/.."
146 if [ -z "$top_builddir" ]; then
147 top_builddir
="$TS_TOPDIR/.."
150 OPTS
="$OPTS --srcdir=$top_srcdir --builddir=$top_builddir"
152 # Auto-enable ASAN to avoid conflicts between tests and binaries
153 if [ -z "$has_asan_opt" ]; then
154 asan
=$
(awk '/^ASAN_LDFLAGS/ { print $3 }' $top_builddir/Makefile
)
155 if [ -n "$asan" ]; then
156 OPTS
="$OPTS --memcheck-asan"
161 if [ -n "$SUBTESTS" ]; then
162 # selected tests only
163 for s
in $SUBTESTS; do
164 if [ -e "$top_srcdir/tests/ts/$s" ]; then
165 comps
+=( $
(find_test_scripts
"$top_srcdir/tests/ts/$s") ) ||
exit 1
167 echo "Unknown test component '$s'"
172 if [ -z "$SYSCOMMANDS" -a ! -f "$top_builddir/test_ttyutils" ]; then
173 echo "Tests not compiled! Run 'make check' to fix the problem."
177 comps
=( $
(find_test_scripts
"$top_srcdir/tests/ts") ) ||
exit 1
180 if [ -n "$EXCLUDETESTS" ]; then
181 declare -a xcomps
# temporary array
182 for ts
in ${comps[@]}; do
183 tsname
=${ts##*ts/} # test name
185 if [[ "$EXCLUDETESTS" == *${tsname}* ]]; then
186 #echo "Ignore ${tsname}."
192 comps
=("${xcomps[@]}") # replace the array
198 unset LIBSMARTCOLS_DEBUG
201 echo "-------------------- util-linux regression tests --------------------"
203 echo " For development purpose only. "
204 echo " Don't execute on production system! "
207 # TODO: add more information about system
208 printf "%13s: %-30s " "kernel" "$(uname -r)"
211 echo " options: $(echo $OPTS | sed 's/ / \\\n /g')"
214 if [ "$paraller_jobs" -ne 1 ]; then
216 [ "$paraller_jobs" -eq 0 ] && tmp
=infinite
217 echo " Executing the tests in parallel ($tmp jobs) "
219 OPTS
="$OPTS --parallel"
223 >|
$top_builddir/tests
/failures
224 printf "%s\n" ${comps[*]} |
226 xargs -I '{}' -P $paraller_jobs -n 1 bash
-c "'{}' \"$OPTS\" ||
227 echo 1 >> $top_builddir/tests/failures"
229 echo "xargs error" >&2
233 fail_file
=( $
( < $top_builddir/tests
/failures
) ) ||
exit 1
234 rm -f $top_builddir/tests
/failures
236 echo "---------------------------------------------------------------------"
237 if [ ${#fail_file[@]} -eq 0 ]; then
238 echo " All ${#comps[@]} tests PASSED"
241 echo " ${#fail_file[@]} tests of ${#comps[@]} FAILED"
244 echo "---------------------------------------------------------------------"