#!/usr/bin/env bash set -euxo pipefail export TB_VERSION_WARNING=0 run_test() { t=$1 echo "** Running $t **" echo "** $(cat $t)" tmpfile=$(mktemp) retries=0 TOTAL_RETRIES=3 # When appending fixtures, we need to retry in case of the data is not replicated in time while [ $retries -lt $TOTAL_RETRIES ]; do # Run the test and store the output in a temporary file bash $t $2 >$tmpfile exit_code=$? if [ "$exit_code" -eq 0 ]; then # If the test passed, break the loop if diff -B ${t}.result $tmpfile >/dev/null 2>&1; then break # If the test failed, increment the retries counter and try again else retries=$((retries+1)) fi # If the bash command failed, print an error message and break the loop else break fi done if diff -B ${t}.result $tmpfile >/dev/null 2>&1; then echo "✅ Test $t passed" rm $tmpfile return 0 elif [ $retries -eq $TOTAL_RETRIES ]; then echo "🚨 ERROR: Test $t failed, diff:"; diff -B ${t}.result $tmpfile rm $tmpfile return 1 else echo "🚨 ERROR: Test $t failed with bash command exit code $?" cat $tmpfile rm $tmpfile return 1 fi echo "" } export -f run_test fail=0 find ./tests -name "*.test" -print0 | xargs -0 -I {} -P 4 bash -c 'run_test "$@"' _ {} || fail=1 if [ $fail == 1 ]; then exit -1; fi