Removes calls to log.Fatal, adds check for null store
All checks were successful
gitea-deepak/gogmagog/pipeline/head This commit looks good

This commit is contained in:
Deepak Mallubhotla 2020-12-31 18:56:21 -06:00
parent e77d3c4d5e
commit cd7f919eb2
Signed by: deepak
GPG Key ID: 64BF53A3369104E7
4 changed files with 28 additions and 11 deletions

13
main.go
View File

@ -14,7 +14,7 @@ func main() {
// Config // Config
conf, err := config.GetConf("config") conf, err := config.GetConf("config")
if err != nil { if err != nil {
log.Fatal("Could not get config", err) log.Println("Could not get config", err)
os.Exit(1) os.Exit(1)
} }
@ -25,23 +25,24 @@ func main() {
// DB // DB
store, err := store.GetStore(&conf.Db) store, err := store.GetStore(&conf.Db)
if err != nil { if err != nil {
log.Fatal("Could not get store", err) log.Println("Could not get store", err)
os.Exit(1) os.Exit(1)
} }
if store != nil { if store != nil {
log.Print("Got DB connection") log.Println("Got DB connection")
} }
m := models.New(store) m := models.New(store)
if m != nil { if m != nil {
log.Print("created model") log.Println("created model")
} }
router := routes.NewRouter(m) router := routes.NewRouter(m)
log.Print("Running server on " + port) log.Println("Running server on " + port)
http.ListenAndServe(":"+port, router) http.ListenAndServe(":"+port, router)
log.Print("App environment is " + env) log.Println("App environment is " + env)
} }

View File

@ -1,5 +1,9 @@
package models package models
import (
"fmt"
)
// Store represents the backing store. // Store represents the backing store.
type Store interface { type Store interface {
ConnectionLive() error ConnectionLive() error
@ -24,5 +28,8 @@ func New(store Store) *Model {
// Healthy returns an error if the connection is healthy. // Healthy returns an error if the connection is healthy.
// Wrapper over db.Ping() // Wrapper over db.Ping()
func (m *Model) Healthy() error { func (m *Model) Healthy() error {
if m.Store == nil {
return fmt.Errorf("No store available")
}
return m.ConnectionLive() return m.ConnectionLive()
} }

View File

@ -100,3 +100,12 @@ func TestModelHealthy(t *testing.T) {
err := m.Healthy() err := m.Healthy()
assert.Nil(err) assert.Nil(err)
} }
func TestNilModelUnhealthy(t *testing.T) {
assert := assert.New(t)
m := models.New(nil)
err := m.Healthy()
assert.NotNil(err)
}

View File

@ -40,30 +40,30 @@ func createPostgresDB(dbConf *config.DBConfig) (*sqlx.DB, error) {
tmp, err := sql.Open("pgx", connStr) tmp, err := sql.Open("pgx", connStr)
if err != nil { if err != nil {
log.Fatal("Could not connect to database: \n", err) log.Print("Could not connect to database: \n", err)
return nil, err return nil, err
} }
db := sqlx.NewDb(tmp, "pgx") db := sqlx.NewDb(tmp, "pgx")
if err := db.Ping(); err != nil { if err := db.Ping(); err != nil {
log.Fatal("database ping failed\n", err) log.Print("database ping failed\n", err)
return nil, err return nil, err
} }
driver, err := postgres.WithInstance(db.DB, &postgres.Config{}) driver, err := postgres.WithInstance(db.DB, &postgres.Config{})
if err != nil { if err != nil {
log.Fatal("Could not create driver for db migration", err) log.Print("Could not create driver for db migration", err)
return nil, err return nil, err
} }
m, err := migrate.NewWithDatabaseInstance("file://store/migrations", "postgres", driver) m, err := migrate.NewWithDatabaseInstance("file://store/migrations", "postgres", driver)
if err != nil { if err != nil {
log.Fatal("Could not perform migration", err) log.Print("Could not perform migration", err)
return nil, err return nil, err
} }
if err := m.Up(); err != nil { if err := m.Up(); err != nil {
if err == migrate.ErrNoChange { if err == migrate.ErrNoChange {
log.Print("No migration needed.") log.Print("No migration needed.")
} else { } else {
log.Fatalf("An error occurred while syncing the database.. %v", err) log.Printf("An error occurred while syncing the database.. %v", err)
return nil, err return nil, err
} }
} }