57 lines
1.5 KiB
Go
57 lines
1.5 KiB
Go
package server
|
|
|
|
import (
|
|
"database/sql"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
|
|
"agent-system-backend/internal/store"
|
|
)
|
|
|
|
// twinRecoveryStores keeps the historical helper name for tests that need two
|
|
// independent pools against one backing database.
|
|
func twinRecoveryStores(t *testing.T) (*store.Store, *store.Store) {
|
|
t.Helper()
|
|
dsn := os.Getenv("AGENT_PG_TEST_DSN")
|
|
if dsn == "" {
|
|
path := filepath.Join(t.TempDir(), "shared.db")
|
|
first, err := store.OpenSQLite(path)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
second, err := store.OpenSQLite(path)
|
|
if err != nil {
|
|
first.Close()
|
|
t.Fatal(err)
|
|
}
|
|
t.Cleanup(func() { second.Close(); first.Close() })
|
|
return first, second
|
|
}
|
|
admin, err := sql.Open("pgx", dsn)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if _, err := admin.Exec(`CREATE EXTENSION IF NOT EXISTS pg_trgm`); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
schema := "t_" + strings.ToLower(store.NewID("dual"))
|
|
if _, err := admin.Exec(`CREATE SCHEMA ` + schema); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
t.Cleanup(func() { _, _ = admin.Exec(`DROP SCHEMA IF EXISTS ` + schema + ` CASCADE`); admin.Close() })
|
|
isolate := store.AppendPGRuntimeParam(dsn, "search_path", schema+",public")
|
|
first, err := store.OpenPostgres(isolate, filepath.Join(t.TempDir(), "a-artifacts"))
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
second, err := store.OpenPostgres(isolate, filepath.Join(t.TempDir(), "b-artifacts"))
|
|
if err != nil {
|
|
first.Close()
|
|
t.Fatal(err)
|
|
}
|
|
t.Cleanup(func() { second.Close(); first.Close() })
|
|
return first, second
|
|
}
|