// Copyright (c) Mainflux // SPDX-License-Identifier: Apache-2.0 // Package postgres_test contains tests for PostgreSQL repository // implementations. package postgres_test import ( "fmt" "log" "os" "testing" "github.com/jmoiron/sqlx" "github.com/mainflux/mainflux/logger" "github.com/mainflux/mainflux/readers/postgres" dockertest "github.com/ory/dockertest/v3" ) var ( testLog, _ = logger.New(os.Stdout, logger.Info.String()) db *sqlx.DB ) func TestMain(m *testing.M) { pool, err := dockertest.NewPool("") if err != nil { log.Fatalf("Could not connect to docker: %s", err) } cfg := []string{ "POSTGRES_USER=test", "POSTGRES_PASSWORD=test", "POSTGRES_DB=test", } container, err := pool.Run("postgres", "13.3-alpine", cfg) if err != nil { log.Fatalf("Could not start container: %s", err) } port := container.GetPort("5432/tcp") if err = pool.Retry(func() error { url := fmt.Sprintf("host=localhost port=%s user=test dbname=test password=test sslmode=disable", port) db, err = sqlx.Open("postgres", url) if err != nil { return err } return db.Ping() }); err != nil { log.Fatalf("Could not connect to docker: %s", err) } dbConfig := postgres.Config{ Host: "localhost", Port: port, User: "test", Pass: "test", Name: "test", SSLMode: "disable", SSLCert: "", SSLKey: "", SSLRootCert: "", } if db, err = postgres.Connect(dbConfig); err != nil { log.Fatalf("Could not setup test DB connection: %s", err) } code := m.Run() // Defers will not be run when using os.Exit db.Close() if err = pool.Purge(container); err != nil { log.Fatalf("Could not purge container: %s", err) } os.Exit(code) }