# HG changeset patch # User Christophe de Vienne <christophe@cdevienne.info> # Date 1601456009 -7200 # Wed Sep 30 10:53:29 2020 +0200 # Node ID fe82db40aa33ddeec5923dd8a2cf69d5e4d31d54 # Parent 408c56d48ae9643de40e39f879eca656e6bcf989 database test: fix a deadlock when migration fails diff --git a/database/test.go b/database/test.go --- a/database/test.go +++ b/database/test.go @@ -35,26 +35,43 @@ // GetTestDB creates a db and returns it. It must be closed within the test. // If it fails, t.Fatal() is called func GetTestDB(t *testing.T, sourceDriver source.Driver) *TestDB { + var success bool + dsn := os.Getenv("TEST_DB_DSN") if dsn == "" { t.Fatal("Please define a TEST_DB_DSN environment variable") } + db, err := Open(dsn, 0) if err != nil { t.Fatal(err) } + defer func() { + if !success { + if err := db.Close(); err != nil { + t.Log("Error closing db:", err) + } + } + }() + c, err := db.Connx(context.Background()) if err != nil { - _ = db.Close() t.Fatal(err) } + defer func() { + if !success { + if err := c.Close(); err != nil { + t.Log("Error closing conn:", err) + } + } + }() + if _, err := c.ExecContext( context.Background(), "SELECT pg_advisory_lock($1)", dbLockID, ); err != nil { - _ = db.Close() t.Fatal(err) } @@ -107,6 +124,7 @@ } } + success = true return &TestDB{db, t, c} }