...

Source file src/github.com/launchdarkly/go-sdk-common/v3/ldlog/logging_test.go

Documentation: github.com/launchdarkly/go-sdk-common/v3/ldlog

     1  package ldlog
     2  
     3  import (
     4  	"fmt"
     5  	"strings"
     6  	"testing"
     7  
     8  	"github.com/stretchr/testify/assert"
     9  )
    10  
    11  type logSink struct {
    12  	output []string
    13  }
    14  
    15  func (l *logSink) Println(values ...interface{}) {
    16  	l.output = append(l.output, strings.TrimSpace(fmt.Sprintln(values...)))
    17  }
    18  
    19  func (l *logSink) Printf(format string, values ...interface{}) {
    20  	l.output = append(l.output, fmt.Sprintf(format, values...))
    21  }
    22  
    23  func TestCanWriteToUnconfiguredLogger(t *testing.T) {
    24  	l := Loggers{}
    25  	l.Warn("test message, please ignore") // just testing that we don't get a nil pointer
    26  }
    27  
    28  func TestLevelIsInfoByDefault(t *testing.T) {
    29  	ls := logSink{}
    30  	l := Loggers{}
    31  	assert.Equal(t, Info, l.GetMinLevel())
    32  	assert.False(t, l.IsDebugEnabled())
    33  
    34  	l.SetBaseLogger(&ls)
    35  	l.Debug("0")
    36  	l.Debugf("%s!", "1")
    37  	l.Info("2")
    38  	l.Infof("%s!", "3")
    39  	l.Warn("4")
    40  	l.Warnf("%s!", "5")
    41  	l.Error("6")
    42  	l.Errorf("%s!", "7")
    43  
    44  	assert.Equal(t, []string{"INFO: 2", "INFO: 3!", "WARN: 4", "WARN: 5!", "ERROR: 6", "ERROR: 7!"}, ls.output)
    45  }
    46  
    47  func TestCanSetLevel(t *testing.T) {
    48  	ls := logSink{}
    49  	l := Loggers{}
    50  
    51  	l.SetBaseLogger(&ls)
    52  	l.SetMinLevel(Error)
    53  	assert.Equal(t, Error, l.GetMinLevel())
    54  	assert.False(t, l.IsDebugEnabled())
    55  
    56  	l.Debug("0")
    57  	l.Debugf("%s!", "1")
    58  	l.Info("2")
    59  	l.Infof("%s!", "3")
    60  	l.Warn("4")
    61  	l.Warnf("%s!", "5")
    62  	l.Error("6")
    63  	l.Errorf("%s!", "7")
    64  	assert.Equal(t, []string{"ERROR: 6", "ERROR: 7!"}, ls.output)
    65  
    66  	l.SetMinLevel(Debug)
    67  	assert.Equal(t, Debug, l.GetMinLevel())
    68  	assert.True(t, l.IsDebugEnabled())
    69  
    70  	l.Debug("8")
    71  	l.Debugf("%s!", "9")
    72  	assert.Equal(t, []string{"ERROR: 6", "ERROR: 7!", "DEBUG: 8", "DEBUG: 9!"}, ls.output)
    73  }
    74  
    75  func TestCanSetLoggerForSpecificLevel(t *testing.T) {
    76  	lsMain := logSink{}
    77  	lsWarn := logSink{}
    78  	l := Loggers{}
    79  	l.SetBaseLoggerForLevel(Warn, &lsWarn)
    80  	l.SetBaseLogger(&lsMain)
    81  	l.Info("a")
    82  	l.Warn("b")
    83  	assert.Equal(t, []string{"INFO: a"}, lsMain.output)
    84  	assert.Equal(t, []string{"WARN: b"}, lsWarn.output)
    85  }
    86  
    87  func TestCanGetLoggerForSpecificLevel(t *testing.T) {
    88  	ls := logSink{}
    89  	l := Loggers{}
    90  	l.SetBaseLogger(&ls)
    91  	l.ForLevel(Info).Println("a")
    92  	l.ForLevel(Warn).Println("b")
    93  	l.ForLevel(LogLevel(99)).Println("ignore")
    94  	assert.Equal(t, []string{"INFO: a", "WARN: b"}, ls.output)
    95  }
    96  
    97  func TestSetBaseLoggerForLevelWithNilReferenceRestoresMainBaseLogger(t *testing.T) {
    98  	lsMain := logSink{}
    99  	lsWarn := logSink{}
   100  	l := Loggers{}
   101  	l.SetBaseLoggerForLevel(Warn, &lsWarn)
   102  	l.SetBaseLogger(&lsMain)
   103  	l.SetBaseLoggerForLevel(Warn, nil)
   104  	l.Warn("x")
   105  	assert.Equal(t, []string{"WARN: x"}, lsMain.output)
   106  }
   107  
   108  func TestSetBaseLoggerWithNilReferenceDoesNothing(t *testing.T) {
   109  	ls := logSink{}
   110  	l := Loggers{}
   111  	l.SetBaseLogger(&ls)
   112  	l.SetBaseLogger(nil)
   113  	l.Info("x")
   114  	assert.Equal(t, []string{"INFO: x"}, ls.output)
   115  }
   116  
   117  func TestInit(t *testing.T) {
   118  	l := Loggers{}
   119  	assert.False(t, l.inited)
   120  	l.Init()
   121  	assert.True(t, l.inited)
   122  }
   123  
   124  func TestCallingInitAgainDoesNotOverrideMinLevel(t *testing.T) {
   125  	l := Loggers{}
   126  	l.SetMinLevel(Error)
   127  	l.Init()
   128  	assert.Equal(t, Error, l.minLevel)
   129  }
   130  
   131  func TestNewDefaultLoggers(t *testing.T) {
   132  	l := NewDefaultLoggers()
   133  	assert.Equal(t, Info, l.minLevel)
   134  	assert.True(t, l.inited)
   135  }
   136  
   137  func TestNewDisabledLoggers(t *testing.T) {
   138  	l := NewDisabledLoggers()
   139  	assert.Equal(t, None, l.minLevel)
   140  }
   141  
   142  func TestSetPrefix(t *testing.T) {
   143  	ls := logSink{}
   144  	l := Loggers{}
   145  	l.SetBaseLogger(&ls)
   146  	l.SetPrefix("my-prefix")
   147  	l.Info("here's a message")
   148  	assert.Equal(t, []string{"INFO: my-prefix here's a message"}, ls.output)
   149  }
   150  
   151  func TestPrintlnWithMultipleValues(t *testing.T) {
   152  	ls := logSink{}
   153  	l := Loggers{}
   154  	l.SetBaseLogger(&ls)
   155  	l.Info("a", "b", "c")
   156  	assert.Equal(t, []string{"INFO: a b c"}, ls.output)
   157  }
   158  
   159  func TestLevelName(t *testing.T) {
   160  	for level, s := range map[LogLevel]string{
   161  		Debug:         "Debug",
   162  		Info:          "Info",
   163  		Warn:          "Warn",
   164  		Error:         "Error",
   165  		None:          "None",
   166  		LogLevel(999): "?",
   167  	} {
   168  		assert.Equal(t, s, level.Name())
   169  		assert.Equal(t, s, level.String())
   170  	}
   171  }
   172  

View as plain text