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
This commit is contained in:
Nathan Guerin 2014-07-03 00:09:22 +02:00
parent 91c768f7ca
commit 7bca6f6bd8
3 changed files with 39 additions and 1 deletions

View File

@ -16,3 +16,7 @@ customimport:
open: customdriver open
import: github.com/custom/driver
dialect: mysql
environment_variable_config:
driver: $DB_DRIVER
open: $DATABASE_URL

View File

@ -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 {

View File

@ -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)
}
}