mirror of https://github.com/coder/coder.git
chore(ci): clean up databases after test finishes in CI (#12702)
This commit is contained in:
parent
9c84fb7fb1
commit
5454f4997b
2
Makefile
2
Makefile
|
@ -783,6 +783,7 @@ test-postgres: test-postgres-docker
|
|||
-count=1
|
||||
.PHONY: test-postgres
|
||||
|
||||
# NOTE: we set --memory to the same size as a GitHub runner.
|
||||
test-postgres-docker:
|
||||
docker rm -f test-postgres-docker || true
|
||||
docker run \
|
||||
|
@ -795,6 +796,7 @@ test-postgres-docker:
|
|||
--name test-postgres-docker \
|
||||
--restart no \
|
||||
--detach \
|
||||
--memory 16GB \
|
||||
gcr.io/coder-dev-1/postgres:13 \
|
||||
-c shared_buffers=1GB \
|
||||
-c work_mem=1GB \
|
||||
|
|
|
@ -10,7 +10,7 @@ import (
|
|||
"github.com/stretchr/testify/require"
|
||||
|
||||
"github.com/coder/coder/v2/cli/clitest"
|
||||
"github.com/coder/coder/v2/coderd/database/postgres"
|
||||
"github.com/coder/coder/v2/coderd/database/dbtestutil"
|
||||
"github.com/coder/coder/v2/codersdk"
|
||||
"github.com/coder/coder/v2/pty/ptytest"
|
||||
"github.com/coder/coder/v2/testutil"
|
||||
|
@ -18,7 +18,7 @@ import (
|
|||
|
||||
// nolint:paralleltest
|
||||
func TestResetPassword(t *testing.T) {
|
||||
// postgres.Open() seems to be creating race conditions when run in parallel.
|
||||
// dbtestutil.Open() seems to be creating race conditions when run in parallel.
|
||||
// t.Parallel()
|
||||
|
||||
if runtime.GOOS != "linux" || testing.Short() {
|
||||
|
@ -32,7 +32,7 @@ func TestResetPassword(t *testing.T) {
|
|||
const newPassword = "MyNewPassword!"
|
||||
|
||||
// start postgres and coder server processes
|
||||
connectionURL, closeFunc, err := postgres.Open()
|
||||
connectionURL, closeFunc, err := dbtestutil.Open()
|
||||
require.NoError(t, err)
|
||||
defer closeFunc()
|
||||
ctx, cancelFunc := context.WithCancel(context.Background())
|
||||
|
|
|
@ -13,8 +13,8 @@ import (
|
|||
|
||||
"github.com/coder/coder/v2/cli/clitest"
|
||||
"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/postgres"
|
||||
"github.com/coder/coder/v2/coderd/rbac"
|
||||
"github.com/coder/coder/v2/coderd/userpassword"
|
||||
"github.com/coder/coder/v2/pty/ptytest"
|
||||
|
@ -84,7 +84,7 @@ func TestServerCreateAdminUser(t *testing.T) {
|
|||
// Skip on non-Linux because it spawns a PostgreSQL instance.
|
||||
t.SkipNow()
|
||||
}
|
||||
connectionURL, closeFunc, err := postgres.Open()
|
||||
connectionURL, closeFunc, err := dbtestutil.Open()
|
||||
require.NoError(t, err)
|
||||
defer closeFunc()
|
||||
|
||||
|
@ -150,7 +150,7 @@ func TestServerCreateAdminUser(t *testing.T) {
|
|||
// Skip on non-Linux because it spawns a PostgreSQL instance.
|
||||
t.SkipNow()
|
||||
}
|
||||
connectionURL, closeFunc, err := postgres.Open()
|
||||
connectionURL, closeFunc, err := dbtestutil.Open()
|
||||
require.NoError(t, err)
|
||||
defer closeFunc()
|
||||
|
||||
|
@ -184,7 +184,7 @@ func TestServerCreateAdminUser(t *testing.T) {
|
|||
// Skip on non-Linux because it spawns a PostgreSQL instance.
|
||||
t.SkipNow()
|
||||
}
|
||||
connectionURL, closeFunc, err := postgres.Open()
|
||||
connectionURL, closeFunc, err := dbtestutil.Open()
|
||||
require.NoError(t, err)
|
||||
defer closeFunc()
|
||||
|
||||
|
@ -224,7 +224,7 @@ func TestServerCreateAdminUser(t *testing.T) {
|
|||
// Skip on non-Linux because it spawns a PostgreSQL instance.
|
||||
t.SkipNow()
|
||||
}
|
||||
connectionURL, closeFunc, err := postgres.Open()
|
||||
connectionURL, closeFunc, err := dbtestutil.Open()
|
||||
require.NoError(t, err)
|
||||
defer closeFunc()
|
||||
ctx, cancelFunc := context.WithCancel(context.Background())
|
||||
|
|
|
@ -43,7 +43,6 @@ import (
|
|||
"github.com/coder/coder/v2/cli/config"
|
||||
"github.com/coder/coder/v2/coderd/coderdtest"
|
||||
"github.com/coder/coder/v2/coderd/database/dbtestutil"
|
||||
"github.com/coder/coder/v2/coderd/database/postgres"
|
||||
"github.com/coder/coder/v2/coderd/telemetry"
|
||||
"github.com/coder/coder/v2/codersdk"
|
||||
"github.com/coder/coder/v2/cryptorand"
|
||||
|
@ -1582,7 +1581,7 @@ func TestServer_Production(t *testing.T) {
|
|||
// Skip on non-Linux because it spawns a PostgreSQL instance.
|
||||
t.SkipNow()
|
||||
}
|
||||
connectionURL, closeFunc, err := postgres.Open()
|
||||
connectionURL, closeFunc, err := dbtestutil.Open()
|
||||
require.NoError(t, err)
|
||||
defer closeFunc()
|
||||
|
||||
|
@ -1801,7 +1800,7 @@ func TestConnectToPostgres(t *testing.T) {
|
|||
|
||||
log := slogtest.Make(t, nil)
|
||||
|
||||
dbURL, closeFunc, err := postgres.Open()
|
||||
dbURL, closeFunc, err := dbtestutil.Open()
|
||||
require.NoError(t, err)
|
||||
t.Cleanup(closeFunc)
|
||||
|
||||
|
|
|
@ -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)
|
||||
}
|
|
@ -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)
|
||||
|
|
|
@ -14,7 +14,6 @@ import (
|
|||
"github.com/coder/coder/v2/coderd/database"
|
||||
"github.com/coder/coder/v2/coderd/database/dbgen"
|
||||
"github.com/coder/coder/v2/coderd/database/dbtestutil"
|
||||
"github.com/coder/coder/v2/coderd/database/postgres"
|
||||
"github.com/coder/coder/v2/enterprise/dbcrypt"
|
||||
"github.com/coder/coder/v2/pty/ptytest"
|
||||
"github.com/coder/coder/v2/testutil"
|
||||
|
@ -33,7 +32,7 @@ func TestServerDBCrypt(t *testing.T) {
|
|||
t.Cleanup(cancel)
|
||||
|
||||
// Setup a postgres database.
|
||||
connectionURL, closePg, err := postgres.Open()
|
||||
connectionURL, closePg, err := dbtestutil.Open()
|
||||
require.NoError(t, err)
|
||||
t.Cleanup(closePg)
|
||||
t.Cleanup(func() { dbtestutil.DumpOnFailure(t, connectionURL) })
|
||||
|
|
Loading…
Reference in New Issue