mirror of
https://github.com/luxfi/evm.git
synced 2026-09-24 00:27:44 +00:00
59 lines
2.0 KiB
Bash
Executable File
59 lines
2.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
set -o errexit
|
|
set -o nounset
|
|
set -o pipefail
|
|
# TODO(marun) Ensure the working directory is the repository root or a non-canonical set of tests may be executed
|
|
|
|
# Root directory
|
|
EVM_PATH=$(
|
|
cd "$(dirname "${BASH_SOURCE[0]}")"
|
|
cd .. && pwd
|
|
)
|
|
|
|
# Load the constants
|
|
source "$EVM_PATH"/scripts/constants.sh
|
|
|
|
# We pass in the arguments to this script directly to enable easily passing parameters such as enabling race detection,
|
|
# parallelism, and test coverage.
|
|
# DO NOT RUN tests from the top level "tests" directory since they are run by ginkgo
|
|
race="-race"
|
|
if [[ -n "${NO_RACE:-}" ]]; then
|
|
race=""
|
|
fi
|
|
|
|
# MAX_RUNS bounds the attempts to retry the tests before giving up
|
|
# This is useful for flaky tests
|
|
MAX_RUNS=4
|
|
for ((i = 1; i <= MAX_RUNS; i++));
|
|
do
|
|
# shellcheck disable=SC2046
|
|
go test -shuffle=on ${race:-} -timeout="${TIMEOUT:-600s}" -coverprofile=coverage.out -covermode=atomic "$@" $(go list ./... | grep -v github.com/luxfi/evm/tests) | tee test.out || command_status=$?
|
|
|
|
# If the test passed, exit
|
|
if [[ ${command_status:-0} == 0 ]]; then
|
|
rm test.out
|
|
exit 0
|
|
else
|
|
unset command_status # Clear the error code for the next run
|
|
fi
|
|
|
|
# If the test failed, print the output
|
|
unexpected_failures=$(
|
|
# First grep pattern corresponds to test failures, second pattern corresponds to test panics due to timeouts
|
|
(grep "^--- FAIL" test.out | awk '{print $3}' || grep -E '^\s+Test.+ \(' test.out | awk '{print $1}') |
|
|
sort -u | comm -23 - <(sed 's/\r$//' ./scripts/known_flakes.txt)
|
|
)
|
|
if [ -n "${unexpected_failures}" ]; then
|
|
echo "Unexpected test failures: ${unexpected_failures}"
|
|
exit 1
|
|
fi
|
|
|
|
# Note the absence of unexpected failures cannot be indicative that we only need to run the tests that failed,
|
|
# for example a test may panic and cause subsequent tests in that package to not run.
|
|
# So we loop here.
|
|
echo "Test run $i failed with known flakes, retrying..."
|
|
done
|
|
|
|
# If we reach here, we have failed all retries
|
|
exit 1 |