| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- 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{})
- }
|