@@ -58,6 +58,7 @@ func main() {
5858 return fmt.Sprintf (" postgres://user:pass@localhost/%s " , dbName)
5959 }
6060 provider := pgdbtemplatepgx.NewConnectionProvider (connStringFunc)
61+ defer provider.Close () // Close all connection pools.
6162
6263 // Create migration runner.
6364 migrationRunner := pgdbtemplate.NewFileMigrationRunner (
@@ -114,22 +115,26 @@ import (
114115)
115116
116117var templateManager *pgdbtemplate.TemplateManager
118+ var provider *pgdbtemplatepgx.ConnectionProvider
117119
118120func TestMain (m *testing .M ) {
119121 // Setup template manager once.
120- if err := setupPgxTemplateManager (); err != nil {
122+ ctx := context.Background ()
123+ if err := setupPgxTemplateManager (ctx); err != nil {
121124 log.Fatalf (" failed to setup template manager: %v " , err)
122125 }
123126
124127 // Run tests.
125128 code := m.Run ()
126129
127130 // Cleanup.
128- templateManager.Cleanup (context.Background ())
131+ templateManager.Cleanup (ctx)
132+ provider.Close ()
133+
129134 os.Exit (code)
130135}
131136
132- func setupPgxTemplateManager () error {
137+ func setupPgxTemplateManager (ctx context . Context ) error {
133138 baseConnString := " postgres://postgres:password@localhost:5432/postgres?sslmode=disable"
134139
135140 // Create pgx connection provider with connection pooling.
@@ -138,7 +143,7 @@ func setupPgxTemplateManager() error {
138143 }
139144
140145 // Configure connection pool settings using options.
141- provider : = pgdbtemplatepgx.NewConnectionProvider (
146+ provider = pgdbtemplatepgx.NewConnectionProvider (
142147 connStringFunc,
143148 pgdbtemplatepgx.WithMaxConns (10 ),
144149 pgdbtemplatepgx.WithMinConns (2 ),
@@ -156,13 +161,14 @@ func setupPgxTemplateManager() error {
156161 MigrationRunner: migrationRunner,
157162 }
158163
164+ var err error
159165 templateManager, err = pgdbtemplate.NewTemplateManager (config)
160166 if err != nil {
161167 return fmt.Errorf (" failed to create template manager: % w" , err)
162168 }
163169
164170 // Initialize template database with migrations.
165- if err : = templateManager.Initialize (context. Background () ); err != nil {
171+ if err = templateManager.Initialize (ctx ); err != nil {
166172 return fmt.Errorf (" failed to initialize template: % w" , err)
167173 }
168174 return nil
@@ -232,16 +238,20 @@ func TestMain(m *testing.M) {
232238 if err := setupPostgresContainer (ctx); err != nil {
233239 log.Fatalf (" failed to setup postgres container: %v " , err)
234240 }
235- defer pgContainer.Terminate (ctx)
236241
237242 // Setup template manager.
238243 if err := setupTemplateManagerWithContainer (ctx); err != nil {
239244 log.Fatalf (" failed to setup template manager: %v " , err)
240245 }
241- defer templateManager.Cleanup (ctx)
242246
243247 // Run tests.
244- m.Run ()
248+ code := m.Run ()
249+
250+ // Cleanup.
251+ templateManager.Cleanup (ctx)
252+ pgContainer.Terminate (ctx)
253+
254+ os.Exit (code)
245255}
246256
247257func setupPostgresContainer (ctx context .Context ) error {
0 commit comments