# 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}
 }