diff --git a/flaky_test.sh b/flaky_test.sh new file mode 100755 index 000000000..e492709c5 --- /dev/null +++ b/flaky_test.sh @@ -0,0 +1,56 @@ +#!/bin/bash + +# This script runs flaky tests on various packages, optionally filtered by dbtype or rpc. +# Usage: +# - To run all flaky tests, don't add any arguments. +# - To run flaky tests for gob only, add `-rpc=*gob` as an argument to this script. +# - To run flaky tests for a single dbtype, add `-dbtype=*mysql` as an argument. +# Example: +# ./flaky_tests.sh -dbtype=*mysql -rpc=*gob + +packages=("agents" "apier/v1" "apier/v2" "dispatchers" "engine" "ers" "loaders" "general_tests" "sessions") +dbtypes=("*internal" "*mysql" "*mongo" "*postgres") + +# Tests that are independent of the dbtype flag and run only once +single_run_packages=("config" "services" "migrator") + +results=() + +execute_test() { + local pkg=$1 + shift # Remove the first argument, which is the package name, to pass the rest to go test + echo "Executing: go test github.com/cgrates/cgrates/$pkg -tags=flaky $@" + go test "github.com/cgrates/cgrates/$pkg" -tags="flaky" "$@" + results+=($?) +} + +go clean --cache + +# Execute flaky tests based on passed arguments +if [ "$#" -ne 0 ]; then + for pkg in "${packages[@]}"; do + execute_test "$pkg" "$@" + done +else + # Execute flaky tests for all db types if no arguments have been passed + for db in "${dbtypes[@]}"; do + for pkg in "${packages[@]}"; do + execute_test "$pkg" "-dbtype=$db" + done + done +fi + +# Execute the flaky tests that run only once +for test in "${single_run_packages[@]}"; do + execute_test "$test" +done + +# Check the results and exit with an appropriate code +pass=0 +for val in "${results[@]}"; do + if [ "$val" -ne 0 ]; then + pass=1 + break + fi +done +exit $pass \ No newline at end of file