package db import ( "context" "database/sql" "fmt" _ "github.com/lib/pq" "os" "pgm/data" "pgm/logger" ) func DbConn(c data.HostDetails) *sql.DB { var h string var u string var pw string var dbn string var psqlInfo string h = c.Hostname u = c.Username pw = c.Secret dbn = c.DatabaseName logger.Logger("[LOG] connection details: host = " + h + " username = " + u) found, testUserName := data.ViperPgmConfig("test_user", "r") if found == true { logger.Logger("[LOG] test requires containerized database or custom \"test_db\" in .pgm.yaml") } else { logger.Logger("[LOG] no reserved username found in logfile, reset with a key \"test_user\"") logger.Logger("[LOG] test requires containerized database or custom \"test_db\" in .pgm.yaml") } psqlInfo = fmt.Sprintf("host=%s port=%d user=%s "+ "password=%s dbname=%s sslmode=disable", h, 5432, u, pw, dbn) db, err := sql.Open("postgres", psqlInfo) if err != nil { switch u { case testUserName: logger.Logger("[ERROR] go tests expects to connect with the docker compose database." + "[ERROR] run \"docker-compose up\" and re-run tests") os.Exit(1) default: logger.Logger("[ERROR] db error: " + err.Error()) } } ctx := context.Background() err = db.PingContext(ctx) if err != nil { switch u { case testUserName: logger.Logger("[ERROR] db error, unable to ping: " + err.Error()+ "[ERROR] ensure docker database is running and re-run tests") os.Exit(1) default: logger.Logger("[ERROR] db error: " + err.Error()) } } return db }