move test functions and test utils functions in their own package

This commit is contained in:
David Bariod 2018-10-28 14:07:57 +01:00
parent ec57031db1
commit fa01b53097
3 changed files with 79 additions and 63 deletions

View File

@ -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 {

View File

@ -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)
}

View File

@ -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
} }