forked from mirror/logrus
move test functions and test utils functions in their own package
This commit is contained in:
parent
ec57031db1
commit
fa01b53097
|
@ -1,4 +1,4 @@
|
||||||
package logrus
|
package logrus_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
@ -8,6 +8,9 @@ import (
|
||||||
|
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
|
||||||
|
. "github.com/sirupsen/logrus"
|
||||||
|
. "github.com/sirupsen/logrus/internal/testutils"
|
||||||
)
|
)
|
||||||
|
|
||||||
type TestHook struct {
|
type TestHook struct {
|
||||||
|
|
|
@ -0,0 +1,58 @@
|
||||||
|
package testutils
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"encoding/json"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
. "github.com/sirupsen/logrus"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
)
|
||||||
|
|
||||||
|
func LogAndAssertJSON(t *testing.T, log func(*Logger), assertions func(fields Fields)) {
|
||||||
|
var buffer bytes.Buffer
|
||||||
|
var fields Fields
|
||||||
|
|
||||||
|
logger := New()
|
||||||
|
logger.Out = &buffer
|
||||||
|
logger.Formatter = new(JSONFormatter)
|
||||||
|
|
||||||
|
log(logger)
|
||||||
|
|
||||||
|
err := json.Unmarshal(buffer.Bytes(), &fields)
|
||||||
|
require.Nil(t, err)
|
||||||
|
|
||||||
|
assertions(fields)
|
||||||
|
}
|
||||||
|
|
||||||
|
func LogAndAssertText(t *testing.T, log func(*Logger), assertions func(fields map[string]string)) {
|
||||||
|
var buffer bytes.Buffer
|
||||||
|
|
||||||
|
logger := New()
|
||||||
|
logger.Out = &buffer
|
||||||
|
logger.Formatter = &TextFormatter{
|
||||||
|
DisableColors: true,
|
||||||
|
}
|
||||||
|
|
||||||
|
log(logger)
|
||||||
|
|
||||||
|
fields := make(map[string]string)
|
||||||
|
for _, kv := range strings.Split(buffer.String(), " ") {
|
||||||
|
if !strings.Contains(kv, "=") {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
kvArr := strings.Split(kv, "=")
|
||||||
|
key := strings.TrimSpace(kvArr[0])
|
||||||
|
val := kvArr[1]
|
||||||
|
if kvArr[1][0] == '"' {
|
||||||
|
var err error
|
||||||
|
val, err = strconv.Unquote(val)
|
||||||
|
require.NoError(t, err)
|
||||||
|
}
|
||||||
|
fields[key] = val
|
||||||
|
}
|
||||||
|
assertions(fields)
|
||||||
|
}
|
|
@ -1,63 +1,20 @@
|
||||||
package logrus
|
package logrus_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"strconv"
|
|
||||||
"strings"
|
|
||||||
"sync"
|
"sync"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
|
||||||
|
. "github.com/sirupsen/logrus"
|
||||||
|
. "github.com/sirupsen/logrus/internal/testutils"
|
||||||
)
|
)
|
||||||
|
|
||||||
func LogAndAssertJSON(t *testing.T, log func(*Logger), assertions func(fields Fields)) {
|
|
||||||
var buffer bytes.Buffer
|
|
||||||
var fields Fields
|
|
||||||
|
|
||||||
logger := New()
|
|
||||||
logger.Out = &buffer
|
|
||||||
logger.Formatter = new(JSONFormatter)
|
|
||||||
|
|
||||||
log(logger)
|
|
||||||
|
|
||||||
err := json.Unmarshal(buffer.Bytes(), &fields)
|
|
||||||
assert.Nil(t, err)
|
|
||||||
|
|
||||||
assertions(fields)
|
|
||||||
}
|
|
||||||
|
|
||||||
func LogAndAssertText(t *testing.T, log func(*Logger), assertions func(fields map[string]string)) {
|
|
||||||
var buffer bytes.Buffer
|
|
||||||
|
|
||||||
logger := New()
|
|
||||||
logger.Out = &buffer
|
|
||||||
logger.Formatter = &TextFormatter{
|
|
||||||
DisableColors: true,
|
|
||||||
}
|
|
||||||
|
|
||||||
log(logger)
|
|
||||||
|
|
||||||
fields := make(map[string]string)
|
|
||||||
for _, kv := range strings.Split(buffer.String(), " ") {
|
|
||||||
if !strings.Contains(kv, "=") {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
kvArr := strings.Split(kv, "=")
|
|
||||||
key := strings.TrimSpace(kvArr[0])
|
|
||||||
val := kvArr[1]
|
|
||||||
if kvArr[1][0] == '"' {
|
|
||||||
var err error
|
|
||||||
val, err = strconv.Unquote(val)
|
|
||||||
assert.NoError(t, err)
|
|
||||||
}
|
|
||||||
fields[key] = val
|
|
||||||
}
|
|
||||||
assertions(fields)
|
|
||||||
}
|
|
||||||
|
|
||||||
// TestReportCaller verifies that when ReportCaller is set, the 'func' field
|
// TestReportCaller verifies that when ReportCaller is set, the 'func' field
|
||||||
// is added, and when it is unset it is not set or modified
|
// is added, and when it is unset it is not set or modified
|
||||||
// Verify that functions within the Logrus package aren't considered when
|
// Verify that functions within the Logrus package aren't considered when
|
||||||
|
@ -78,7 +35,8 @@ func TestReportCallerWhenConfigured(t *testing.T) {
|
||||||
}, func(fields Fields) {
|
}, func(fields Fields) {
|
||||||
assert.Equal(t, "testWithCaller", fields["msg"])
|
assert.Equal(t, "testWithCaller", fields["msg"])
|
||||||
assert.Equal(t, "info", fields["level"])
|
assert.Equal(t, "info", fields["level"])
|
||||||
assert.Equal(t, "testing.tRunner", fields["func"])
|
assert.Equal(t,
|
||||||
|
"github.com/sirupsen/logrus_test.TestReportCallerWhenConfigured.func3", fields["func"])
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -91,9 +49,6 @@ func logSomething(t *testing.T, message string) Fields {
|
||||||
logger.Formatter = new(JSONFormatter)
|
logger.Formatter = new(JSONFormatter)
|
||||||
logger.ReportCaller = true
|
logger.ReportCaller = true
|
||||||
|
|
||||||
// override the filter to allow reporting of functions within the logrus package
|
|
||||||
logrusPackage = "bogusForTesting"
|
|
||||||
|
|
||||||
entry := logger.WithFields(Fields{
|
entry := logger.WithFields(Fields{
|
||||||
"foo": "bar",
|
"foo": "bar",
|
||||||
})
|
})
|
||||||
|
@ -103,8 +58,6 @@ func logSomething(t *testing.T, message string) Fields {
|
||||||
err := json.Unmarshal(buffer.Bytes(), &fields)
|
err := json.Unmarshal(buffer.Bytes(), &fields)
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
|
|
||||||
// now clear the override so as not to mess with other usage
|
|
||||||
logrusPackage = ""
|
|
||||||
return fields
|
return fields
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -114,7 +67,7 @@ func TestReportCallerHelperDirect(t *testing.T) {
|
||||||
|
|
||||||
assert.Equal(t, "direct", fields["msg"])
|
assert.Equal(t, "direct", fields["msg"])
|
||||||
assert.Equal(t, "info", fields["level"])
|
assert.Equal(t, "info", fields["level"])
|
||||||
assert.Regexp(t, "github.com/.*/logrus.logSomething", fields["func"])
|
assert.Regexp(t, "github.com/.*/logrus_test.logSomething", fields["func"])
|
||||||
}
|
}
|
||||||
|
|
||||||
// TestReportCallerHelperDirect - verify reference when logging from a function called via pointer
|
// TestReportCallerHelperDirect - verify reference when logging from a function called via pointer
|
||||||
|
@ -124,7 +77,7 @@ func TestReportCallerHelperViaPointer(t *testing.T) {
|
||||||
|
|
||||||
assert.Equal(t, "via pointer", fields["msg"])
|
assert.Equal(t, "via pointer", fields["msg"])
|
||||||
assert.Equal(t, "info", fields["level"])
|
assert.Equal(t, "info", fields["level"])
|
||||||
assert.Regexp(t, "github.com/.*/logrus.logSomething", fields["func"])
|
assert.Regexp(t, "github.com/.*/logrus_test.logSomething", fields["func"])
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestPrint(t *testing.T) {
|
func TestPrint(t *testing.T) {
|
||||||
|
@ -286,7 +239,7 @@ func TestWithTimeShouldOverrideTime(t *testing.T) {
|
||||||
LogAndAssertJSON(t, func(log *Logger) {
|
LogAndAssertJSON(t, func(log *Logger) {
|
||||||
log.WithTime(now).Info("foobar")
|
log.WithTime(now).Info("foobar")
|
||||||
}, func(fields Fields) {
|
}, func(fields Fields) {
|
||||||
assert.Equal(t, fields["time"], now.Format(defaultTimestampFormat))
|
assert.Equal(t, fields["time"], now.Format(time.RFC3339))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -296,7 +249,7 @@ func TestWithTimeShouldNotOverrideFields(t *testing.T) {
|
||||||
LogAndAssertJSON(t, func(log *Logger) {
|
LogAndAssertJSON(t, func(log *Logger) {
|
||||||
log.WithField("herp", "derp").WithTime(now).Info("blah")
|
log.WithField("herp", "derp").WithTime(now).Info("blah")
|
||||||
}, func(fields Fields) {
|
}, func(fields Fields) {
|
||||||
assert.Equal(t, fields["time"], now.Format(defaultTimestampFormat))
|
assert.Equal(t, fields["time"], now.Format(time.RFC3339))
|
||||||
assert.Equal(t, fields["herp"], "derp")
|
assert.Equal(t, fields["herp"], "derp")
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -307,7 +260,7 @@ func TestWithFieldShouldNotOverrideTime(t *testing.T) {
|
||||||
LogAndAssertJSON(t, func(log *Logger) {
|
LogAndAssertJSON(t, func(log *Logger) {
|
||||||
log.WithTime(now).WithField("herp", "derp").Info("blah")
|
log.WithTime(now).WithField("herp", "derp").Info("blah")
|
||||||
}, func(fields Fields) {
|
}, func(fields Fields) {
|
||||||
assert.Equal(t, fields["time"], now.Format(defaultTimestampFormat))
|
assert.Equal(t, fields["time"], now.Format(time.RFC3339))
|
||||||
assert.Equal(t, fields["herp"], "derp")
|
assert.Equal(t, fields["herp"], "derp")
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -385,11 +338,12 @@ func TestNestedLoggingReportsCorrectCaller(t *testing.T) {
|
||||||
llog.Info("looks delicious")
|
llog.Info("looks delicious")
|
||||||
|
|
||||||
err := json.Unmarshal(buffer.Bytes(), &fields)
|
err := json.Unmarshal(buffer.Bytes(), &fields)
|
||||||
assert.NoError(t, err, "should have decoded first message")
|
require.NoError(t, err, "should have decoded first message")
|
||||||
assert.Equal(t, len(fields), 5, "should have msg/time/level/func/context fields")
|
assert.Equal(t, len(fields), 5, "should have msg/time/level/func/context fields")
|
||||||
assert.Equal(t, "looks delicious", fields["msg"])
|
assert.Equal(t, "looks delicious", fields["msg"])
|
||||||
assert.Equal(t, "eating raw fish", fields["context"])
|
assert.Equal(t, "eating raw fish", fields["context"])
|
||||||
assert.Equal(t, "testing.tRunner", fields["func"])
|
assert.Equal(t,
|
||||||
|
"github.com/sirupsen/logrus_test.TestNestedLoggingReportsCorrectCaller", fields["func"])
|
||||||
|
|
||||||
buffer.Reset()
|
buffer.Reset()
|
||||||
|
|
||||||
|
@ -415,7 +369,8 @@ func TestNestedLoggingReportsCorrectCaller(t *testing.T) {
|
||||||
assert.Equal(t, "Brown", fields["James"])
|
assert.Equal(t, "Brown", fields["James"])
|
||||||
assert.Equal(t, "The hardest workin' man in show business", fields["msg"])
|
assert.Equal(t, "The hardest workin' man in show business", fields["msg"])
|
||||||
assert.Nil(t, fields["fields.msg"], "should not have prefixed previous `msg` entry")
|
assert.Nil(t, fields["fields.msg"], "should not have prefixed previous `msg` entry")
|
||||||
assert.Equal(t, "testing.tRunner", fields["func"])
|
assert.Equal(t,
|
||||||
|
"github.com/sirupsen/logrus_test.TestNestedLoggingReportsCorrectCaller", fields["func"])
|
||||||
|
|
||||||
logger.ReportCaller = false // return to default value
|
logger.ReportCaller = false // return to default value
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue