A config file manager for Go that uses a defaults and overrides file.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

84 lines
2.2 KiB

package yamlsettings_test
import (
"bytes"
"fmt"
"testing"
"git.kirsle.net/go/yamlsettings"
)
func TestLoadReaders(t *testing.T) {
type Settings struct {
Databases struct {
PrimarySQL struct {
User string `yaml:"user"`
Passwd string `yaml:"passwd"`
Host string `yaml:"host"`
DB string `yaml:"db"`
Compress bool `yaml:"compress"`
Engine string `yaml:"engine"`
} `yaml:"primary_sql"`
Redis struct {
Host string `yaml:"redis_host"`
Port int `yaml:"redis_port"`
} `yaml:"redis"`
} `yaml:"databases"`
AppConfig struct {
Debug bool `yaml:"DEBUG"`
SecretKey string `yaml:"SECRET_KEY"`
} `yaml:"app_config"`
DebugSQL bool `yaml:"debug_sql"`
DebugProfiler bool `yaml:"debug_profiler"`
}
// The defaults.yml file you can commit to version control,
// it's used as the template config that contains all options,
// has sensible defaults where possible or "CHANGE_ME" where not.
var (
defaultsYaml = bytes.NewBuffer([]byte(`---
# Program Defaults, do not edit this file!!!
# All values should be overridden in the settings.yml file.
databases:
primary_sql:
user: my_user
passwd: password_here
host: db-bouncer-01.postgres.com:5432
db: postgres
compress: true
engine: postgresql2
redis:
redis_host: 127.0.0.1
redis_port: 6379
app_config:
DEBUG: false
SECRET_KEY: hard key to guess and keep values secret
debug_sql: false
debug_profiler: false`))
settingsYaml = bytes.NewBuffer([]byte(`---
databases:
primary_sql:
user: root
passwd: god
redis:
redis_host: redis.service.com
app_config:
DEBUG: true
SECRET_KEY: sdfasjksdfASFAS23423f@#$%!$#VR@%UQ%
debug_sql: true`))
)
// Load the defaults and the optional settings file.
// yamlsettings.LoadFiles("defaults.yml", "settings.yml", &config)
var config Settings
yamlsettings.LoadReaders(defaultsYaml, settingsYaml, &config)
fmt.Printf("Redis host: %s\n", config.Databases.Redis.Host)
fmt.Printf("Secret: %s\n", config.AppConfig.SecretKey)
// Load from yaml files on disk.
yamlsettings.LoadFiles("example/defaults.yml", "example/settings.yml", &config)
fmt.Printf("Redis host: %s\n", config.Databases.Redis.Host)
}