chore(ci): clean up databases after test finishes in CI (#12702)

This commit is contained in:
Cian Johnston
2024-03-21 14:53:16 +00:00
committed by GitHub
parent 9c84fb7fb1
commit 5454f4997b
13 changed files with 49 additions and 39 deletions
+2 -2
View File
@@ -12,9 +12,9 @@ import (
"github.com/stretchr/testify/require"
"github.com/coder/coder/v2/coderd/database"
"github.com/coder/coder/v2/coderd/database/dbtestutil"
"github.com/coder/coder/v2/coderd/database/dbtime"
"github.com/coder/coder/v2/coderd/database/migrations"
"github.com/coder/coder/v2/coderd/database/postgres"
)
func TestSerializedRetry(t *testing.T) {
@@ -87,7 +87,7 @@ func TestNestedInTx(t *testing.T) {
func testSQLDB(t testing.TB) *sql.DB {
t.Helper()
connection, closeFn, err := postgres.Open()
connection, closeFn, err := dbtestutil.Open()
require.NoError(t, err)
t.Cleanup(closeFn)
+1 -2
View File
@@ -21,7 +21,6 @@ import (
"cdr.dev/slog/sloggers/slogtest"
"github.com/coder/coder/v2/coderd/database"
"github.com/coder/coder/v2/coderd/database/dbmem"
"github.com/coder/coder/v2/coderd/database/postgres"
"github.com/coder/coder/v2/coderd/database/pubsub"
)
@@ -97,7 +96,7 @@ func NewDB(t testing.TB, opts ...Option) (database.Store, pubsub.Pubsub) {
err error
closePg func()
)
connectionURL, closePg, err = postgres.Open()
connectionURL, closePg, err = Open()
require.NoError(t, err)
t.Cleanup(closePg)
}
@@ -1,4 +1,4 @@
package postgres
package dbtestutil
import (
"database/sql"
@@ -41,10 +41,22 @@ func Open() (string, func(), error) {
return "", nil, xerrors.Errorf("create db with template: %w", err)
}
return "postgres://postgres:postgres@127.0.0.1:5432/" + dbName + "?sslmode=disable", func() {
// We don't need to clean anything up here... it's just a database in a container,
// so cleaning up the container will clean up the database.
}, nil
dsn := "postgres://postgres:postgres@127.0.0.1:5432/" + dbName + "?sslmode=disable"
// Normally this would get cleaned up by removing the container but if we
// reuse the same container for multiple tests we run the risk of filling
// up our disk. Avoid this!
cleanup := func() {
cleanupConn, err := sql.Open("postgres", dbURL)
if err != nil {
_, _ = fmt.Fprintf(os.Stderr, "cleanup database %q: failed to connect to postgres: %s\n", dbName, err.Error())
}
defer cleanupConn.Close()
_, err = cleanupConn.Exec("DROP DATABASE " + dbName + ";")
if err != nil {
_, _ = fmt.Fprintf(os.Stderr, "failed to clean up database %q: %s\n", dbName, err.Error())
}
}
return dsn, cleanup, nil
}
return OpenContainerized(0)
}
@@ -1,6 +1,6 @@
//go:build linux
package postgres_test
package dbtestutil_test
import (
"database/sql"
@@ -10,7 +10,7 @@ import (
"github.com/stretchr/testify/require"
"go.uber.org/goleak"
"github.com/coder/coder/v2/coderd/database/postgres"
"github.com/coder/coder/v2/coderd/database/dbtestutil"
)
func TestMain(m *testing.M) {
@@ -27,7 +27,7 @@ func TestPostgres(t *testing.T) {
return
}
connect, closePg, err := postgres.Open()
connect, closePg, err := dbtestutil.Open()
require.NoError(t, err)
defer closePg()
db, err := sql.Open("postgres", connect)
+2 -2
View File
@@ -11,14 +11,14 @@ import (
"strconv"
"strings"
"github.com/coder/coder/v2/coderd/database/dbtestutil"
"github.com/coder/coder/v2/coderd/database/migrations"
"github.com/coder/coder/v2/coderd/database/postgres"
)
const minimumPostgreSQLVersion = 13
func main() {
connection, closeFn, err := postgres.Open()
connection, closeFn, err := dbtestutil.Open()
if err != nil {
panic(err)
}
+3 -3
View File
@@ -22,8 +22,8 @@ import (
"golang.org/x/exp/slices"
"golang.org/x/sync/errgroup"
"github.com/coder/coder/v2/coderd/database/dbtestutil"
"github.com/coder/coder/v2/coderd/database/migrations"
"github.com/coder/coder/v2/coderd/database/postgres"
"github.com/coder/coder/v2/testutil"
)
@@ -95,7 +95,7 @@ func TestMigrate(t *testing.T) {
func testSQLDB(t testing.TB) *sql.DB {
t.Helper()
connection, closeFn, err := postgres.Open()
connection, closeFn, err := dbtestutil.Open()
require.NoError(t, err)
t.Cleanup(closeFn)
@@ -103,7 +103,7 @@ func testSQLDB(t testing.TB) *sql.DB {
require.NoError(t, err)
t.Cleanup(func() { _ = db.Close() })
// postgres.Open automatically runs migrations, but we want to actually test
// dbtestutil.Open automatically runs migrations, but we want to actually test
// migration behavior in this package.
_, err = db.Exec(`DROP SCHEMA public CASCADE`)
require.NoError(t, err)
+7 -7
View File
@@ -17,7 +17,7 @@ import (
"cdr.dev/slog"
"cdr.dev/slog/sloggers/slogtest"
"github.com/coder/coder/v2/coderd/database/postgres"
"github.com/coder/coder/v2/coderd/database/dbtestutil"
"github.com/coder/coder/v2/coderd/database/pubsub"
"github.com/coder/coder/v2/testutil"
)
@@ -36,7 +36,7 @@ func TestPubsub(t *testing.T) {
defer cancelFunc()
logger := slogtest.Make(t, nil).Leveled(slog.LevelDebug)
connectionURL, closePg, err := postgres.Open()
connectionURL, closePg, err := dbtestutil.Open()
require.NoError(t, err)
defer closePg()
db, err := sql.Open("postgres", connectionURL)
@@ -65,7 +65,7 @@ func TestPubsub(t *testing.T) {
ctx, cancelFunc := context.WithCancel(context.Background())
defer cancelFunc()
logger := slogtest.Make(t, nil).Leveled(slog.LevelDebug)
connectionURL, closePg, err := postgres.Open()
connectionURL, closePg, err := dbtestutil.Open()
require.NoError(t, err)
defer closePg()
db, err := sql.Open("postgres", connectionURL)
@@ -81,7 +81,7 @@ func TestPubsub(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
logger := slogtest.Make(t, nil).Leveled(slog.LevelDebug)
connectionURL, closePg, err := postgres.Open()
connectionURL, closePg, err := dbtestutil.Open()
require.NoError(t, err)
defer closePg()
db, err := sql.Open("postgres", connectionURL)
@@ -118,7 +118,7 @@ func TestPubsub_ordering(t *testing.T) {
defer cancelFunc()
logger := slogtest.Make(t, nil).Leveled(slog.LevelDebug)
connectionURL, closePg, err := postgres.Open()
connectionURL, closePg, err := dbtestutil.Open()
require.NoError(t, err)
defer closePg()
db, err := sql.Open("postgres", connectionURL)
@@ -163,7 +163,7 @@ const disconnectTestPort = 26892
func TestPubsub_Disconnect(t *testing.T) {
// we always use a Docker container for this test, even in CI, since we need to be able to kill
// postgres and bring it back on the same port.
connectionURL, closePg, err := postgres.OpenContainerized(disconnectTestPort)
connectionURL, closePg, err := dbtestutil.OpenContainerized(disconnectTestPort)
require.NoError(t, err)
defer closePg()
db, err := sql.Open("postgres", connectionURL)
@@ -234,7 +234,7 @@ func TestPubsub_Disconnect(t *testing.T) {
// restart postgres on the same port --- since we only use LISTEN/NOTIFY it doesn't
// matter that the new postgres doesn't have any persisted state from before.
_, closeNewPg, err := postgres.OpenContainerized(disconnectTestPort)
_, closeNewPg, err := dbtestutil.OpenContainerized(disconnectTestPort)
require.NoError(t, err)
defer closeNewPg()
+1 -2
View File
@@ -12,7 +12,6 @@ import (
"cdr.dev/slog"
"cdr.dev/slog/sloggers/slogtest"
"github.com/coder/coder/v2/coderd/database/dbtestutil"
"github.com/coder/coder/v2/coderd/database/postgres"
"github.com/coder/coder/v2/coderd/database/pubsub"
"github.com/coder/coder/v2/testutil"
)
@@ -24,7 +23,7 @@ func TestPGPubsub_Metrics(t *testing.T) {
}
logger := slogtest.Make(t, nil).Leveled(slog.LevelDebug)
connectionURL, closePg, err := postgres.Open()
connectionURL, closePg, err := dbtestutil.Open()
require.NoError(t, err)
defer closePg()
db, err := sql.Open("postgres", connectionURL)