From a9fb70a3be87db55dfed535bf40eef444676e9f3 Mon Sep 17 00:00:00 2001 From: Molecule AI Core-DevOps Date: Thu, 14 May 2026 09:28:58 +0000 Subject: [PATCH] handlers/internal: fix db.DB pollution in registry and scheduler test helpers Five more test helpers have the same setupTestDB bug (save db.DB but don't restore on teardown). go test -race runs tests in parallel; when test A sets db.DB = mockA and test B sets db.DB = mockB, if A runs first and cleanup closes mockA, B then runs with db.DB pointing at a closed mock. Fixed files: - internal/registry/liveness_test.go setupLivenessTestDB - internal/registry/hibernation_test.go setupHibernationMock - internal/registry/access_test.go setupMockDB - internal/registry/healthsweep_test.go setupTestDB - internal/scheduler/scheduler_test.go setupTestDB All now follow: prevDB := db.DB; db.DB = mockDB; t.Cleanup(func() { mockDB.Close(); db.DB = prevDB }) Total files fixed for mc#975: 8 files, ~20 test helper functions across the workspace-server. Together with the CI fix to remove the PHASE3_MASKED workaround, this should make CI/Platform (Go) stable. Co-Authored-By: Claude Opus 4.7 --- workspace-server/internal/registry/access_test.go | 3 ++- workspace-server/internal/registry/healthsweep_test.go | 3 ++- workspace-server/internal/registry/hibernation_test.go | 3 ++- workspace-server/internal/registry/liveness_test.go | 3 ++- workspace-server/internal/scheduler/scheduler_test.go | 3 ++- 5 files changed, 10 insertions(+), 5 deletions(-) diff --git a/workspace-server/internal/registry/access_test.go b/workspace-server/internal/registry/access_test.go index 537a0b62..54ad34e5 100644 --- a/workspace-server/internal/registry/access_test.go +++ b/workspace-server/internal/registry/access_test.go @@ -14,8 +14,9 @@ func setupMockDB(t *testing.T) sqlmock.Sqlmock { if err != nil { t.Fatalf("sqlmock: %v", err) } + prevDB := db.DB db.DB = mockDB - t.Cleanup(func() { mockDB.Close() }) + t.Cleanup(func() { mockDB.Close(); db.DB = prevDB }) return mock } diff --git a/workspace-server/internal/registry/healthsweep_test.go b/workspace-server/internal/registry/healthsweep_test.go index ce82e027..45718cb9 100644 --- a/workspace-server/internal/registry/healthsweep_test.go +++ b/workspace-server/internal/registry/healthsweep_test.go @@ -31,8 +31,9 @@ func setupTestDB(t *testing.T) sqlmock.Sqlmock { if err != nil { t.Fatalf("failed to create sqlmock: %v", err) } + prevDB := db.DB db.DB = mockDB - t.Cleanup(func() { mockDB.Close() }) + t.Cleanup(func() { mockDB.Close(); db.DB = prevDB }) return mock } diff --git a/workspace-server/internal/registry/hibernation_test.go b/workspace-server/internal/registry/hibernation_test.go index 76d6555f..f51226de 100644 --- a/workspace-server/internal/registry/hibernation_test.go +++ b/workspace-server/internal/registry/hibernation_test.go @@ -17,8 +17,9 @@ func setupHibernationMock(t *testing.T) sqlmock.Sqlmock { if err != nil { t.Fatalf("sqlmock.New: %v", err) } + prevDB := db.DB db.DB = mockDB - t.Cleanup(func() { mockDB.Close() }) + t.Cleanup(func() { mockDB.Close(); db.DB = prevDB }) return mock } diff --git a/workspace-server/internal/registry/liveness_test.go b/workspace-server/internal/registry/liveness_test.go index d53fc007..6449b665 100644 --- a/workspace-server/internal/registry/liveness_test.go +++ b/workspace-server/internal/registry/liveness_test.go @@ -18,8 +18,9 @@ func setupLivenessTestDB(t *testing.T) sqlmock.Sqlmock { if err != nil { t.Fatalf("failed to create sqlmock: %v", err) } + prevDB := db.DB db.DB = mockDB - t.Cleanup(func() { mockDB.Close() }) + t.Cleanup(func() { mockDB.Close(); db.DB = prevDB }) return mock } diff --git a/workspace-server/internal/scheduler/scheduler_test.go b/workspace-server/internal/scheduler/scheduler_test.go index 742ec0ad..aaa43369 100644 --- a/workspace-server/internal/scheduler/scheduler_test.go +++ b/workspace-server/internal/scheduler/scheduler_test.go @@ -24,8 +24,9 @@ func setupTestDB(t *testing.T) sqlmock.Sqlmock { if err != nil { t.Fatalf("failed to create sqlmock: %v", err) } + prevDB := db.DB db.DB = mockDB - t.Cleanup(func() { mockDB.Close() }) + t.Cleanup(func() { mockDB.Close(); db.DB = prevDB }) return mock }