From 7bca6f6bd87b01437b546795b6375eee41730c46 Mon Sep 17 00:00:00 2001 From: Nathan Guerin Date: Thu, 3 Jul 2014 00:09:22 +0200 Subject: [PATCH] Allow driver to be set from environment variable This changeset support for allowing the database driver to be set from an environment variable. Added a unit test to confirm behavior. Resolves #31 --- db-sample/dbconf.yml | 4 ++++ lib/goose/dbconf.go | 1 + lib/goose/dbconf_test.go | 35 ++++++++++++++++++++++++++++++++++- 3 files changed, 39 insertions(+), 1 deletion(-) diff --git a/db-sample/dbconf.yml b/db-sample/dbconf.yml index 65672fc..b820527 100644 --- a/db-sample/dbconf.yml +++ b/db-sample/dbconf.yml @@ -16,3 +16,7 @@ customimport: open: customdriver open import: github.com/custom/driver dialect: mysql + +environment_variable_config: + driver: $DB_DRIVER + open: $DATABASE_URL diff --git a/lib/goose/dbconf.go b/lib/goose/dbconf.go index accf219..8dc1a8c 100644 --- a/lib/goose/dbconf.go +++ b/lib/goose/dbconf.go @@ -41,6 +41,7 @@ func NewDBConf(p, env string, pgschema string) (*DBConf, error) { if err != nil { return nil, err } + drv = os.ExpandEnv(drv) open, err := f.Get(fmt.Sprintf("%s.open", env)) if err != nil { diff --git a/lib/goose/dbconf_test.go b/lib/goose/dbconf_test.go index b6f0886..37828ae 100644 --- a/lib/goose/dbconf_test.go +++ b/lib/goose/dbconf_test.go @@ -1,7 +1,8 @@ package goose import ( - // "fmt" + "os" + "reflect" "testing" ) @@ -35,3 +36,35 @@ func TestImportOverride(t *testing.T) { t.Errorf("bad custom import. got %v want %v", got, want) } } + +func TestDriverSetFromEnvironmentVariable(t *testing.T) { + + databaseUrlEnvVariableKey := "DB_DRIVER" + databaseUrlEnvVariableVal := "sqlite3" + databaseOpenStringKey := "DATABASE_URL" + databaseOpenStringVal := "db.db" + + os.Setenv(databaseUrlEnvVariableKey, databaseUrlEnvVariableVal) + os.Setenv(databaseOpenStringKey, databaseOpenStringVal) + + dbconf, err := NewDBConf("../../db-sample", "environment_variable_config", "") + if err != nil { + t.Fatal(err) + } + + got := reflect.TypeOf(dbconf.Driver.Dialect) + want := reflect.TypeOf(&Sqlite3Dialect{}) + + if got != want { + t.Errorf("Not able to read the driver type from environment variable."+ + "got %v want %v", got, want) + } + + gotOpenString := dbconf.Driver.OpenStr + wantOpenString := databaseOpenStringVal + + if gotOpenString != wantOpenString { + t.Errorf("Not able to read the open string from the environment."+ + "got %v want %v", gotOpenString, wantOpenString) + } +}