1 // Copyright © 2016 Steve Francia <spf@spf13.com>.
3 // Use of this source code is governed by an MIT-style
4 // license that can be found in the LICENSE file.
6 package jwalterweatherman
14 "github.com/stretchr/testify/require"
17 func TestThresholds(t *testing.T) {
18 SetStdoutThreshold(LevelError)
19 require.Equal(t, StdoutThreshold(), LevelError)
20 SetLogThreshold(LevelCritical)
21 require.Equal(t, LogThreshold(), LevelCritical)
22 require.NotEqual(t, StdoutThreshold(), LevelCritical)
23 SetStdoutThreshold(LevelWarn)
24 require.Equal(t, StdoutThreshold(), LevelWarn)
27 func TestDefaultLogging(t *testing.T) {
28 var outputBuf, logBuf bytes.Buffer
30 defaultNotepad.logHandle = &logBuf
31 defaultNotepad.outHandle = &outputBuf
33 SetLogThreshold(LevelWarn)
34 SetStdoutThreshold(LevelError)
36 FATAL.Println("fatal err")
37 CRITICAL.Println("critical err")
38 ERROR.Println("an error")
39 WARN.Println("a warning")
40 INFO.Println("information")
41 DEBUG.Println("debugging info")
42 TRACE.Println("trace")
44 require.Contains(t, logBuf.String(), "fatal err")
45 require.Contains(t, logBuf.String(), "critical err")
46 require.Contains(t, logBuf.String(), "an error")
47 require.Contains(t, logBuf.String(), "a warning")
48 require.NotContains(t, logBuf.String(), "information")
49 require.NotContains(t, logBuf.String(), "debugging info")
50 require.NotContains(t, logBuf.String(), "trace")
52 require.Contains(t, outputBuf.String(), "fatal err")
53 require.Contains(t, outputBuf.String(), "critical err")
54 require.Contains(t, outputBuf.String(), "an error")
55 require.NotContains(t, outputBuf.String(), "a warning")
56 require.NotContains(t, outputBuf.String(), "information")
57 require.NotContains(t, outputBuf.String(), "debugging info")
58 require.NotContains(t, outputBuf.String(), "trace")
61 func TestLogCounter(t *testing.T) {
62 defaultNotepad.logHandle = ioutil.Discard
63 defaultNotepad.outHandle = ioutil.Discard
65 SetLogThreshold(LevelTrace)
66 SetStdoutThreshold(LevelTrace)
68 FATAL.Println("fatal err")
69 CRITICAL.Println("critical err")
70 WARN.Println("a warning")
71 WARN.Println("another warning")
72 INFO.Println("information")
73 DEBUG.Println("debugging info")
74 TRACE.Println("trace")
76 wg := &sync.WaitGroup{}
78 for i := 0; i < 10; i++ {
82 for j := 0; j < 10; j++ {
83 ERROR.Println("error", j)
84 // check for data races
85 require.True(t, LogCountForLevel(LevelError) > uint64(j))
86 require.True(t, LogCountForLevelsGreaterThanorEqualTo(LevelError) > uint64(j))
94 require.Equal(t, uint64(1), LogCountForLevel(LevelFatal))
95 require.Equal(t, uint64(1), LogCountForLevel(LevelCritical))
96 require.Equal(t, uint64(2), LogCountForLevel(LevelWarn))
97 require.Equal(t, uint64(1), LogCountForLevel(LevelInfo))
98 require.Equal(t, uint64(1), LogCountForLevel(LevelDebug))
99 require.Equal(t, uint64(1), LogCountForLevel(LevelTrace))
100 require.Equal(t, uint64(100), LogCountForLevel(LevelError))
101 require.Equal(t, uint64(102), LogCountForLevelsGreaterThanorEqualTo(LevelError))