func TestMerge_SSL(t *testing.T) { config := testConfig(` ssl { enabled = true verify = true cert = "1.pem" ca_cert = "ca-1.pem" } `, t) config.Merge(testConfig(` ssl { enabled = false } `, t)) expected := &SSLConfig{ Enabled: false, Verify: true, Cert: "1.pem", CaCert: "ca-1.pem", } if !reflect.DeepEqual(config.SSL, expected) { t.Errorf("expected \n\n%#v\n\n to be \n\n%#v\n\n", config.SSL, expected) } }
func TestMerge_emptyConfig(t *testing.T) { config := DefaultConfig() config.Merge(&Config{}) expected := DefaultConfig() if !reflect.DeepEqual(config, expected) { t.Errorf("expected \n\n%#v\n\n to be \n\n%#v\n\n", config, expected) } }
// ConfigFromPath iterates and merges all configuration files in a given // directory, returning the resulting config. func ConfigFromPath(path string) (*Config, error) { // Ensure the given filepath exists if _, err := os.Stat(path); os.IsNotExist(err) { return nil, fmt.Errorf("config: missing file/folder: %s", path) } // Check if a file was given or a path to a directory stat, err := os.Stat(path) if err != nil { return nil, fmt.Errorf("config: error stating file: %s", err) } // Recursively parse directories, single load files if stat.Mode().IsDir() { // Ensure the given filepath has at least one config file _, err := ioutil.ReadDir(path) if err != nil { return nil, fmt.Errorf("config: error listing directory: %s", err) } // Create a blank config to merge off of config := DefaultConfig() // Potential bug: Walk does not follow symlinks! err = filepath.Walk(path, func(path string, info os.FileInfo, err error) error { // If WalkFunc had an error, just return it if err != nil { return err } // Do nothing for directories if info.IsDir() { return nil } // Parse and merge the config newConfig, err := ParseConfig(path) if err != nil { return err } config.Merge(newConfig) return nil }) if err != nil { return nil, fmt.Errorf("config: walk error: %s", err) } return config, nil } else if stat.Mode().IsRegular() { return ParseConfig(path) } return nil, fmt.Errorf("config: unknown filetype: %q", stat.Mode().String()) }
func TestMerge_syslog(t *testing.T) { config := testConfig(` syslog { enabled = true facility = "1" } `, t) config.Merge(testConfig(` syslog { facility = "2" } `, t)) expected := &SyslogConfig{ Enabled: true, Facility: "2", } if !reflect.DeepEqual(config.Syslog, expected) { t.Errorf("expected \n\n%#v\n\n to be \n\n%#v\n\n", config.Syslog, expected) } }
func TestMerge_auth(t *testing.T) { config := testConfig(` auth { enabled = true username = "******" password = "******" } `, t) config.Merge(testConfig(` auth { password = "******" } `, t)) expected := &AuthConfig{ Enabled: true, Username: "******", Password: "******", } if !reflect.DeepEqual(config.Auth, expected) { t.Errorf("expected \n\n%#v\n\n to be \n\n%#v\n\n", config.Auth, expected) } }