github.com/xmidt-org/webpa-common@v1.11.9/logging/logger_test.go (about)

     1  package logging
     2  
     3  import (
     4  	"strings"
     5  	"testing"
     6  
     7  	"github.com/go-kit/kit/log"
     8  	"github.com/go-kit/kit/log/level"
     9  	"github.com/stretchr/testify/assert"
    10  	"github.com/stretchr/testify/mock"
    11  )
    12  
    13  func TestCallerKey(t *testing.T) {
    14  	assert := assert.New(t)
    15  	assert.Equal(callerKey, CallerKey())
    16  }
    17  
    18  func TestMessageKey(t *testing.T) {
    19  	assert := assert.New(t)
    20  	assert.Equal(messageKey, MessageKey())
    21  }
    22  
    23  func TestErrorKey(t *testing.T) {
    24  	assert := assert.New(t)
    25  	assert.Equal(errorKey, ErrorKey())
    26  }
    27  
    28  func TestTimestampKey(t *testing.T) {
    29  	assert := assert.New(t)
    30  	assert.Equal(timestampKey, TimestampKey())
    31  }
    32  
    33  func TestDefaultLogger(t *testing.T) {
    34  	assert := assert.New(t)
    35  	assert.Equal(defaultLogger, DefaultLogger())
    36  }
    37  
    38  func TestNew(t *testing.T) {
    39  	assert := assert.New(t)
    40  
    41  	assert.NotNil(New(nil))
    42  	assert.NotNil(New(new(Options)))
    43  }
    44  
    45  func testNewFilter(t *testing.T, o *Options) {
    46  	var (
    47  		assert = assert.New(t)
    48  		next   = new(mockLogger)
    49  	)
    50  
    51  	switch strings.ToUpper(o.level()) {
    52  	case "DEBUG":
    53  		next.On("Log", mock.MatchedBy(matchLevel(level.DebugValue()))).
    54  			Run(expectKeys(assert, MessageKey())).
    55  			Return(nil).
    56  			Once()
    57  		fallthrough
    58  
    59  	case "INFO":
    60  		next.On("Log", mock.MatchedBy(matchLevel(level.InfoValue()))).
    61  			Run(expectKeys(assert, MessageKey())).
    62  			Return(nil).
    63  			Once()
    64  		fallthrough
    65  
    66  	case "WARN":
    67  		next.On("Log", mock.MatchedBy(matchLevel(level.WarnValue()))).
    68  			Run(expectKeys(assert, MessageKey())).
    69  			Return(nil).
    70  			Once()
    71  		fallthrough
    72  
    73  	default:
    74  		next.On("Log", mock.MatchedBy(matchLevel(level.ErrorValue()))).
    75  			Run(expectKeys(assert, MessageKey())).
    76  			Return(nil).
    77  			Once()
    78  	}
    79  
    80  	filter := NewFilter(next, o)
    81  	filter.Log(level.Key(), level.DebugValue(), MessageKey(), "debug message")
    82  	filter.Log(level.Key(), level.InfoValue(), MessageKey(), "info message")
    83  	filter.Log(level.Key(), level.WarnValue(), MessageKey(), "warn message")
    84  	filter.Log(level.Key(), level.ErrorValue(), MessageKey(), "error message")
    85  
    86  	next.AssertExpectations(t)
    87  }
    88  
    89  func TestNewFilter(t *testing.T) {
    90  	t.Run("Nil", func(t *testing.T) { testNewFilter(t, nil) })
    91  	t.Run("Default", func(t *testing.T) { testNewFilter(t, new(Options)) })
    92  	t.Run("Error", func(t *testing.T) { testNewFilter(t, &Options{Level: "error"}) })
    93  	t.Run("Warn", func(t *testing.T) { testNewFilter(t, &Options{Level: "warn"}) })
    94  	t.Run("Info", func(t *testing.T) { testNewFilter(t, &Options{Level: "info"}) })
    95  	t.Run("Debug", func(t *testing.T) { testNewFilter(t, &Options{Level: "debug"}) })
    96  }
    97  
    98  func testDefaultCallerSimple(t *testing.T) {
    99  	var (
   100  		assert = assert.New(t)
   101  		next   = new(mockLogger)
   102  	)
   103  
   104  	next.On("Log", mock.MatchedBy(func([]interface{}) bool { return true })).
   105  		Run(expectKeys(assert, CallerKey(), MessageKey())).
   106  		Return(expectKeys(assert, MessageKey())).
   107  		Once()
   108  
   109  	decorated := DefaultCaller(next)
   110  	decorated.Log(MessageKey(), "message")
   111  
   112  	next.AssertExpectations(t)
   113  }
   114  
   115  func testDefaultCallerKeyvals(t *testing.T) {
   116  	var (
   117  		assert = assert.New(t)
   118  		next   = new(mockLogger)
   119  	)
   120  
   121  	next.On("Log", mock.MatchedBy(func([]interface{}) bool { return true })).
   122  		Run(expectKeys(assert, CallerKey(), MessageKey())).
   123  		Return(expectKeys(assert, MessageKey(), "foo")).
   124  		Once()
   125  
   126  	decorated := DefaultCaller(next, "foo", "bar")
   127  	decorated.Log(MessageKey(), "message")
   128  
   129  	next.AssertExpectations(t)
   130  }
   131  
   132  func TestDefaultCaller(t *testing.T) {
   133  	t.Run("Simple", testDefaultCallerSimple)
   134  	t.Run("Keyvals", testDefaultCallerKeyvals)
   135  }
   136  
   137  func testLevelledLogger(t *testing.T, factory func(log.Logger, ...interface{}) log.Logger, expected level.Value) {
   138  	var (
   139  		assert = assert.New(t)
   140  		next   = new(mockLogger)
   141  	)
   142  
   143  	next.On("Log", mock.MatchedBy(matchLevel(expected))).
   144  		Run(expectKeys(assert, level.Key(), CallerKey(), MessageKey())).
   145  		Return(nil).
   146  		Once()
   147  
   148  	decorated := factory(next)
   149  	decorated.Log(level.Key(), expected, MessageKey(), "message")
   150  
   151  	next.AssertExpectations(t)
   152  }
   153  
   154  func testLevelledLoggerKeyvals(t *testing.T, factory func(log.Logger, ...interface{}) log.Logger, expected level.Value) {
   155  	var (
   156  		assert = assert.New(t)
   157  		next   = new(mockLogger)
   158  	)
   159  
   160  	next.On("Log", mock.MatchedBy(matchLevel(expected))).
   161  		Run(expectKeys(assert, level.Key(), "foo", CallerKey(), MessageKey())).
   162  		Return(nil).
   163  		Once()
   164  
   165  	decorated := factory(next, "foo", "bar")
   166  	decorated.Log(MessageKey(), "message")
   167  
   168  	next.AssertExpectations(t)
   169  }
   170  
   171  func TestError(t *testing.T) {
   172  	t.Run("Simple", func(t *testing.T) { testLevelledLogger(t, Error, level.ErrorValue()) })
   173  	t.Run("Keyvals", func(t *testing.T) { testLevelledLoggerKeyvals(t, Error, level.ErrorValue()) })
   174  }
   175  
   176  func TestInfo(t *testing.T) {
   177  	t.Run("Simple", func(t *testing.T) { testLevelledLogger(t, Info, level.InfoValue()) })
   178  	t.Run("Keyvals", func(t *testing.T) { testLevelledLoggerKeyvals(t, Info, level.InfoValue()) })
   179  }
   180  
   181  func TestWarn(t *testing.T) {
   182  	t.Run("Simple", func(t *testing.T) { testLevelledLogger(t, Warn, level.WarnValue()) })
   183  	t.Run("Keyvals", func(t *testing.T) { testLevelledLoggerKeyvals(t, Warn, level.WarnValue()) })
   184  }
   185  
   186  func TestDebug(t *testing.T) {
   187  	t.Run("Simple", func(t *testing.T) { testLevelledLogger(t, Debug, level.DebugValue()) })
   188  	t.Run("Keyvals", func(t *testing.T) { testLevelledLoggerKeyvals(t, Debug, level.DebugValue()) })
   189  }