77 "github.com/smartcontractkit/chainlink-testing-framework/framework"
88 "github.com/testcontainers/testcontainers-go"
99 tcwait "github.com/testcontainers/testcontainers-go/wait"
10+ "os"
11+ "strings"
1012 "time"
1113)
1214
@@ -17,6 +19,7 @@ type Input struct {
1719 User string `toml:"user" validate:"required" default:"chainlink"`
1820 Password string `toml:"password" validate:"required" default:"thispasswordislongenough"`
1921 Database string `toml:"database" validate:"required" default:"chainlink"`
22+ Databases int `toml:"databases" validate:"required" default:"20"`
2023 Port string `toml:"port" validate:"required" default:"5432"`
2124 Out * Output `toml:"out"`
2225}
@@ -33,6 +36,23 @@ func NewPostgreSQL(in *Input) (*Output, error) {
3336
3437 containerName := framework .DefaultTCName ("postgresql" )
3538
39+ var sqlCommands []string
40+ for i := 0 ; i <= in .Databases ; i ++ {
41+ sqlCommands = append (sqlCommands , fmt .Sprintf ("CREATE DATABASE db_%d;" , i ))
42+ }
43+ sqlCommands = append (sqlCommands , "ALTER USER chainlink WITH SUPERUSER;" )
44+ initSQL := strings .Join (sqlCommands , "\n " )
45+ initFile , err := os .CreateTemp ("" , "init-*.sql" )
46+ if err != nil {
47+ return nil , err
48+ }
49+ if _ , err := initFile .WriteString (initSQL ); err != nil {
50+ return nil , err
51+ }
52+ if err := initFile .Close (); err != nil {
53+ return nil , err
54+ }
55+
3656 req := testcontainers.ContainerRequest {
3757 AlwaysPullImage : in .PullImage ,
3858 Image : fmt .Sprintf ("%s:%s" , in .Image , in .Tag ),
@@ -51,9 +71,16 @@ func NewPostgreSQL(in *Input) (*Output, error) {
5171 Cmd : []string {
5272 "postgres" , "-c" , fmt .Sprintf ("port=%s" , in .Port ),
5373 },
74+ Files : []testcontainers.ContainerFile {
75+ {
76+ HostFilePath : initFile .Name (),
77+ ContainerFilePath : "/docker-entrypoint-initdb.d/init.sql" ,
78+ FileMode : 0644 ,
79+ },
80+ },
5481 WaitingFor : tcwait .ForExec ([]string {"psql" , "-h" , "127.0.0.1" ,
5582 "-U" , in .User , "-p" , in .Port , "-c" , "select" , "1" , "-d" , in .Database }).
56- WithStartupTimeout (10 * time .Second ),
83+ WithStartupTimeout (20 * time .Second ),
5784 }
5885 c , err := testcontainers .GenericContainer (ctx , testcontainers.GenericContainerRequest {
5986 ContainerRequest : req ,
0 commit comments