Some checks failed
CodeQL / Analyze (push) Waiting to run
Docker Build & Push Simapp (main) / docker-build (push) Waiting to run
golangci-lint / lint (push) Waiting to run
Tests / Code Coverage / build (amd64) (push) Waiting to run
Tests / Code Coverage / build (arm64) (push) Waiting to run
Tests / Code Coverage / unit-tests (map[additional-args:-tags="test_e2e" name:e2e path:./e2e]) (push) Waiting to run
Tests / Code Coverage / unit-tests (map[name:08-wasm path:./modules/light-clients/08-wasm]) (push) Waiting to run
Tests / Code Coverage / unit-tests (map[name:ibc-go path:.]) (push) Waiting to run
Deploy to GitHub Pages / Deploy to GitHub Pages (push) Has been cancelled
Buf-Push / push (push) Has been cancelled
116 lines
3.7 KiB
Bash
Executable file
116 lines
3.7 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
set -eo pipefail
|
|
|
|
TEST="${1:-}"
|
|
export ENTRY_POINT="${2:-}"
|
|
|
|
function _verify_jq() {
|
|
if ! command -v jq > /dev/null ; then
|
|
echo "jq is required to extract test entrypoint."
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
function _verify_fzf() {
|
|
if ! command -v fzf > /dev/null ; then
|
|
echo "fzf is required to interactively select a test."
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
function _verify_test_dependencies() {
|
|
if [ -z "${TEST}" ]; then
|
|
# fzf is only required if we are not explicitly specifying a test.
|
|
_verify_fzf
|
|
fi
|
|
# jq is always required to determine the entrypoint of the test.
|
|
_verify_jq
|
|
}
|
|
|
|
function _verify_suite_dependencies() {
|
|
if [ -z "${ENTRY_POINT}" ]; then
|
|
# fzf is only required if we are not explicitly specifying an entrypoint.
|
|
_verify_fzf
|
|
fi
|
|
# jq is always required to determine the entrypoint of the test.
|
|
_verify_jq
|
|
}
|
|
|
|
# _select_test_config lets you dynamically select a test config for the specific test.
|
|
function _select_test_config() {
|
|
ls -1 dev-configs | fzf
|
|
}
|
|
|
|
# _get_test returns the test that should be used in the e2e test. If an argument is provided, that argument
|
|
# is returned. Otherwise, fzf is used to interactively choose from all available tests.
|
|
function _get_test(){
|
|
# if an argument is provided, it is used directly. This enables the drop down selection with fzf.
|
|
if [ -n "${1:-}" ]; then
|
|
echo "$1"
|
|
return
|
|
# if fzf and jq are installed, we can use them to provide an interactive mechanism to select from all available tests.
|
|
else
|
|
cd ..
|
|
go run -mod=readonly cmd/build_test_matrix/main.go | jq -r '.include[] | .test' | fzf
|
|
cd - > /dev/null
|
|
fi
|
|
}
|
|
|
|
# run_test runs a single E2E test.
|
|
function run_test() {
|
|
_verify_test_dependencies
|
|
|
|
# if test is set, that is used directly, otherwise the test can be interactively provided if fzf is installed.
|
|
TEST="$(_get_test ${TEST})"
|
|
|
|
# if jq is installed, we can automatically determine the test entrypoint.
|
|
if command -v jq > /dev/null; then
|
|
cd ..
|
|
ENTRY_POINT="$(go run -mod=readonly cmd/build_test_matrix/main.go | jq -r --arg TEST "${TEST}" '.include[] | select( .test == $TEST) | .entrypoint')"
|
|
cd - > /dev/null
|
|
fi
|
|
|
|
|
|
# find the name of the file that has this test in it.
|
|
test_file="$(grep --recursive --files-with-matches './' -e "${TEST}()")"
|
|
|
|
# we run the test on the directory as specific files may reference types in other files but within the package.
|
|
test_dir="$(dirname $test_file)"
|
|
|
|
# run the test file directly, this allows log output to be streamed directly in the terminal sessions
|
|
# without needed to wait for the test to finish.
|
|
# it shouldn't take 30m, but the wasm test can be quite slow, so we can be generous.
|
|
go test -v "${test_dir}" --run ${ENTRY_POINT} -testify.m ^${TEST}$ -timeout 30m
|
|
}
|
|
|
|
# run_suite runs a full E2E test suite.
|
|
function run_suite() {
|
|
_verify_suite_dependencies
|
|
# if jq is installed, we can automatically determine the test entrypoint.
|
|
if [ -z "${ENTRY_POINT}" ]; then
|
|
cd ..
|
|
ENTRY_POINT="$(go run -mod=readonly cmd/build_test_matrix/main.go | jq -r '.include[] | .entrypoint' | uniq | fzf)"
|
|
cd - > /dev/null
|
|
fi
|
|
|
|
# find the name of the file that has this test in it.
|
|
test_file="$(grep --recursive --files-with-matches './tests' -e "${ENTRY_POINT}(")"
|
|
test_dir="$(dirname $test_file)"
|
|
|
|
go test -v "${test_dir}" --run ^${ENTRY_POINT}$ -timeout 30m -p 10
|
|
}
|
|
|
|
|
|
# if the dev configs directory is present, enable fzf completion to select a test config file to use.
|
|
if [[ -d "dev-configs" ]]; then
|
|
export E2E_CONFIG_PATH="$(pwd)/dev-configs/$(_select_test_config)"
|
|
echo "Using configuration file at ${E2E_CONFIG_PATH}"
|
|
fi
|
|
|
|
if [ "${RUN_SUITE:-}" = "true" ]; then
|
|
run_suite
|
|
else
|
|
run_test
|
|
fi
|
|
|