Spaces:
Sleeping
Sleeping
| set -eou pipefail | |
| function main() { | |
| # This script runs all non-benchmark tests if no CMD switch is given and the respective tests otherwise. | |
| run_all_tests=true | |
| run_acceptance_tests=false | |
| run_module_tests=false | |
| run_unit_and_integration_tests=false | |
| run_unit_tests=false | |
| run_integration_tests=false | |
| run_benchmark=false | |
| run_module_only_backup_tests=false | |
| run_module_except_backup_tests=false | |
| while [[ "$#" -gt 0 ]]; do | |
| case $1 in | |
| --unit-only|-u) run_all_tests=false; run_unit_tests=true;; | |
| --unit-and-integration-only|-ui) run_all_tests=false; run_unit_and_integration_tests=true;; | |
| --integration-only|-i) run_all_tests=false; run_integration_tests=true;; | |
| --acceptance-only|--e2e-only|-a) run_all_tests=false; run_acceptance_tests=true ;; | |
| --acceptance-module-tests-only|--modules-only|-m) run_all_tests=false; run_module_tests=true; run_module_only_backup_tests=true; run_module_except_backup_tests=true;; | |
| --acceptance-module-tests-only-backup|--modules-backup-only|-mob) run_all_tests=false; run_module_tests=true; run_module_only_backup_tests=true;; | |
| --acceptance-module-tests-except-backup|--modules-except-backup|-meb) run_all_tests=false; run_module_tests=true; run_module_except_backup_tests=true; echo $run_module_except_backup_tests ;; | |
| --benchmark-only|-b) run_all_tests=false; run_benchmark=true;; | |
| --help|-h) printf '%s\n' \ | |
| "Options:"\ | |
| "--unit-only | -u"\ | |
| "--unit-and-integration-only | -ui"\ | |
| "--integration-only | -i"\ | |
| "--acceptance-only | -a"\ | |
| "--acceptance-module-tests-only | --modules-only | -m"\ | |
| "--acceptance-module-tests-only-backup | --modules-backup-only | -mob"\ | |
| "--acceptance-module-tests-except-backup | --modules-except-backup | -meb"\ | |
| "--benchmark-only | -b" \ | |
| "--help | -h"; exit 1;; | |
| *) echo "Unknown parameter passed: $1"; exit 1 ;; | |
| esac | |
| shift | |
| done | |
| # Jump to root directory | |
| cd "$( dirname "${BASH_SOURCE[0]}" )"/.. | |
| echo "INFO: In directory $PWD" | |
| echo "INFO: This script will suppress most output, unless a command ultimately fails" | |
| echo " Then it will print the output of the failed command." | |
| echo_green "Prepare workspace..." | |
| # Remove data directory in case of previous runs | |
| rm -rf data | |
| echo "Done!" | |
| if $run_unit_and_integration_tests || $run_unit_tests || $run_all_tests | |
| then | |
| echo_green "Run all unit tests..." | |
| run_unit_tests "$@" | |
| echo_green "Unit tests successful" | |
| fi | |
| if $run_unit_and_integration_tests || $run_integration_tests || $run_all_tests | |
| then | |
| echo_green "Run integration tests..." | |
| run_integration_tests "$@" | |
| echo_green "Integration tests successful" | |
| fi | |
| if $run_acceptance_tests || $run_all_tests || $run_benchmark | |
| then | |
| echo "Start docker container needed for acceptance and/or benchmark test" | |
| echo_green "Stop any running docker-compose containers..." | |
| suppress_on_success docker compose -f docker-compose-test.yml down --remove-orphans | |
| echo_green "Start up weaviate and backing dbs in docker-compose..." | |
| echo "This could take some time..." | |
| tools/test/run_ci_server.sh | |
| # echo_green "Import required schema and test fixtures..." | |
| # # Note: It's not best practice to do this as part of the test script | |
| # # It would be better if each test independently prepared (and also | |
| # # cleaned up) the test fixtures it needs, but one step at a time ;) | |
| # suppress_on_success import_test_fixtures | |
| if $run_benchmark | |
| then | |
| echo_green "Run performance tracker..." | |
| ./test/benchmark/run_performance_tracker.sh | |
| fi | |
| if $run_acceptance_tests || $run_all_tests | |
| then | |
| echo_green "Run acceptance tests..." | |
| run_acceptance_tests "$@" | |
| fi | |
| fi | |
| if $run_module_tests; then | |
| local module_test_image=weaviate:module-tests | |
| echo_green "Running module acceptance tests..." | |
| echo_green "Stop any running docker-compose containers..." | |
| suppress_on_success docker compose -f docker-compose-test.yml down --remove-orphans | |
| echo_green "Building weaviate image for module acceptance tests..." | |
| echo "This could take some time..." | |
| GIT_HASH=$(git rev-parse --short HEAD) | |
| docker build --build-arg GITHASH="$GIT_HASH" -t $module_test_image . | |
| export "TEST_WEAVIATE_IMAGE"=$module_test_image | |
| echo_green "Weaviate image successfully built, run module tests..." | |
| run_module_tests "$@" | |
| echo_green "Module acceptance tests successful" | |
| fi | |
| echo "Done!" | |
| } | |
| function run_unit_tests() { | |
| if [[ "$*" == *--acceptance-only* ]]; then | |
| echo "Skipping unit test" | |
| return | |
| fi | |
| go test -race -coverprofile=coverage-unit.txt -covermode=atomic -count 1 $(go list ./... | grep -v 'test/acceptance' | grep -v 'test/modules') | grep -v '\[no test files\]' | |
| } | |
| function run_integration_tests() { | |
| if [[ "$*" == *--acceptance-only* ]]; then | |
| echo "Skipping integration test" | |
| return | |
| fi | |
| ./test/integration/run.sh --include-slow | |
| } | |
| function run_acceptance_tests() { | |
| ./test/acceptance/run.sh --include-slow | |
| } | |
| function run_module_only_backup_tests() { | |
| for pkg in $(go list ./... | grep 'test/modules' | grep 'test/modules/backup'); do | |
| if ! go test -count 1 -race "$pkg"; then | |
| echo "Test for $pkg failed" >&2 | |
| return 1 | |
| fi | |
| done | |
| } | |
| function run_module_except_backup_tests() { | |
| for pkg in $(go list ./... | grep 'test/modules' | grep -v 'test/modules/backup'); do | |
| if ! go test -count 1 -race "$pkg"; then | |
| echo "Test for $pkg failed" >&2 | |
| return 1 | |
| fi | |
| done | |
| } | |
| function run_module_tests() { | |
| if $run_module_only_backup_tests; then | |
| run_module_only_backup_tests "$@" | |
| fi | |
| if $run_module_except_backup_tests; then | |
| run_module_except_backup_tests "$@" | |
| fi | |
| } | |
| suppress_on_success() { | |
| out="$("${@}" 2>&1)" || { echo_red "FAILED!"; echo "$out"; return 1; } | |
| echo "Done!" | |
| } | |
| function echo_green() { | |
| green='\033[0;32m' | |
| nc='\033[0m' | |
| echo -e "${green}${*}${nc}" | |
| } | |
| function echo_red() { | |
| red='\033[0;31m' | |
| nc='\033[0m' | |
| echo -e "${red}${*}${nc}" | |
| } | |
| main "$@" | |