Files
fission-src/test/run_test.sh
T

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 "$@"