pgm/db/db.go
2020-10-24 23:12:10 -05:00

56 lines
1.2 KiB
Go

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
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)
testUserName := data.ViperReturnKey("test_user")
logger.Logger("[LOG] reserved username is " + testUserName)
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
}