github.com/gedevops/x@v1.0.3/logrusx/config_test.go (about) 1 package logrusx 2 3 import ( 4 "context" 5 "testing" 6 7 "github.com/sirupsen/logrus/hooks/test" 8 9 "github.com/knadh/koanf" 10 "github.com/knadh/koanf/parsers/json" 11 "github.com/knadh/koanf/providers/rawbytes" 12 "github.com/sirupsen/logrus" 13 "github.com/stretchr/testify/assert" 14 "github.com/stretchr/testify/require" 15 "github.com/tidwall/sjson" 16 17 "github.com/ory/jsonschema/v3" 18 ) 19 20 func TestConfigSchema(t *testing.T) { 21 config := func(t *testing.T, vals map[string]interface{}) []byte { 22 rawConfig, err := sjson.Set("{}", "log", vals) 23 require.NoError(t, err) 24 25 return []byte(rawConfig) 26 } 27 28 t.Run("case=basic validation and retrieval", func(t *testing.T) { 29 c := jsonschema.NewCompiler() 30 require.NoError(t, AddConfigSchema(c)) 31 schema, err := c.Compile(context.Background(), ConfigSchemaID) 32 require.NoError(t, err) 33 34 logConfig := map[string]interface{}{ 35 "level": "trace", 36 "format": "json_pretty", 37 "leak_sensitive_values": true, 38 } 39 assert.NoError(t, schema.ValidateInterface(logConfig)) 40 41 k := koanf.New(".") 42 require.NoError(t, k.Load(rawbytes.Provider(config(t, logConfig)), json.Parser())) 43 44 l := New("foo", "bar", WithConfigurator(k)) 45 46 assert.True(t, l.leakSensitive) 47 assert.Equal(t, logrus.TraceLevel, l.Logger.Level) 48 assert.IsType(t, &logrus.JSONFormatter{}, l.Logger.Formatter) 49 }) 50 51 t.Run("case=warns on unknown format", func(t *testing.T) { 52 h := &test.Hook{} 53 New("foo", "bar", WithHook(h), ForceFormat("unknown")) 54 55 require.Len(t, h.Entries, 1) 56 assert.Contains(t, h.LastEntry().Message, "got unknown \"log.format\", falling back to \"text\"") 57 }) 58 59 t.Run("case=does not warn on text format", func(t *testing.T) { 60 h := &test.Hook{} 61 New("foo", "bar", WithHook(h), ForceFormat("text")) 62 63 assert.Len(t, h.Entries, 0) 64 }) 65 }