Add config

This commit is contained in:
Jannis Mattheis 2018-02-11 17:28:22 +01:00 committed by Jannis Mattheis
parent 3592ffd1b9
commit 3bac1ddadc
2 changed files with 66 additions and 0 deletions

23
config/config.go Normal file
View File

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

43
config/config_test.go Normal file
View File

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