Skip to content

Commit

Permalink
Expand test and benchmarks for the Log module
Browse files Browse the repository at this point in the history
  • Loading branch information
gaby committed Mar 1, 2024
1 parent 708e86b commit c86a37b
Show file tree
Hide file tree
Showing 2 changed files with 232 additions and 37 deletions.
222 changes: 185 additions & 37 deletions log/default_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,131 @@ func Test_LogfKeyAndValues(t *testing.T) {
}
}

func Test_SetLevel(t *testing.T) {
setLogger := &defaultLogger{
stdlog: log.New(os.Stderr, "", log.LstdFlags|log.Lshortfile|log.Lmicroseconds),
depth: 4,
}

setLogger.SetLevel(LevelTrace)
require.Equal(t, LevelTrace, setLogger.level)
require.Equal(t, LevelTrace.toString(), setLogger.level.toString())

setLogger.SetLevel(LevelDebug)
require.Equal(t, LevelDebug, setLogger.level)
require.Equal(t, LevelDebug.toString(), setLogger.level.toString())

setLogger.SetLevel(LevelInfo)
require.Equal(t, LevelInfo, setLogger.level)
require.Equal(t, LevelInfo.toString(), setLogger.level.toString())

setLogger.SetLevel(LevelWarn)
require.Equal(t, LevelWarn, setLogger.level)
require.Equal(t, LevelWarn.toString(), setLogger.level.toString())

setLogger.SetLevel(LevelError)
require.Equal(t, LevelError, setLogger.level)
require.Equal(t, LevelError.toString(), setLogger.level.toString())

setLogger.SetLevel(LevelFatal)
require.Equal(t, LevelFatal, setLogger.level)
require.Equal(t, LevelFatal.toString(), setLogger.level.toString())

setLogger.SetLevel(LevelPanic)
require.Equal(t, LevelPanic, setLogger.level)
require.Equal(t, LevelPanic.toString(), setLogger.level.toString())

setLogger.SetLevel(8)
require.Equal(t, 8, int(setLogger.level))
require.Equal(t, "[?8] ", setLogger.level.toString())
}

func Test_Debugw(t *testing.T) {
initDefaultLogger()

var w byteSliceWriter
SetOutput(&w)

msg := "debug work"
keysAndValues := []any{"key1", "value1", "key2", "value2"}

Debugw(msg, keysAndValues...)

require.Equal(t, "[Debug] debug work key1=value1 key2=value2\n", string(w.b))
}

func Test_Infow(t *testing.T) {
initDefaultLogger()

var w byteSliceWriter
SetOutput(&w)

msg := "info work"
keysAndValues := []any{"key1", "value1", "key2", "value2"}

Infow(msg, keysAndValues...)

require.Equal(t, "[Info] info work key1=value1 key2=value2\n", string(w.b))
}

func Test_Warnw(t *testing.T) {
initDefaultLogger()

var w byteSliceWriter
SetOutput(&w)

msg := "warning work"
keysAndValues := []any{"key1", "value1", "key2", "value2"}

Warnw(msg, keysAndValues...)

require.Equal(t, "[Warn] warning work key1=value1 key2=value2\n", string(w.b))
}

func Test_Errorw(t *testing.T) {
initDefaultLogger()

var w byteSliceWriter
SetOutput(&w)

msg := "error work"
keysAndValues := []any{"key1", "value1", "key2", "value2"}

Errorw(msg, keysAndValues...)

require.Equal(t, "[Error] error work key1=value1 key2=value2\n", string(w.b))
}

func Test_Panicw(t *testing.T) {
initDefaultLogger()

var w byteSliceWriter
SetOutput(&w)

msg := "panic work"
keysAndValues := []any{"key1", "value1", "key2", "value2"}

require.Panics(t, func() {
Panicw(msg, keysAndValues...)
})

require.Equal(t, "[Panic] panic work key1=value1 key2=value2\n", string(w.b))
}

func Test_Tracew(t *testing.T) {
initDefaultLogger()

var w byteSliceWriter
SetOutput(&w)

msg := "trace work"
keysAndValues := []any{"key1", "value1", "key2", "value2"}

Tracew(msg, keysAndValues...)

require.Equal(t, "[Trace] trace work key1=value1 key2=value2\n", string(w.b))
}

func BenchmarkLogfKeyAndValues(b *testing.B) {
tests := []struct {
name string
Expand Down Expand Up @@ -222,55 +347,78 @@ func BenchmarkLogfKeyAndValues(b *testing.B) {
}

for _, tt := range tests {
b.Run(tt.name, func(b *testing.B) {
b.Run(tt.name, func(bb *testing.B) {
var buf bytes.Buffer
l := &defaultLogger{
stdlog: log.New(&buf, "", 0),
level: tt.level,
depth: 4,
}
for i := 0; i < b.N; i++ {

bb.ReportAllocs()
bb.ResetTimer()

for i := 0; i < bb.N; i++ {
l.privateLogw(tt.level, tt.format, tt.keysAndValues)
}
})
}
}

func Test_SetLevel(t *testing.T) {
setLogger := &defaultLogger{
stdlog: log.New(os.Stderr, "", log.LstdFlags|log.Lshortfile|log.Lmicroseconds),
depth: 4,
func BenchmarkLogfKeyAndValuesParallel(b *testing.B) {
tests := []struct {
name string
level Level
format string
keysAndValues []any
}{
{
name: "debug level with key-values",
level: LevelDebug,
format: "",
keysAndValues: []any{"name", "Bob", "age", 30},
},
{
name: "info level with key-values",
level: LevelInfo,
format: "",
keysAndValues: []any{"status", "ok", "code", 200},
},
{
name: "warn level with key-values",
level: LevelWarn,
format: "",
keysAndValues: []any{"error", "not found", "id", 123},
},
{
name: "warn level with format and key-values",
level: LevelWarn,
format: "test",
keysAndValues: []any{"error", "not found", "id", 123},
},
{
name: "warn level with one key",
level: LevelWarn,
format: "",
keysAndValues: []any{"error"},
},
}

setLogger.SetLevel(LevelTrace)
require.Equal(t, LevelTrace, setLogger.level)
require.Equal(t, LevelTrace.toString(), setLogger.level.toString())

setLogger.SetLevel(LevelDebug)
require.Equal(t, LevelDebug, setLogger.level)
require.Equal(t, LevelDebug.toString(), setLogger.level.toString())

setLogger.SetLevel(LevelInfo)
require.Equal(t, LevelInfo, setLogger.level)
require.Equal(t, LevelInfo.toString(), setLogger.level.toString())

setLogger.SetLevel(LevelWarn)
require.Equal(t, LevelWarn, setLogger.level)
require.Equal(t, LevelWarn.toString(), setLogger.level.toString())

setLogger.SetLevel(LevelError)
require.Equal(t, LevelError, setLogger.level)
require.Equal(t, LevelError.toString(), setLogger.level.toString())

setLogger.SetLevel(LevelFatal)
require.Equal(t, LevelFatal, setLogger.level)
require.Equal(t, LevelFatal.toString(), setLogger.level.toString())

setLogger.SetLevel(LevelPanic)
require.Equal(t, LevelPanic, setLogger.level)
require.Equal(t, LevelPanic.toString(), setLogger.level.toString())

setLogger.SetLevel(8)
require.Equal(t, 8, int(setLogger.level))
require.Equal(t, "[?8] ", setLogger.level.toString())
for _, tt := range tests {
b.Run(tt.name, func(bb *testing.B) {
bb.ReportAllocs()
bb.ResetTimer()
bb.RunParallel(func(pb *testing.PB) {
var buf bytes.Buffer
l := &defaultLogger{
stdlog: log.New(&buf, "", 0),
level: tt.level,
depth: 4,
}
for pb.Next() {
l.privateLogw(tt.level, tt.format, tt.keysAndValues)
}
})
})
}
}
47 changes: 47 additions & 0 deletions log/fiberlog_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,3 +22,50 @@ func Test_SetLogger(t *testing.T) {
SetLogger(setLog)
require.Equal(t, logger, setLog)
}

func Test_Fiberlog_SetLevel(t *testing.T) {
// Set up
mockLogger := &defaultLogger{}
SetLogger(mockLogger)

// Test cases
testCases := []struct {
name string
level Level
expected Level
}{
{
name: "Test case 1",
level: LevelDebug,
expected: LevelDebug,
},
{
name: "Test case 2",
level: LevelInfo,
expected: LevelInfo,
},
{
name: "Test case 3",
level: LevelWarn,
expected: LevelWarn,
},
{
name: "Test case 4",
level: LevelError,
expected: LevelError,
},
{
name: "Test case 5",
level: LevelFatal,
expected: LevelFatal,
},
}

// Run tests
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
SetLevel(tc.level)
require.Equal(t, tc.expected, mockLogger.level)
})
}
}

0 comments on commit c86a37b

Please sign in to comment.