waku-org/go-waku

View on GitHub
waku/persistence/postgres/mock.go

Summary

Maintainability
A
0 mins
Test Coverage
package postgres

import (
    "database/sql"
    "fmt"
    "log"
    "os"

    "github.com/avast/retry-go/v4"
)

var dbUrlTemplate = "postgres://postgres@localhost:%s/%s?sslmode=disable"

func ResetDefaultTestPostgresDB(dropDBUrl string) error {
    db, err := sql.Open("pgx", dropDBUrl)
    if err != nil {
        return err
    }

    deletePrevConnectionsSql := `
    SELECT pid, pg_terminate_backend(pid)
    FROM pg_stat_activity
    WHERE datname in ('template1', 'postgres') AND pid <> pg_backend_pid();`
    _, err = db.Exec(deletePrevConnectionsSql)
    if err != nil {
        return err
    }

    _, err = db.Exec("DROP DATABASE IF EXISTS postgres;")
    if err != nil {
        return err
    }

    _, err = db.Exec("CREATE DATABASE postgres;")
    return err
}

func NewMockPgDB() *sql.DB {
    mockPgDBPort := os.Getenv("TEST_DB_PORT")
    if mockPgDBPort == "" {
        mockPgDBPort = "5432"
    }
    //
    err := retry.Do(
        func() error {

            dropDBUrl := fmt.Sprintf(dbUrlTemplate, mockPgDBPort, "template1")
            if err := ResetDefaultTestPostgresDB(dropDBUrl); err != nil {
                return err
            }
            return nil
        }, retry.Attempts(3))
    if err != nil {
        log.Fatalf("an error '%s' while reseting the db", err)
    }
    mockDBUrl := fmt.Sprintf(dbUrlTemplate, mockPgDBPort, "postgres")
    db, err := sql.Open("pgx", mockDBUrl)
    if err != nil {
        log.Fatalf("an error '%s' was not expected when opening a stub database connection", err)
    }
    return db
}