FILE / ScuroNeko/mtg

logger/zerolog_test.go

Исходный файл и его история в репозитории.
FILE 130b02013bf3a8927563b6b94a170ba299d605e8
Files
mtg/logger/zerolog_test.go
T
2022-08-08 15:54:38 +03:00

122 lines
3.1 KiB
Go

package logger_test
import (
"bytes"
"encoding/json"
"io"
"strings"
"testing"
"time"
"github.com/9seconds/mtg/v2/logger"
"github.com/9seconds/mtg/v2/mtglib"
"github.com/rs/zerolog"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/suite"
)
type zeroLoggerLogMessage struct {
Timestamp int64 `json:"timestamp"`
Level string `json:"level"`
StrParam string `json:"strparam"`
IntParam int `json:"intparam"`
Logger string `json:"logger"`
Error string `json:"error"`
Message string `json:"message"`
}
type ZeroLoggerTestSuite struct {
suite.Suite
}
func (suite *ZeroLoggerTestSuite) SetupSuite() {
zerolog.SetGlobalLevel(zerolog.TraceLevel)
zerolog.TimeFieldFormat = zerolog.TimeFormatUnixMs
zerolog.TimestampFieldName = "timestamp"
zerolog.LevelFieldName = "level"
}
func (suite *ZeroLoggerTestSuite) TestLog() {
testData := map[string]func(mtglib.Logger){
"info": func(l mtglib.Logger) { l.Info("hello") },
"warn": func(l mtglib.Logger) { l.Warning("hello") },
"printf": func(l mtglib.Logger) { l.Printf("hello") },
"debug": func(l mtglib.Logger) { l.Debug("hello") },
"info-error": func(l mtglib.Logger) { l.InfoError("hello", io.EOF) },
"warn-error": func(l mtglib.Logger) { l.WarningError("hello", io.EOF) },
"debug-error": func(l mtglib.Logger) { l.DebugError("hello", io.EOF) },
}
for k, v := range testData {
name := k
callback := v
level := strings.TrimSuffix(name, "-error")
suite.T().Run(name, func(t *testing.T) {
buf := &bytes.Buffer{}
log := logger.NewZeroLogger(zerolog.New(buf).With().Timestamp().Logger())
callback(log.Named("name").BindInt("intparam", 1).BindStr("strparam", name))
msg := &zeroLoggerLogMessage{}
assert.NoError(t, json.Unmarshal(buf.Bytes(), msg))
timestamp := time.Unix(msg.Timestamp/1000, (msg.Timestamp%1000)*1_000_000)
assert.WithinDuration(t, time.Now(), timestamp, 100*time.Millisecond)
if level == "printf" {
level = "debug"
}
assert.Equal(t, level, msg.Level)
assert.Equal(t, name, msg.StrParam)
assert.EqualValues(t, 1, msg.IntParam)
assert.Equal(t, "name", msg.Logger)
assert.Equal(t, "hello", msg.Message)
if level != name && name != "printf" {
assert.Equal(t, io.EOF.Error(), msg.Error)
} else {
assert.Empty(t, msg.Error)
}
})
}
}
func (suite *ZeroLoggerTestSuite) TestIndependence() {
buf := &bytes.Buffer{}
log := logger.NewZeroLogger(zerolog.New(buf).With().Timestamp().Logger())
log1 := log.Named("1")
log2 := log.Named("2")
log12 := log1.Named("2")
log1.BindInt("param", 1).Info("hello")
log1Output := buf.String()
buf.Reset()
log2.BindInt("lalala", 2).Info("hello")
log2Output := buf.String()
buf.Reset()
log12.BindStr("tttt", "qqq").Info("hello")
log12Output := buf.String()
suite.NotContains("lalala", log1Output)
suite.NotContains("tttt", log1Output)
suite.NotContains("param", log2Output)
suite.NotContains("tttt", log1Output)
suite.NotContains("param", log12Output)
suite.NotContains("lalala", log12Output)
}
func TestZeroLogger(t *testing.T) { //nolint: paralleltest
suite.Run(t, &ZeroLoggerTestSuite{})
}