blob: aa2e65f622ce3c426fca38fd854e8695ca2a3c99 [file] [log] [blame]
#!/usr/bin/env bash
verbose="no"
run_all_tests="no" # don't run nodefault tests
if [ ! -f config.mak ]; then
echo "run ./configure && make first. See ./configure -h"
exit 1
fi
source config.mak
source scripts/common.bash
function usage()
{
cat <<EOF
Usage: $0 [-h] [-v] [-a] [-g group] [-j NUM-TASKS]
-h: Output this help text
-v: Enables verbose mode
-a: Run all tests, including those flagged as 'nodefault'
and those guarded by errata.
-g: Only execute tests in the given group
-j: Execute tests in parallel
Set the environment variable QEMU=/path/to/qemu-system-ARCH to
specify the appropriate qemu binary for ARCH-run.
EOF
}
RUNTIME_arch_run="./$TEST_DIR/run"
source scripts/runtime.bash
while getopts "ag:hj:v" opt; do
case $opt in
a)
run_all_tests="yes"
export ERRATA_FORCE=y
;;
g)
only_group=$OPTARG
;;
h)
usage
exit
;;
j)
unittest_run_queues=$OPTARG
if (( $unittest_run_queues <= 0 )); then
echo "Invalid -j option: $unittest_run_queues"
exit 2
fi
;;
v)
verbose="yes"
;;
*)
exit 2
;;
esac
done
# RUNTIME_log_file will be configured later
RUNTIME_log_stderr () { cat >> $RUNTIME_log_file; }
RUNTIME_log_stdout () {
if [ "$PRETTY_PRINT_STACKS" = "yes" ]; then
./scripts/pretty_print_stacks.py $1 >> $RUNTIME_log_file
else
cat >> $RUNTIME_log_file
fi
}
function run_task()
{
local testname="$1"
while (( $(jobs | wc -l) == $unittest_run_queues )); do
# wait for any background test to finish
wait -n 2>/dev/null
done
RUNTIME_log_file="${unittest_log_dir}/${testname}.log"
if [ $unittest_run_queues = 1 ]; then
run "$@"
else
run "$@" &
fi
}
: ${unittest_log_dir:=logs}
: ${unittest_run_queues:=1}
config=$TEST_DIR/unittests.cfg
rm -rf $unittest_log_dir.old
[ -d $unittest_log_dir ] && mv $unittest_log_dir $unittest_log_dir.old
mkdir $unittest_log_dir || exit 2
echo "BUILD_HEAD=$(cat build-head)" > $unittest_log_dir/SUMMARY
trap "wait; exit 130" SIGINT
for_each_unittest $config run_task
# wait until all tasks finish
wait