ksql/logger_test.go

137 lines
3.1 KiB
Go

package ksql
import (
"context"
"errors"
"fmt"
"testing"
tt "github.com/vingarcia/ksql/internal/testtools"
)
func TestCtxLog(t *testing.T) {
ctx := context.Background()
defer func() {
logPrinter = fmt.Println
}()
t.Run("should not log anything nor panic when the logger is not injected", func(t *testing.T) {
var printedArgs []interface{}
logPrinter = func(args ...interface{}) (n int, err error) {
printedArgs = args
return 0, nil
}
panicPayload := tt.PanicHandler(func() {
ctxLog(ctx, "fakeQuery", []interface{}{}, nil)
})
tt.AssertEqual(t, panicPayload, nil)
tt.AssertEqual(t, printedArgs, []interface{}(nil))
})
}
func TestBuiltinLoggers(t *testing.T) {
ctx := context.Background()
defer func() {
logPrinter = fmt.Println
}()
t.Run("Logger", func(t *testing.T) {
t.Run("with no errors", func(t *testing.T) {
var printedArgs []interface{}
logPrinter = func(args ...interface{}) (n int, err error) {
printedArgs = args
return 0, nil
}
Logger(ctx, LogValues{
Query: "FakeQuery",
Params: []interface{}{"FakeParam"},
})
tt.AssertContains(t, fmt.Sprint(printedArgs...), "FakeQuery", "FakeParam")
})
t.Run("with no params", func(t *testing.T) {
var printedArgs []interface{}
logPrinter = func(args ...interface{}) (n int, err error) {
printedArgs = args
return 0, nil
}
Logger(ctx, LogValues{
Query: "FakeQuery",
})
tt.AssertContains(t, fmt.Sprint(printedArgs...), "FakeQuery", `"params":[]`)
})
t.Run("with errors", func(t *testing.T) {
var printedArgs []interface{}
logPrinter = func(args ...interface{}) (n int, err error) {
printedArgs = args
return 0, nil
}
Logger(ctx, LogValues{
Query: "FakeQuery",
Params: []interface{}{"FakeParam"},
Err: errors.New("fakeErrMsg"),
})
tt.AssertContains(t, fmt.Sprint(printedArgs...), "FakeQuery", "FakeParam", "fakeErrMsg")
})
})
t.Run("ErrorsLogger", func(t *testing.T) {
t.Run("with no errors", func(t *testing.T) {
var printedArgs []interface{}
logPrinter = func(args ...interface{}) (n int, err error) {
printedArgs = args
return 0, nil
}
ErrorLogger(ctx, LogValues{
Query: "FakeQuery",
Params: []interface{}{"FakeParam"},
})
tt.AssertEqual(t, printedArgs, []interface{}(nil))
})
t.Run("with no params", func(t *testing.T) {
var printedArgs []interface{}
logPrinter = func(args ...interface{}) (n int, err error) {
printedArgs = args
return 0, nil
}
ErrorLogger(ctx, LogValues{
Query: "FakeQuery",
Err: errors.New("fakeErrMsg"),
})
tt.AssertContains(t, fmt.Sprint(printedArgs...), "FakeQuery", `"params":[]`, "fakeErrMsg")
})
t.Run("with errors", func(t *testing.T) {
var printedArgs []interface{}
logPrinter = func(args ...interface{}) (n int, err error) {
printedArgs = args
return 0, nil
}
ErrorLogger(ctx, LogValues{
Query: "FakeQuery",
Params: []interface{}{"FakeParam"},
Err: errors.New("fakeErrMsg"),
})
tt.AssertContains(t, fmt.Sprint(printedArgs...), "FakeQuery", "FakeParam", "fakeErrMsg")
})
})
}