From 97b4faf60586d38ddf08cab479bfa4c5926e63ba Mon Sep 17 00:00:00 2001 From: jms Date: Sun, 25 Oct 2020 10:53:27 -0500 Subject: [PATCH] putting away for now --- db/db.go | 21 +++++++++++++-------- main_test.go | 31 +++++++++++++++++++++---------- 2 files changed, 34 insertions(+), 18 deletions(-) diff --git a/db/db.go b/db/db.go index 7881dac..8575a56 100644 --- a/db/db.go +++ b/db/db.go @@ -3,14 +3,14 @@ package db import ( "context" "database/sql" + "errors" "fmt" _ "github.com/lib/pq" - "os" "pgm/data" "pgm/logger" ) -func DbConn(c data.HostDetails) *sql.DB { +func DbConn(c data.HostDetails) (*sql.DB, error) { var h string var u string var pw string @@ -32,31 +32,36 @@ func DbConn(c data.HostDetails) *sql.DB { h, 5432, u, pw, dbn) db, err := sql.Open("postgres", psqlInfo) if err != nil { + var db *sql.DB 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) + err := errors.New("unable to ping db" + dbn + "local db is closed, please run docker-compose up") + return db, err default: logger.Logger("[ERROR] db error: " + err.Error()) + return db, err } } logger.Logger("[LOG] pinging db " + dbn) ctx := context.Background() err = db.PingContext(ctx) + if err != nil { + var db *sql.DB switch u { case testUserName: logger.Logger("[ERROR] db error, unable to ping: " + err.Error()+ - "[ERROR] ensure docker database is running and re-run tests") + "\n[ERROR] ensure docker database is running and re-run tests") fmt.Println("local db is closed, please run docker-compose up") - os.Exit(1) + err1 := errors.New("unable to ping db" + dbn) + return db, err1 default: logger.Logger("[ERROR] db error: " + err.Error()) + return db, err } } - - return db + return db, nil } diff --git a/main_test.go b/main_test.go index dae0757..8886538 100644 --- a/main_test.go +++ b/main_test.go @@ -123,22 +123,32 @@ func TestViperScnConfig(t *testing.T) { func TestDbConn(t *testing.T) { t.Parallel() - var h data.HostDetails found, c := data.ViperPgmConfig("test_db", "r") + testCases := []connTest{ + {connstring: c, want: nil}, + } if found != true { logger.Logger("[LOG] failed to find test_db in .pgm.yaml") } - err := json.Unmarshal([]byte(c), &h) - if err != nil { - logger.Logger("[ERROR] db conn test failure: " + err.Error()) - } - got := db.DbConn(h) - err = got.Close() - if err != nil { - t.Errorf("sql function did not test correctly") + for _, tc := range testCases { + var h data.HostDetails + err := json.Unmarshal([]byte(tc.connstring), &h) + if err != nil { + logger.Logger("[ERROR] db conn test failure: " + err.Error()) + } + got, err := db.DbConn(h) + if tc.want != err { + t.Error("db conn returned an invalid error for test scenario, see logs") + } + err = got.Close() + if err != nil { + logger.Logger("[ERROR] Unable to close connection during test") + } + } + } @@ -167,7 +177,8 @@ func TestDbConn(t *testing.T) { //} type connTest struct { - u string + connstring string + want error }