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  }