Fix bd-1: Prevent test database pollution
Tests were connecting to test daemon but daemon routed to production DB via findDatabaseForCwd(). Fixed by ensuring tests use isolated .beads directories and change working directory to tmpDir. Changes: - bench_test.go: Added .beads subdir, chdir, and client.dbPath to setupBenchServer - bench_test.go: Set dbPath for goroutine clients in BenchmarkConcurrentAgents - comments_test.go: Refactored to use setupTestServer - version_test.go: Fixed 4 tests to use setupTestServerIsolated with proper isolation - rpc_test.go: Added setupTestServerIsolated() helper for custom test setup Verified: RPC test suite runs with no database pollution (151→151 issues) Amp-Thread-ID: https://ampcode.com/threads/T-348b7ba8-4292-4ed3-b143-0ad07d226c21 Co-authored-by: Amp <amp@ampcode.com>
This commit is contained in:
@@ -112,6 +112,36 @@ func setupTestServer(t *testing.T) (*Server, *Client, func()) {
|
||||
return server, client, cleanup
|
||||
}
|
||||
|
||||
// setupTestServerIsolated creates an isolated test server in a temp directory
|
||||
// with .beads structure, but allows the caller to customize server/client setup.
|
||||
// Returns tmpDir, beadsDir, dbPath, socketPath, and cleanup function.
|
||||
// Caller must change to tmpDir if needed and set client.dbPath manually.
|
||||
func setupTestServerIsolated(t *testing.T) (tmpDir, beadsDir, dbPath, socketPath string, cleanup func()) {
|
||||
tmpDir, err := os.MkdirTemp("", "bd-rpc-test-*")
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to create temp dir: %v", err)
|
||||
}
|
||||
|
||||
// Create .beads subdirectory so findDatabaseForCwd finds THIS database, not project's
|
||||
beadsDir = filepath.Join(tmpDir, ".beads")
|
||||
if err := os.MkdirAll(beadsDir, 0755); err != nil {
|
||||
os.RemoveAll(tmpDir)
|
||||
t.Fatalf("Failed to create .beads dir: %v", err)
|
||||
}
|
||||
|
||||
dbPath = filepath.Join(beadsDir, "test.db")
|
||||
socketPath = filepath.Join(beadsDir, "bd.sock")
|
||||
|
||||
// Ensure socket doesn't exist from previous failed test
|
||||
os.Remove(socketPath)
|
||||
|
||||
cleanup = func() {
|
||||
os.RemoveAll(tmpDir)
|
||||
}
|
||||
|
||||
return tmpDir, beadsDir, dbPath, socketPath, cleanup
|
||||
}
|
||||
|
||||
func TestPing(t *testing.T) {
|
||||
_, client, cleanup := setupTestServer(t)
|
||||
defer cleanup()
|
||||
|
||||
Reference in New Issue
Block a user