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  }