diff --git a/flake.nix b/flake.nix index 11fdbb47..49df6ffa 100644 --- a/flake.nix +++ b/flake.nix @@ -96,6 +96,7 @@ nfpm gotestsum gotests + ksh # 'dot' is needed for pprof graphs # go tool pprof -http=: diff --git a/hscontrol/poll.go b/hscontrol/poll.go index d553c417..caf522ed 100644 --- a/hscontrol/poll.go +++ b/hscontrol/poll.go @@ -30,9 +30,8 @@ func (h *Headscale) handlePoll( mapRequest tailcfg.MapRequest, isNoise bool, ) { - // TODO(kradalby): This is a stepping stone, mapper should be initiated once - // per client or something similar - mapp := mapper.NewMapper(h.db, + mapp := mapper.NewMapper( + h.db, h.privateKey2019, isNoise, h.DERPMap, diff --git a/integration/run.sh b/integration/run.sh new file mode 100755 index 00000000..97c79561 --- /dev/null +++ b/integration/run.sh @@ -0,0 +1,74 @@ +#!/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 + docker rm headscale-test-suite || true + docker kill "$(docker ps -q)" || true + + 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 \ + golang:1 \ + go test ./... \ + -tags ts2019 \ + -failfast \ + -timeout 120m \ + -parallel 1 \ + -run "^$test_name\$" >/dev/null 2>&1 + 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 " + 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