all: fix test flakiness and improve test infrastructure

Buffer the AuthRequest verdict channel to prevent a race where the
sender blocks indefinitely if the receiver has already timed out, and
increase the auth followup test timeout from 100ms to 5s to prevent
spurious failures under load.

Skip postgres-backed tests when the postgres server is unavailable
instead of calling t.Fatal, which was preventing the rest of the test
suite from running.

Add TestMain to db, types, and policy/v2 packages to chdir to the
source directory before running tests. This ensures relative testdata/
paths resolve correctly when the test binary is executed from an
arbitrary working directory (e.g., via "go tool stress").
This commit is contained in:
Kristoffer Dalby
2026-03-10 15:06:41 +00:00
parent fffc58b5d0
commit 3e0a96ec3a
6 changed files with 79 additions and 4 deletions

View File

@@ -2507,7 +2507,7 @@ func TestAuthenticationFlows(t *testing.T) {
if req.Followup != "" {
var cancel context.CancelFunc
ctx, cancel = context.WithTimeout(context.Background(), 100*time.Millisecond)
ctx, cancel = context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
}

25
hscontrol/db/main_test.go Normal file
View File

@@ -0,0 +1,25 @@
package db
import (
"os"
"path/filepath"
"runtime"
"testing"
)
// TestMain ensures the working directory is set to the package source directory
// so that relative testdata/ paths resolve correctly when the test binary is
// executed from an arbitrary location (e.g., via "go tool stress").
func TestMain(m *testing.M) {
_, filename, _, ok := runtime.Caller(0)
if !ok {
panic("could not determine test source directory")
}
err := os.Chdir(filepath.Dir(filename))
if err != nil {
panic("could not chdir to test source directory: " + err.Error())
}
os.Exit(m.Run())
}

View File

@@ -56,7 +56,7 @@ func newPostgresDBForTest(t *testing.T) *url.URL {
srv, err := postgrestest.Start(ctx)
if err != nil {
t.Fatal(err)
t.Skipf("start postgres: %s", err)
}
t.Cleanup(srv.Cleanup)

View File

@@ -0,0 +1,25 @@
package v2
import (
"os"
"path/filepath"
"runtime"
"testing"
)
// TestMain ensures the working directory is set to the package source directory
// so that relative testdata/ paths resolve correctly when the test binary is
// executed from an arbitrary location (e.g., via "go tool stress").
func TestMain(m *testing.M) {
_, filename, _, ok := runtime.Caller(0)
if !ok {
panic("could not determine test source directory")
}
err := os.Chdir(filepath.Dir(filename))
if err != nil {
panic("could not chdir to test source directory: " + err.Error())
}
os.Exit(m.Run())
}

View File

@@ -233,7 +233,7 @@ type AuthRequest struct {
func NewAuthRequest() AuthRequest {
return AuthRequest{
finished: make(chan AuthVerdict),
finished: make(chan AuthVerdict, 1),
closed: &atomic.Bool{},
}
}
@@ -241,7 +241,7 @@ func NewAuthRequest() AuthRequest {
func NewRegisterAuthRequest(node Node) AuthRequest {
return AuthRequest{
node: &node,
finished: make(chan AuthVerdict),
finished: make(chan AuthVerdict, 1),
closed: &atomic.Bool{},
}
}

View File

@@ -0,0 +1,25 @@
package types
import (
"os"
"path/filepath"
"runtime"
"testing"
)
// TestMain ensures the working directory is set to the package source directory
// so that relative testdata/ paths resolve correctly when the test binary is
// executed from an arbitrary location (e.g., via "go tool stress").
func TestMain(m *testing.M) {
_, filename, _, ok := runtime.Caller(0)
if !ok {
panic("could not determine test source directory")
}
err := os.Chdir(filepath.Dir(filename))
if err != nil {
panic("could not chdir to test source directory: " + err.Error())
}
os.Exit(m.Run())
}