aboutsummaryrefslogtreecommitdiff
path: root/tests/scripts.sh
diff options
context:
space:
mode:
Diffstat (limited to 'tests/scripts.sh')
-rwxr-xr-xtests/scripts.sh79
1 files changed, 72 insertions, 7 deletions
diff --git a/tests/scripts.sh b/tests/scripts.sh
index 30fb42f1..dda57e43 100755
--- a/tests/scripts.sh
+++ b/tests/scripts.sh
@@ -2,7 +2,7 @@
#
# SPDX-License-Identifier: BSD-2-Clause
#
-# Copyright (c) 2018-2021 Gavin D. Howard and contributors.
+# Copyright (c) 2018-2023 Gavin D. Howard and contributors.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
@@ -27,54 +27,90 @@
# POSSIBILITY OF SUCH DAMAGE.
#
-set -e
-
script="$0"
testdir=$(dirname "${script}")
+. "$testdir/../scripts/functions.sh"
+
+# Just print the usage and exit with an error. This can receive a message to
+# print.
+# @param 1 A message to print.
+usage() {
+ if [ $# -eq 1 ]; then
+ printf '%s\n\n' "$1"
+ fi
+ printf 'usage: %s [-n] dir [run_extra_tests] [run_stack_tests] [generate_tests] [time_tests] [exec args...]\n' "$script"
+ exit 1
+}
+
+pids=""
+
+# We need to figure out if we should run stuff in parallel.
+pll=1
+
+while getopts "n" opt; do
+
+ case "$opt" in
+ n) pll=0 ; set -e ;;
+ ?) usage "Invalid option: $opt" ;;
+ esac
+
+done
+shift $(($OPTIND - 1))
+
# Command-line processing.
if [ "$#" -eq 0 ]; then
- printf 'usage: %s dir [run_extra_tests] [run_stack_tests] [generate_tests] [time_tests] [exec args...]\n' "$script"
- exit 1
+ usage "Need at least 1 argument"
else
d="$1"
shift
+ check_d_arg "$d"
fi
if [ "$#" -gt 0 ]; then
run_extra_tests="$1"
shift
+ check_bool_arg "$run_extra_tests"
else
run_extra_tests=1
+ check_bool_arg "$run_extra_tests"
fi
if [ "$#" -gt 0 ]; then
run_stack_tests="$1"
shift
+ check_bool_arg "$run_stack_tests"
else
run_stack_tests=1
+ check_bool_arg "$run_stack_tests"
fi
if [ "$#" -gt 0 ]; then
generate="$1"
shift
+ check_bool_arg "$generate"
else
generate=1
+ check_bool_arg "$generate"
fi
if [ "$#" -gt 0 ]; then
time_tests="$1"
shift
+ check_bool_arg "$time_tests"
else
time_tests=0
+ check_bool_arg "$time_tests"
fi
if [ "$#" -gt 0 ]; then
exe="$1"
shift
+ check_exec_arg "$exe"
else
exe="$testdir/../bin/$d"
+ check_exec_arg "$exe"
fi
scriptdir="$testdir/$d/scripts"
@@ -85,7 +121,36 @@ scripts=$(cat "$scriptdir/all.txt")
for s in $scripts; do
f=$(basename "$s")
- sh "$testdir/script.sh" "$d" "$f" "$run_extra_tests" "$run_stack_tests" \
- "$generate" "$time_tests" "$exe" "$@"
+
+ if [ "$pll" -ne 0 ]; then
+ sh "$testdir/script.sh" "$d" "$f" "$run_extra_tests" "$run_stack_tests" \
+ "$generate" "$time_tests" "$exe" "$@" &
+ pids="$pids $!"
+ else
+ sh "$testdir/script.sh" "$d" "$f" "$run_extra_tests" "$run_stack_tests" \
+ "$generate" "$time_tests" "$exe" "$@"
+ fi
done
+
+if [ "$pll" -ne 0 ]; then
+
+ exit_err=0
+
+ for p in $pids; do
+
+ wait "$p"
+ err="$?"
+
+ if [ "$err" -ne 0 ]; then
+ printf 'A script failed!\n'
+ exit_err=1
+ fi
+
+ done
+
+ if [ "$exit_err" -ne 0 ]; then
+ exit 1
+ fi
+
+fi