2023-06-22 08:01:17 +00:00
|
|
|
#!/usr/bin/env ksh
|
|
|
|
|
|
|
|
run_tests() {
|
|
|
|
test_name=$1
|
|
|
|
num_tests=$2
|
|
|
|
|
|
|
|
success_count=0
|
|
|
|
failure_count=0
|
|
|
|
runtimes=()
|
|
|
|
|
|
|
|
echo "-------------------"
|
|
|
|
echo "Running Tests for $test_name"
|
|
|
|
|
|
|
|
for ((i = 1; i <= num_tests; i++)); do
|
|
|
|
docker network prune -f >/dev/null 2>&1
|
2024-01-05 09:41:56 +00:00
|
|
|
docker rm headscale-test-suite >/dev/null 2>&1 || true
|
|
|
|
docker kill "$(docker ps -q)" >/dev/null 2>&1 || true
|
|
|
|
|
|
|
|
echo "Run $i"
|
2023-06-22 08:01:17 +00:00
|
|
|
|
|
|
|
start=$(date +%s)
|
|
|
|
docker run \
|
|
|
|
--tty --rm \
|
|
|
|
--volume ~/.cache/hs-integration-go:/go \
|
|
|
|
--name headscale-test-suite \
|
|
|
|
--volume "$PWD:$PWD" -w "$PWD"/integration \
|
|
|
|
--volume /var/run/docker.sock:/var/run/docker.sock \
|
|
|
|
--volume "$PWD"/control_logs:/tmp/control \
|
2024-09-03 07:22:17 +00:00
|
|
|
-e "HEADSCALE_INTEGRATION_POSTGRES" \
|
2023-06-22 08:01:17 +00:00
|
|
|
golang:1 \
|
|
|
|
go test ./... \
|
|
|
|
-failfast \
|
|
|
|
-timeout 120m \
|
|
|
|
-parallel 1 \
|
2023-12-09 17:09:24 +00:00
|
|
|
-run "^$test_name\$" >./control_logs/"$test_name"_"$i".log 2>&1
|
2023-06-22 08:01:17 +00:00
|
|
|
status=$?
|
|
|
|
end=$(date +%s)
|
|
|
|
|
|
|
|
runtime=$((end - start))
|
|
|
|
runtimes+=("$runtime")
|
|
|
|
|
|
|
|
if [ "$status" -eq 0 ]; then
|
|
|
|
((success_count++))
|
|
|
|
else
|
|
|
|
((failure_count++))
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
|
|
|
echo "-------------------"
|
|
|
|
echo "Test Summary for $test_name"
|
|
|
|
echo "-------------------"
|
|
|
|
echo "Total Tests: $num_tests"
|
|
|
|
echo "Successful Tests: $success_count"
|
|
|
|
echo "Failed Tests: $failure_count"
|
|
|
|
echo "Runtimes in seconds: ${runtimes[*]}"
|
|
|
|
echo
|
|
|
|
}
|
|
|
|
|
|
|
|
# Check if both arguments are provided
|
|
|
|
if [ $# -ne 2 ]; then
|
|
|
|
echo "Usage: $0 <test_name> <num_tests>"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
test_name=$1
|
|
|
|
num_tests=$2
|
|
|
|
|
|
|
|
docker network prune -f
|
|
|
|
|
|
|
|
if [ "$test_name" = "all" ]; then
|
|
|
|
rg --regexp "func (Test.+)\(.*" ./integration/ --replace '$1' --no-line-number --no-filename --no-heading | sort | while read -r test_name; do
|
|
|
|
run_tests "$test_name" "$num_tests"
|
|
|
|
done
|
|
|
|
else
|
|
|
|
run_tests "$test_name" "$num_tests"
|
|
|
|
fi
|