1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146
|
package utils
import (
"bytes"
"log"
"os"
"testing"
"time"
"github.com/stretchr/testify/require"
)
func TestLogLevelNothing(t *testing.T) {
b := &bytes.Buffer{}
log.SetOutput(b)
defer log.SetOutput(os.Stdout)
defer DefaultLogger.SetLogLevel(LogLevelNothing)
DefaultLogger.SetLogLevel(LogLevelNothing)
DefaultLogger.Debugf("debug")
DefaultLogger.Infof("info")
DefaultLogger.Errorf("err")
require.Empty(t, b.String())
}
func TestLogLevelError(t *testing.T) {
b := &bytes.Buffer{}
log.SetOutput(b)
defer log.SetOutput(os.Stdout)
defer DefaultLogger.SetLogLevel(LogLevelNothing)
DefaultLogger.SetLogLevel(LogLevelError)
DefaultLogger.Debugf("debug")
DefaultLogger.Infof("info")
DefaultLogger.Errorf("err")
require.Contains(t, b.String(), "err\n")
require.NotContains(t, b.String(), "info")
require.NotContains(t, b.String(), "debug")
}
func TestLogLevelInfo(t *testing.T) {
b := &bytes.Buffer{}
log.SetOutput(b)
defer log.SetOutput(os.Stdout)
defer DefaultLogger.SetLogLevel(LogLevelNothing)
DefaultLogger.SetLogLevel(LogLevelInfo)
DefaultLogger.Debugf("debug")
DefaultLogger.Infof("info")
DefaultLogger.Errorf("err")
require.Contains(t, b.String(), "err\n")
require.Contains(t, b.String(), "info\n")
require.NotContains(t, b.String(), "debug")
}
func TestLogLevelDebug(t *testing.T) {
b := &bytes.Buffer{}
log.SetOutput(b)
defer log.SetOutput(os.Stdout)
defer DefaultLogger.SetLogLevel(LogLevelNothing)
require.False(t, DefaultLogger.Debug())
DefaultLogger.SetLogLevel(LogLevelDebug)
require.True(t, DefaultLogger.Debug())
DefaultLogger.Debugf("debug")
DefaultLogger.Infof("info")
DefaultLogger.Errorf("err")
require.Contains(t, b.String(), "err\n")
require.Contains(t, b.String(), "info\n")
require.Contains(t, b.String(), "debug\n")
}
func TestNoTimestampWithEmptyFormat(t *testing.T) {
b := &bytes.Buffer{}
log.SetOutput(b)
defer log.SetOutput(os.Stdout)
defer DefaultLogger.SetLogLevel(LogLevelNothing)
DefaultLogger.SetLogLevel(LogLevelDebug)
DefaultLogger.SetLogTimeFormat("")
DefaultLogger.Debugf("debug")
require.Equal(t, "debug\n", b.String())
}
func TestAddTimestamp(t *testing.T) {
b := &bytes.Buffer{}
log.SetOutput(b)
defer log.SetOutput(os.Stdout)
defer DefaultLogger.SetLogLevel(LogLevelNothing)
format := "Jan 2, 2006"
DefaultLogger.SetLogTimeFormat(format)
DefaultLogger.SetLogLevel(LogLevelInfo)
DefaultLogger.Infof("info")
timestamp := b.String()[:b.Len()-6]
parsedTime, err := time.Parse(format, timestamp)
require.NoError(t, err)
require.WithinDuration(t, time.Now(), parsedTime, 25*time.Hour)
}
func TestLogAddPrefixes(t *testing.T) {
b := &bytes.Buffer{}
log.SetOutput(b)
defer log.SetOutput(os.Stdout)
defer DefaultLogger.SetLogLevel(LogLevelNothing)
DefaultLogger.SetLogLevel(LogLevelDebug)
// single prefix
prefixLogger := DefaultLogger.WithPrefix("prefix")
prefixLogger.Debugf("debug1")
require.Contains(t, b.String(), "prefix")
require.Contains(t, b.String(), "debug1")
// multiple prefixes
b.Reset()
prefixLogger1 := DefaultLogger.WithPrefix("prefix1")
prefixLogger2 := prefixLogger1.WithPrefix("prefix2")
prefixLogger2.Debugf("debug2")
require.Contains(t, b.String(), "prefix1")
require.Contains(t, b.String(), "prefix2")
require.Contains(t, b.String(), "debug2")
}
func TestLogLevelFromEnv(t *testing.T) {
testCases := []struct {
envValue string
expected LogLevel
}{
{"DEBUG", LogLevelDebug},
{"debug", LogLevelDebug},
{"INFO", LogLevelInfo},
{"ERROR", LogLevelError},
}
for _, tc := range testCases {
t.Setenv(logEnv, tc.envValue)
require.Equal(t, tc.expected, readLoggingEnv())
}
// invalid values
t.Setenv(logEnv, "")
require.Equal(t, LogLevelNothing, readLoggingEnv())
t.Setenv(logEnv, "asdf")
require.Equal(t, LogLevelNothing, readLoggingEnv())
}
|