From c05038ccf20eb1561f471b5eda13d12586d5a90b Mon Sep 17 00:00:00 2001 From: 0x1d Date: Thu, 6 Nov 2025 09:57:58 +0100 Subject: [PATCH] fix: resolve test race conditions and update golangci-lint action - Fix race condition in gateway tests by using TestMain to set Gin mode once - Remove duplicate gin.SetMode(gin.TestMode) calls from individual tests - Add TestMain function to initialize test environment before all tests - Prevents race conditions when tests run in parallel with -race flag - Update golangci-lint-action from v6 to v7 - v6 doesn't support golangci-lint v2.x versions - v7 supports golangci-lint v2.x and automatically selects compatible version - Change version from v2.6.0 to latest for automatic compatibility All tests now pass with race detector enabled. --- .github/workflows/ci.yml | 4 ++-- services/gateway/gateway_test.go | 19 +++++++++---------- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4f351dd..d1e0ef6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -79,9 +79,9 @@ jobs: go-version: '1.25.3' - name: golangci-lint - uses: golangci/golangci-lint-action@v6 + uses: golangci/golangci-lint-action@v7 with: - version: v2.6.0 + version: latest args: --timeout=5m build: diff --git a/services/gateway/gateway_test.go b/services/gateway/gateway_test.go index 48a5c8e..ac9c1ff 100644 --- a/services/gateway/gateway_test.go +++ b/services/gateway/gateway_test.go @@ -6,6 +6,7 @@ import ( "errors" "net/http" "net/http/httptest" + "os" "testing" "time" @@ -18,11 +19,17 @@ import ( "github.com/stretchr/testify/require" ) +// TestMain sets up the test environment before running tests. +func TestMain(m *testing.M) { + // Set Gin to test mode once for all tests to avoid race conditions + gin.SetMode(gin.TestMode) + // Run tests + os.Exit(m.Run()) +} + func TestNewGateway(t *testing.T) { t.Parallel() - gin.SetMode(gin.TestMode) - tests := []struct { name string cfg config.ConfigProvider @@ -70,8 +77,6 @@ func TestNewGateway(t *testing.T) { func TestGateway_SetupRoutes(t *testing.T) { t.Parallel() - gin.SetMode(gin.TestMode) - tests := []struct { name string routes []RouteConfig @@ -127,8 +132,6 @@ func TestGateway_SetupRoutes(t *testing.T) { func TestGateway_handleRoute(t *testing.T) { t.Parallel() - gin.SetMode(gin.TestMode) - tests := []struct { name string route RouteConfig @@ -199,8 +202,6 @@ func TestGateway_handleRoute(t *testing.T) { func TestGateway_handleRoute_AllMethods(t *testing.T) { t.Parallel() - gin.SetMode(gin.TestMode) - methods := []string{ http.MethodGet, http.MethodPost, @@ -271,8 +272,6 @@ func TestLoadRoutes(t *testing.T) { func TestGateway_NoRoute(t *testing.T) { t.Parallel() - gin.SetMode(gin.TestMode) - gateway := &Gateway{ config: &mockConfigProvider{}, log: &mockLogger{},