mirror of
https://github.com/gomods/athens
synced 2026-02-03 09:50:31 +00:00
152 lines
3.8 KiB
Go
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") })
|
|
}
|