63 lines
1.5 KiB
Go
63 lines
1.5 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
|
|
|
|
logger.Logger("[LOG] connection details: host = " + h + " username = " + u)
|
|
|
|
found, testUserName := data.ViperPgmConfig("test_user", "r")
|
|
if found == true {
|
|
logger.Logger("[LOG] found test user 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")
|
|
fmt.Println("local db is closed, please run docker-compose up")
|
|
os.Exit(1)
|
|
default:
|
|
logger.Logger("[ERROR] db error: " + err.Error())
|
|
}
|
|
|
|
}
|
|
logger.Logger("[LOG] pinging db " + dbn)
|
|
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")
|
|
fmt.Println("local db is closed, please run docker-compose up")
|
|
os.Exit(1)
|
|
default:
|
|
logger.Logger("[ERROR] db error: " + err.Error())
|
|
}
|
|
}
|
|
|
|
return db
|
|
}
|