81 lines
2.3 KiB
Bash
Executable File
81 lines
2.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
#
|
|
# This is a helper script to run test in parallel and collect logs.
|
|
# Usage:
|
|
# ./run_test.sh Run all tests.
|
|
# ./run_test.sh [test_file ...] Run specific tests.
|
|
#
|
|
# Environments:
|
|
# LOG_DIR Log directory path. (default: $ROOT/test/logs)
|
|
# JOBS The number of concurrent jobs. (default: 1)
|
|
# TIMEOUT Timeout for each job. (default: 0 (no timeout))
|
|
#
|
|
set -euo pipefail
|
|
|
|
source $(dirname $BASH_SOURCE)/init_tools.sh
|
|
|
|
ROOT=$(readlink -f $(dirname $0)/..)
|
|
LOG_DIR=${LOG_DIR:-$ROOT/test/logs}
|
|
JOBS=${JOBS:-1}
|
|
|
|
main() {
|
|
if [ $# -eq 0 ]; then
|
|
args=$(find_executable $ROOT/test/tests -iname 'test_*')
|
|
else
|
|
args="$@"
|
|
fi
|
|
num_skip=0
|
|
mkdir -p $LOG_DIR
|
|
test_files=""
|
|
log_files=""
|
|
for arg in $args; do
|
|
if [ ! -f $arg ]; then
|
|
echo "WARNING: file not found: $arg"
|
|
continue
|
|
fi
|
|
|
|
absolute_path=$(readlink -f $arg)
|
|
relative_path=${absolute_path#$ROOT/test/tests/}
|
|
log_path=$LOG_DIR/${relative_path}.log
|
|
|
|
if grep -q "^#test:disabled" $arg; then
|
|
echo "INFO: the test is marked disabled: $relative_path"
|
|
num_skip=$((num_skip+1))
|
|
continue
|
|
fi
|
|
|
|
# make sure the log dir exists.
|
|
mkdir -p $(dirname $log_path)
|
|
|
|
# remove common path for readability
|
|
test_files="$test_files ${absolute_path#$PWD/}"
|
|
log_files="$log_files ${log_path#$PWD/}"
|
|
done
|
|
|
|
start_time=$(date +%s)
|
|
|
|
parallel \
|
|
--retries 8 \
|
|
--joblog - \
|
|
--jobs $JOBS \
|
|
--timeout $TIMEOUT \
|
|
bash -c '{1} > {2} 2>&1' \
|
|
::: $test_files :::+ $log_files \
|
|
| tee $LOG_DIR/_recap \
|
|
|| true
|
|
end_time=$(date +%s)
|
|
|
|
# Get the Exitval in _recap to find if any test failed.
|
|
num_total=$(cat $LOG_DIR/_recap | wc -l)
|
|
num_total=$((num_total - 1)) # don't count header
|
|
num_fail=$(cat $LOG_DIR/_recap | awk 'NR>1 && $7!=0 {print $0}' | wc -l | tr -d ' ')
|
|
num_pass=$((num_total - num_fail))
|
|
time=$((end_time - start_time))
|
|
echo ============================================================
|
|
echo "PASS: $num_pass FAIL: $num_fail SKIP: $num_skip TIME: ${time}s"
|
|
FAILURES=$((FAILURES+$num_fail))
|
|
}
|
|
|
|
docker system prune -a -f > /dev/null
|
|
main "$@"
|