diff options
Diffstat (limited to 'tests/scripts.sh')
-rwxr-xr-x | tests/scripts.sh | 79 |
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 |