Files
athens/pkg/log/log_test.go
Matt b9c8fb7f8a Rework logging defaults (#1927)
Changes default logger back to plain.
2024-03-27 17:48:10 -07:00

152 lines
3.8 KiB
Go

package log
import (
"bytes"
"fmt"
"strings"
"testing"
"time"
"github.com/sirupsen/logrus"
"github.com/stretchr/testify/require"
)
type input struct {
name string
cloudProvider string
format string
level logrus.Level
fields logrus.Fields
logFunc func(e Entry) time.Time
output string
}
var testCases = []input{
{
name: "gcp_debug",
cloudProvider: "GCP",
level: logrus.DebugLevel,
fields: logrus.Fields{},
logFunc: func(e Entry) time.Time {
t := time.Now()
e.Infof("info message")
return t
},
output: `{"message":"info message","severity":"info","timestamp":"%v"}` + "\n",
},
{
name: "gcp_error",
cloudProvider: "GCP",
level: logrus.DebugLevel,
fields: logrus.Fields{},
logFunc: func(e Entry) time.Time {
t := time.Now()
e.Errorf("err message")
return t
},
output: `{"message":"err message","severity":"error","timestamp":"%v"}` + "\n",
},
{
name: "gcp_empty",
cloudProvider: "GCP",
level: logrus.ErrorLevel,
fields: logrus.Fields{},
logFunc: func(e Entry) time.Time {
t := time.Now()
e.Infof("info message")
return t
},
output: ``,
},
{
name: "gcp_fields",
cloudProvider: "GCP",
level: logrus.DebugLevel,
fields: logrus.Fields{"field1": "value1", "field2": 2},
logFunc: func(e Entry) time.Time {
t := time.Now()
e.Debugf("debug message")
return t
},
output: `{"field1":"value1","field2":2,"message":"debug message","severity":"debug","timestamp":"%v"}` + "\n",
},
{
name: "gcp_logs",
cloudProvider: "GCP",
level: logrus.DebugLevel,
fields: logrus.Fields{},
logFunc: func(e Entry) time.Time {
t := time.Now()
e.Warnf("warn message")
return t
},
output: `{"message":"warn message","severity":"warning","timestamp":"%v"}` + "\n",
},
{
name: "default plain",
format: "plain",
cloudProvider: "none",
level: logrus.DebugLevel,
fields: logrus.Fields{"xyz": "abc", "abc": "xyz"},
logFunc: func(e Entry) time.Time {
t := time.Now()
e.Warnf("warn message")
return t
},
output: `WARNING[%v]: warn message` + "\t" + `abc=xyz xyz=abc` + " \n",
},
{
name: "default",
cloudProvider: "none",
level: logrus.DebugLevel,
fields: logrus.Fields{"xyz": "abc", "abc": "xyz"},
logFunc: func(e Entry) time.Time {
t := time.Now()
e.Warnf("warn message")
return t
},
output: `WARNING[%v]: warn message` + "\t" + `abc=xyz xyz=abc` + " \n",
},
{
name: "default json",
format: "json",
cloudProvider: "none",
level: logrus.DebugLevel,
fields: logrus.Fields{"xyz": "abc", "abc": "xyz"},
logFunc: func(e Entry) time.Time {
t := time.Now()
e.Warnf("warn message")
return t
},
output: `{"abc":"xyz","level":"warning","msg":"warn message","time":"%v","xyz":"abc"}` + "\n",
},
}
func TestCloudLogger(t *testing.T) {
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
lggr := New(tc.cloudProvider, tc.level, tc.format)
var buf bytes.Buffer
lggr.Out = &buf
e := lggr.WithFields(tc.fields)
entryTime := tc.logFunc(e)
out := buf.String()
expected := tc.output
if strings.Contains(expected, "%v") {
if tc.format == "plain" || (tc.format == "" && (tc.cloudProvider == "none" || tc.cloudProvider == "")) {
expected = fmt.Sprintf(expected, entryTime.Format(time.Kitchen))
} else {
expected = fmt.Sprintf(expected, entryTime.Format(time.RFC3339))
}
}
require.Equal(t, expected, out, "expected the logged entry to match the testCase output")
})
}
}
func TestNoOpLogger(t *testing.T) {
l := NoOpLogger()
require.NotPanics(t, func() { l.Infof("test") })
}