github.com/rudderlabs/rudder-go-kit@v0.30.0/testhelper/docker/resource/postgres/postgres_test.go (about) 1 package postgres_test 2 3 import ( 4 "database/sql" 5 "fmt" 6 "testing" 7 8 "github.com/ory/dockertest/v3" 9 "github.com/stretchr/testify/require" 10 11 "github.com/rudderlabs/rudder-go-kit/testhelper/docker/resource/postgres" 12 ) 13 14 func TestPostgres(t *testing.T) { 15 pool, err := dockertest.NewPool("") 16 require.NoError(t, err) 17 18 for i := 1; i <= 6; i++ { 19 t.Run(fmt.Sprintf("iteration %d", i), func(t *testing.T) { 20 postgresContainer, err := postgres.Setup(pool, t) 21 require.NoError(t, err) 22 defer func() { _ = postgresContainer.DB.Close() }() 23 24 db, err := sql.Open("postgres", postgresContainer.DBDsn) 25 require.NoError(t, err) 26 _, err = db.Exec("CREATE TABLE test (id int)") 27 require.NoError(t, err) 28 29 var count int 30 err = db.QueryRow("SELECT count(*) FROM test").Scan(&count) 31 require.NoError(t, err) 32 }) 33 } 34 35 t.Run("with test failure", func(t *testing.T) { 36 cl := &testCleaner{T: t, failed: true} 37 r, err := postgres.Setup(pool, cl, postgres.WithPrintLogsOnError(true)) 38 require.NoError(t, err) 39 err = pool.Client.StopContainer(r.ContainerID, 10) 40 require.NoError(t, err) 41 cl.cleanup() 42 require.Contains(t, cl.logs, "postgres container state: {Status:exited") 43 require.Contains(t, cl.logs, "postgres container logs:") 44 }) 45 } 46 47 type testCleaner struct { 48 *testing.T 49 cleanup func() 50 failed bool 51 logs string 52 } 53 54 func (t *testCleaner) Cleanup(f func()) { 55 t.cleanup = f 56 } 57 58 func (t *testCleaner) Failed() bool { 59 return t.failed 60 } 61 62 func (t *testCleaner) Log(args ...any) { 63 t.logs = t.logs + fmt.Sprint(args...) 64 }