mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
chore(ci): clean up databases after test finishes in CI (#12702)
This commit is contained in:
@@ -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)
|
||||
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
+3
-3
@@ -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)
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user