From 3bac1ddadcb5ec0339b567ea800ac17f40330c51 Mon Sep 17 00:00:00 2001 From: Jannis Mattheis Date: Sun, 11 Feb 2018 17:28:22 +0100 Subject: [PATCH] Add config --- config/config.go | 23 +++++++++++++++++++++++ config/config_test.go | 43 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+) create mode 100644 config/config.go create mode 100644 config/config_test.go diff --git a/config/config.go b/config/config.go new file mode 100644 index 0000000..d1ef6fd --- /dev/null +++ b/config/config.go @@ -0,0 +1,23 @@ +package config + +import "github.com/jinzhu/configor" + +// Configuration the application config can be set per env variables or config file (config.yml). +type Configuration struct { + Port int `default:"8080"` + Database struct { + Dialect string `default:"sqlite3"` + Connection string `default:"memo.db"` + } + DefaultUser struct { + Name string `default:"admin"` + Pass string `default:"admin"` + } +} + +// Get returns the configuration extracted from env variables or config file. +func Get() *Configuration { + conf := new(Configuration) + configor.New(&configor.Config{ENVPrefix: "MEMO"}).Load(conf, "config.yml", "/etc/memo/config.yml") + return conf +} diff --git a/config/config_test.go b/config/config_test.go new file mode 100644 index 0000000..9266e75 --- /dev/null +++ b/config/config_test.go @@ -0,0 +1,43 @@ +package config + +import ( + "os" + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestConfigEnv(t *testing.T) { + os.Setenv("MEMO_DEFAULTUSER_NAME", "jmattheis") + conf := Get() + assert.Equal(t, 8080, conf.Port, "should use defaults") + assert.Equal(t, "jmattheis", conf.DefaultUser.Name, "should not use default but env var") + os.Unsetenv("MEMO_DEFAULTUSER_NAME") +} + +func TestConfigFile(t *testing.T) { + file, err := os.Create("config.yml") + defer func() { + file.Close() + }() + assert.Nil(t, err) + _, err = file.WriteString(` +port: 1234 +database: + dialect: mysql + connection: user name +defaultuser: + name: nicories + pass: 12345 +`) + file.Close() + assert.Nil(t, err) + conf := Get() + assert.Equal(t, 1234, conf.Port) + assert.Equal(t, "nicories", conf.DefaultUser.Name) + assert.Equal(t, "12345", conf.DefaultUser.Pass) + assert.Equal(t, "mysql", conf.Database.Dialect) + assert.Equal(t, "user name", conf.Database.Connection) + + assert.Nil(t, os.Remove("config.yml")) +}