Skip to content

Commit 5454f49

Browse files
authored
chore(ci): clean up databases after test finishes in CI (#12702)
1 parent 9c84fb7 commit 5454f49

13 files changed

+49
-39
lines changed

Makefile

+2
Original file line numberDiff line numberDiff line change
@@ -783,6 +783,7 @@ test-postgres: test-postgres-docker
783783
-count=1
784784
.PHONY: test-postgres
785785

786+
# NOTE: we set --memory to the same size as a GitHub runner.
786787
test-postgres-docker:
787788
docker rm -f test-postgres-docker || true
788789
docker run \
@@ -795,6 +796,7 @@ test-postgres-docker:
795796
--name test-postgres-docker \
796797
--restart no \
797798
--detach \
799+
--memory 16GB \
798800
gcr.io/coder-dev-1/postgres:13 \
799801
-c shared_buffers=1GB \
800802
-c work_mem=1GB \

cli/resetpassword_test.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,15 @@ import (
1010
"github.com/stretchr/testify/require"
1111

1212
"github.com/coder/coder/v2/cli/clitest"
13-
"github.com/coder/coder/v2/coderd/database/postgres"
13+
"github.com/coder/coder/v2/coderd/database/dbtestutil"
1414
"github.com/coder/coder/v2/codersdk"
1515
"github.com/coder/coder/v2/pty/ptytest"
1616
"github.com/coder/coder/v2/testutil"
1717
)
1818

1919
// nolint:paralleltest
2020
func TestResetPassword(t *testing.T) {
21-
// postgres.Open() seems to be creating race conditions when run in parallel.
21+
// dbtestutil.Open() seems to be creating race conditions when run in parallel.
2222
// t.Parallel()
2323

2424
if runtime.GOOS != "linux" || testing.Short() {
@@ -32,7 +32,7 @@ func TestResetPassword(t *testing.T) {
3232
const newPassword = "MyNewPassword!"
3333

3434
// start postgres and coder server processes
35-
connectionURL, closeFunc, err := postgres.Open()
35+
connectionURL, closeFunc, err := dbtestutil.Open()
3636
require.NoError(t, err)
3737
defer closeFunc()
3838
ctx, cancelFunc := context.WithCancel(context.Background())

cli/server_createadminuser_test.go

+5-5
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ import (
1313

1414
"github.com/coder/coder/v2/cli/clitest"
1515
"github.com/coder/coder/v2/coderd/database"
16+
"github.com/coder/coder/v2/coderd/database/dbtestutil"
1617
"github.com/coder/coder/v2/coderd/database/dbtime"
17-
"github.com/coder/coder/v2/coderd/database/postgres"
1818
"github.com/coder/coder/v2/coderd/rbac"
1919
"github.com/coder/coder/v2/coderd/userpassword"
2020
"github.com/coder/coder/v2/pty/ptytest"
@@ -84,7 +84,7 @@ func TestServerCreateAdminUser(t *testing.T) {
8484
// Skip on non-Linux because it spawns a PostgreSQL instance.
8585
t.SkipNow()
8686
}
87-
connectionURL, closeFunc, err := postgres.Open()
87+
connectionURL, closeFunc, err := dbtestutil.Open()
8888
require.NoError(t, err)
8989
defer closeFunc()
9090

@@ -150,7 +150,7 @@ func TestServerCreateAdminUser(t *testing.T) {
150150
// Skip on non-Linux because it spawns a PostgreSQL instance.
151151
t.SkipNow()
152152
}
153-
connectionURL, closeFunc, err := postgres.Open()
153+
connectionURL, closeFunc, err := dbtestutil.Open()
154154
require.NoError(t, err)
155155
defer closeFunc()
156156

@@ -184,7 +184,7 @@ func TestServerCreateAdminUser(t *testing.T) {
184184
// Skip on non-Linux because it spawns a PostgreSQL instance.
185185
t.SkipNow()
186186
}
187-
connectionURL, closeFunc, err := postgres.Open()
187+
connectionURL, closeFunc, err := dbtestutil.Open()
188188
require.NoError(t, err)
189189
defer closeFunc()
190190

@@ -224,7 +224,7 @@ func TestServerCreateAdminUser(t *testing.T) {
224224
// Skip on non-Linux because it spawns a PostgreSQL instance.
225225
t.SkipNow()
226226
}
227-
connectionURL, closeFunc, err := postgres.Open()
227+
connectionURL, closeFunc, err := dbtestutil.Open()
228228
require.NoError(t, err)
229229
defer closeFunc()
230230
ctx, cancelFunc := context.WithCancel(context.Background())

cli/server_test.go

+2-3
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@ import (
4343
"github.com/coder/coder/v2/cli/config"
4444
"github.com/coder/coder/v2/coderd/coderdtest"
4545
"github.com/coder/coder/v2/coderd/database/dbtestutil"
46-
"github.com/coder/coder/v2/coderd/database/postgres"
4746
"github.com/coder/coder/v2/coderd/telemetry"
4847
"github.com/coder/coder/v2/codersdk"
4948
"github.com/coder/coder/v2/cryptorand"
@@ -1582,7 +1581,7 @@ func TestServer_Production(t *testing.T) {
15821581
// Skip on non-Linux because it spawns a PostgreSQL instance.
15831582
t.SkipNow()
15841583
}
1585-
connectionURL, closeFunc, err := postgres.Open()
1584+
connectionURL, closeFunc, err := dbtestutil.Open()
15861585
require.NoError(t, err)
15871586
defer closeFunc()
15881587

@@ -1801,7 +1800,7 @@ func TestConnectToPostgres(t *testing.T) {
18011800

18021801
log := slogtest.Make(t, nil)
18031802

1804-
dbURL, closeFunc, err := postgres.Open()
1803+
dbURL, closeFunc, err := dbtestutil.Open()
18051804
require.NoError(t, err)
18061805
t.Cleanup(closeFunc)
18071806

coderd/database/db_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@ import (
1212
"github.com/stretchr/testify/require"
1313

1414
"github.com/coder/coder/v2/coderd/database"
15+
"github.com/coder/coder/v2/coderd/database/dbtestutil"
1516
"github.com/coder/coder/v2/coderd/database/dbtime"
1617
"github.com/coder/coder/v2/coderd/database/migrations"
17-
"github.com/coder/coder/v2/coderd/database/postgres"
1818
)
1919

2020
func TestSerializedRetry(t *testing.T) {
@@ -87,7 +87,7 @@ func TestNestedInTx(t *testing.T) {
8787
func testSQLDB(t testing.TB) *sql.DB {
8888
t.Helper()
8989

90-
connection, closeFn, err := postgres.Open()
90+
connection, closeFn, err := dbtestutil.Open()
9191
require.NoError(t, err)
9292
t.Cleanup(closeFn)
9393

coderd/database/dbtestutil/db.go

+1-2
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import (
2121
"cdr.dev/slog/sloggers/slogtest"
2222
"github.com/coder/coder/v2/coderd/database"
2323
"github.com/coder/coder/v2/coderd/database/dbmem"
24-
"github.com/coder/coder/v2/coderd/database/postgres"
2524
"github.com/coder/coder/v2/coderd/database/pubsub"
2625
)
2726

@@ -97,7 +96,7 @@ func NewDB(t testing.TB, opts ...Option) (database.Store, pubsub.Pubsub) {
9796
err error
9897
closePg func()
9998
)
100-
connectionURL, closePg, err = postgres.Open()
99+
connectionURL, closePg, err = Open()
101100
require.NoError(t, err)
102101
t.Cleanup(closePg)
103102
}

coderd/database/postgres/postgres.go renamed to coderd/database/dbtestutil/postgres.go

+17-5
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package postgres
1+
package dbtestutil
22

33
import (
44
"database/sql"
@@ -41,10 +41,22 @@ func Open() (string, func(), error) {
4141
return "", nil, xerrors.Errorf("create db with template: %w", err)
4242
}
4343

44-
return "postgres://postgres:postgres@127.0.0.1:5432/" + dbName + "?sslmode=disable", func() {
45-
// We don't need to clean anything up here... it's just a database in a container,
46-
// so cleaning up the container will clean up the database.
47-
}, nil
44+
dsn := "postgres://postgres:postgres@127.0.0.1:5432/" + dbName + "?sslmode=disable"
45+
// Normally this would get cleaned up by removing the container but if we
46+
// reuse the same container for multiple tests we run the risk of filling
47+
// up our disk. Avoid this!
48+
cleanup := func() {
49+
cleanupConn, err := sql.Open("postgres", dbURL)
50+
if err != nil {
51+
_, _ = fmt.Fprintf(os.Stderr, "cleanup database %q: failed to connect to postgres: %s\n", dbName, err.Error())
52+
}
53+
defer cleanupConn.Close()
54+
_, err = cleanupConn.Exec("DROP DATABASE " + dbName + ";")
55+
if err != nil {
56+
_, _ = fmt.Fprintf(os.Stderr, "failed to clean up database %q: %s\n", dbName, err.Error())
57+
}
58+
}
59+
return dsn, cleanup, nil
4860
}
4961
return OpenContainerized(0)
5062
}

coderd/database/postgres/postgres_test.go renamed to coderd/database/dbtestutil/postgres_test.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
//go:build linux
22

3-
package postgres_test
3+
package dbtestutil_test
44

55
import (
66
"database/sql"
@@ -10,7 +10,7 @@ import (
1010
"github.com/stretchr/testify/require"
1111
"go.uber.org/goleak"
1212

13-
"github.com/coder/coder/v2/coderd/database/postgres"
13+
"github.com/coder/coder/v2/coderd/database/dbtestutil"
1414
)
1515

1616
func TestMain(m *testing.M) {
@@ -27,7 +27,7 @@ func TestPostgres(t *testing.T) {
2727
return
2828
}
2929

30-
connect, closePg, err := postgres.Open()
30+
connect, closePg, err := dbtestutil.Open()
3131
require.NoError(t, err)
3232
defer closePg()
3333
db, err := sql.Open("postgres", connect)

coderd/database/gen/dump/main.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,14 @@ import (
1111
"strconv"
1212
"strings"
1313

14+
"github.com/coder/coder/v2/coderd/database/dbtestutil"
1415
"github.com/coder/coder/v2/coderd/database/migrations"
15-
"github.com/coder/coder/v2/coderd/database/postgres"
1616
)
1717

1818
const minimumPostgreSQLVersion = 13
1919

2020
func main() {
21-
connection, closeFn, err := postgres.Open()
21+
connection, closeFn, err := dbtestutil.Open()
2222
if err != nil {
2323
panic(err)
2424
}

coderd/database/migrations/migrate_test.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ import (
2222
"golang.org/x/exp/slices"
2323
"golang.org/x/sync/errgroup"
2424

25+
"github.com/coder/coder/v2/coderd/database/dbtestutil"
2526
"github.com/coder/coder/v2/coderd/database/migrations"
26-
"github.com/coder/coder/v2/coderd/database/postgres"
2727
"github.com/coder/coder/v2/testutil"
2828
)
2929

@@ -95,15 +95,15 @@ func TestMigrate(t *testing.T) {
9595
func testSQLDB(t testing.TB) *sql.DB {
9696
t.Helper()
9797

98-
connection, closeFn, err := postgres.Open()
98+
connection, closeFn, err := dbtestutil.Open()
9999
require.NoError(t, err)
100100
t.Cleanup(closeFn)
101101

102102
db, err := sql.Open("postgres", connection)
103103
require.NoError(t, err)
104104
t.Cleanup(func() { _ = db.Close() })
105105

106-
// postgres.Open automatically runs migrations, but we want to actually test
106+
// dbtestutil.Open automatically runs migrations, but we want to actually test
107107
// migration behavior in this package.
108108
_, err = db.Exec(`DROP SCHEMA public CASCADE`)
109109
require.NoError(t, err)

coderd/database/pubsub/pubsub_linux_test.go

+7-7
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import (
1717

1818
"cdr.dev/slog"
1919
"cdr.dev/slog/sloggers/slogtest"
20-
"github.com/coder/coder/v2/coderd/database/postgres"
20+
"github.com/coder/coder/v2/coderd/database/dbtestutil"
2121
"github.com/coder/coder/v2/coderd/database/pubsub"
2222
"github.com/coder/coder/v2/testutil"
2323
)
@@ -36,7 +36,7 @@ func TestPubsub(t *testing.T) {
3636
defer cancelFunc()
3737
logger := slogtest.Make(t, nil).Leveled(slog.LevelDebug)
3838

39-
connectionURL, closePg, err := postgres.Open()
39+
connectionURL, closePg, err := dbtestutil.Open()
4040
require.NoError(t, err)
4141
defer closePg()
4242
db, err := sql.Open("postgres", connectionURL)
@@ -65,7 +65,7 @@ func TestPubsub(t *testing.T) {
6565
ctx, cancelFunc := context.WithCancel(context.Background())
6666
defer cancelFunc()
6767
logger := slogtest.Make(t, nil).Leveled(slog.LevelDebug)
68-
connectionURL, closePg, err := postgres.Open()
68+
connectionURL, closePg, err := dbtestutil.Open()
6969
require.NoError(t, err)
7070
defer closePg()
7171
db, err := sql.Open("postgres", connectionURL)
@@ -81,7 +81,7 @@ func TestPubsub(t *testing.T) {
8181
ctx, cancel := context.WithCancel(context.Background())
8282
defer cancel()
8383
logger := slogtest.Make(t, nil).Leveled(slog.LevelDebug)
84-
connectionURL, closePg, err := postgres.Open()
84+
connectionURL, closePg, err := dbtestutil.Open()
8585
require.NoError(t, err)
8686
defer closePg()
8787
db, err := sql.Open("postgres", connectionURL)
@@ -118,7 +118,7 @@ func TestPubsub_ordering(t *testing.T) {
118118
defer cancelFunc()
119119
logger := slogtest.Make(t, nil).Leveled(slog.LevelDebug)
120120

121-
connectionURL, closePg, err := postgres.Open()
121+
connectionURL, closePg, err := dbtestutil.Open()
122122
require.NoError(t, err)
123123
defer closePg()
124124
db, err := sql.Open("postgres", connectionURL)
@@ -163,7 +163,7 @@ const disconnectTestPort = 26892
163163
func TestPubsub_Disconnect(t *testing.T) {
164164
// we always use a Docker container for this test, even in CI, since we need to be able to kill
165165
// postgres and bring it back on the same port.
166-
connectionURL, closePg, err := postgres.OpenContainerized(disconnectTestPort)
166+
connectionURL, closePg, err := dbtestutil.OpenContainerized(disconnectTestPort)
167167
require.NoError(t, err)
168168
defer closePg()
169169
db, err := sql.Open("postgres", connectionURL)
@@ -234,7 +234,7 @@ func TestPubsub_Disconnect(t *testing.T) {
234234

235235
// restart postgres on the same port --- since we only use LISTEN/NOTIFY it doesn't
236236
// matter that the new postgres doesn't have any persisted state from before.
237-
_, closeNewPg, err := postgres.OpenContainerized(disconnectTestPort)
237+
_, closeNewPg, err := dbtestutil.OpenContainerized(disconnectTestPort)
238238
require.NoError(t, err)
239239
defer closeNewPg()
240240

coderd/database/pubsub/pubsub_test.go

+1-2
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import (
1212
"cdr.dev/slog"
1313
"cdr.dev/slog/sloggers/slogtest"
1414
"github.com/coder/coder/v2/coderd/database/dbtestutil"
15-
"github.com/coder/coder/v2/coderd/database/postgres"
1615
"github.com/coder/coder/v2/coderd/database/pubsub"
1716
"github.com/coder/coder/v2/testutil"
1817
)
@@ -24,7 +23,7 @@ func TestPGPubsub_Metrics(t *testing.T) {
2423
}
2524

2625
logger := slogtest.Make(t, nil).Leveled(slog.LevelDebug)
27-
connectionURL, closePg, err := postgres.Open()
26+
connectionURL, closePg, err := dbtestutil.Open()
2827
require.NoError(t, err)
2928
defer closePg()
3029
db, err := sql.Open("postgres", connectionURL)

enterprise/cli/server_dbcrypt_test.go

+1-2
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import (
1414
"github.com/coder/coder/v2/coderd/database"
1515
"github.com/coder/coder/v2/coderd/database/dbgen"
1616
"github.com/coder/coder/v2/coderd/database/dbtestutil"
17-
"github.com/coder/coder/v2/coderd/database/postgres"
1817
"github.com/coder/coder/v2/enterprise/dbcrypt"
1918
"github.com/coder/coder/v2/pty/ptytest"
2019
"github.com/coder/coder/v2/testutil"
@@ -33,7 +32,7 @@ func TestServerDBCrypt(t *testing.T) {
3332
t.Cleanup(cancel)
3433

3534
// Setup a postgres database.
36-
connectionURL, closePg, err := postgres.Open()
35+
connectionURL, closePg, err := dbtestutil.Open()
3736
require.NoError(t, err)
3837
t.Cleanup(closePg)
3938
t.Cleanup(func() { dbtestutil.DumpOnFailure(t, connectionURL) })

0 commit comments

Comments
 (0)