package config import ( "fmt" "os" "testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestLoad(t *testing.T) { f, _ := os.CreateTemp("", "test") ConfigPath = f.Name() defer f.Close() fmt.Fprint(f, `[input] ext = "log"`) c, err := Load() require.NoError(t, err) assert.Equal(t, "log", c.Input.Ext) } func TestLoadBadFile(t *testing.T) { f, _ := os.CreateTemp("", "test") ConfigPath = f.Name() defer f.Close() fmt.Fprint(f, `{"not":"toml"}`) _, err := Load() assert.Error(t, err) } func TestLoadIgnoreMissingFile(t *testing.T) { def, _ := DefaultConfig() ConfigPath = "/not/a/real/file" c, err := Load() require.NoError(t, err) assert.Equal(t, def, c) } func TestOverride(t *testing.T) { Overrides = map[string]string{ "input.path": "/path/to/it", "input.ext": "~", } c, err := Load() require.NoError(t, err) assert.Equal(t, Overrides["input.path"], c.Input.Path) assert.Equal(t, "txt", c.Input.Ext) } func TestOverrideJson(t *testing.T) { Overrides = map[string]string{"input.ext": `{"a":"b"}`} c, err := Load() require.NoError(t, err) assert.Equal(t, "txt", c.Input.Ext) } func TestTimeParse(t *testing.T) { Overrides = map[string]string{"input.ext": "now"} c, err := Load() assert.ErrorContains(t, err, "incompatible types: TOML value has type time.Time; destination has type string") assert.Equal(t, "txt", c.Input.Ext) } func TestStdoutMissing(t *testing.T) { var oo Outputs = map[string]Output{} std, en := oo.Stdout() assert.False(t, en) assert.Equal(t, Stdout{}, std) } func TestStdoutLoad(t *testing.T) { os.Setenv("LOG_STDOUT_FORMAT", "json") defer os.Unsetenv("LOG_STDOUT_FORMAT") os.Setenv("LOG_STDOUT_ENABLED", "true") defer os.Unsetenv("LOG_STDOUT_ENABLED") c, _ := Load() std, en := c.Outputs.Stdout() assert.True(t, en) assert.Equal(t, "json", std.Format) } func TestFormatJson(t *testing.T) { ff := Formatters{ "json": map[string]any{"pretty_print": true}, } js := ff.Json() assert.True(t, js.PrettyPrint) ff = Formatters{} js = ff.Json() assert.False(t, js.PrettyPrint) }