Add tests
This commit is contained in:
parent
8c0f2ebabc
commit
c05e16b6a0
@ -103,7 +103,6 @@ type Logger interface {
|
|||||||
type logger struct {
|
type logger struct {
|
||||||
output Writer
|
output Writer
|
||||||
component string
|
component string
|
||||||
topics map[string]struct{}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// New returns an implementation of the Logger interface.
|
// New returns an implementation of the Logger interface.
|
||||||
@ -121,14 +120,6 @@ func (l *logger) clone() *logger {
|
|||||||
component: l.component,
|
component: l.component,
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(l.topics) != 0 {
|
|
||||||
clone.topics = make(map[string]struct{})
|
|
||||||
|
|
||||||
for topic := range l.topics {
|
|
||||||
clone.topics[topic] = struct{}{}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return clone
|
return clone
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -5,15 +5,15 @@ import (
|
|||||||
"bytes"
|
"bytes"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestLoglevelNames(t *testing.T) {
|
func TestLoglevelNames(t *testing.T) {
|
||||||
assert.Equal(t, "DEBUG", Ldebug.String())
|
require.Equal(t, "DEBUG", Ldebug.String())
|
||||||
assert.Equal(t, "ERROR", Lerror.String())
|
require.Equal(t, "ERROR", Lerror.String())
|
||||||
assert.Equal(t, "WARN", Lwarn.String())
|
require.Equal(t, "WARN", Lwarn.String())
|
||||||
assert.Equal(t, "INFO", Linfo.String())
|
require.Equal(t, "INFO", Linfo.String())
|
||||||
assert.Equal(t, `SILENT`, Lsilent.String())
|
require.Equal(t, `SILENT`, Lsilent.String())
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestLogColorToNotTTY(t *testing.T) {
|
func TestLogColorToNotTTY(t *testing.T) {
|
||||||
@ -23,7 +23,7 @@ func TestLogColorToNotTTY(t *testing.T) {
|
|||||||
w := NewConsoleWriter(writer, Linfo, true).(*syncWriter)
|
w := NewConsoleWriter(writer, Linfo, true).(*syncWriter)
|
||||||
formatter := w.writer.(*consoleWriter).formatter.(*consoleFormatter)
|
formatter := w.writer.(*consoleWriter).formatter.(*consoleFormatter)
|
||||||
|
|
||||||
assert.NotEqual(t, true, formatter.color, "Color should not be used on a buffer logger")
|
require.NotEqual(t, true, formatter.color, "Color should not be used on a buffer logger")
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestLogContext(t *testing.T) {
|
func TestLogContext(t *testing.T) {
|
||||||
@ -53,7 +53,7 @@ func TestLogContext(t *testing.T) {
|
|||||||
lenWithoutCtx := buffer.Len()
|
lenWithoutCtx := buffer.Len()
|
||||||
buffer.Reset()
|
buffer.Reset()
|
||||||
|
|
||||||
assert.Greater(t, lenWithCtx, lenWithoutCtx, "Log line length without context is not shorter than with context")
|
require.Greater(t, lenWithCtx, lenWithoutCtx, "Log line length without context is not shorter than with context")
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestLogClone(t *testing.T) {
|
func TestLogClone(t *testing.T) {
|
||||||
@ -65,7 +65,7 @@ func TestLogClone(t *testing.T) {
|
|||||||
logger.Info().Log("info")
|
logger.Info().Log("info")
|
||||||
writer.Flush()
|
writer.Flush()
|
||||||
|
|
||||||
assert.Contains(t, buffer.String(), `component="test"`)
|
require.Contains(t, buffer.String(), `component="test"`)
|
||||||
|
|
||||||
buffer.Reset()
|
buffer.Reset()
|
||||||
|
|
||||||
@ -74,7 +74,7 @@ func TestLogClone(t *testing.T) {
|
|||||||
logger2.Info().Log("info")
|
logger2.Info().Log("info")
|
||||||
writer.Flush()
|
writer.Flush()
|
||||||
|
|
||||||
assert.Contains(t, buffer.String(), `component="tset"`)
|
require.Contains(t, buffer.String(), `component="tset"`)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestLogSilent(t *testing.T) {
|
func TestLogSilent(t *testing.T) {
|
||||||
@ -85,22 +85,22 @@ func TestLogSilent(t *testing.T) {
|
|||||||
|
|
||||||
logger.Debug().Log("debug")
|
logger.Debug().Log("debug")
|
||||||
writer.Flush()
|
writer.Flush()
|
||||||
assert.Equal(t, 0, buffer.Len(), "Buffer should be empty")
|
require.Equal(t, 0, buffer.Len(), "Buffer should be empty")
|
||||||
buffer.Reset()
|
buffer.Reset()
|
||||||
|
|
||||||
logger.Info().Log("info")
|
logger.Info().Log("info")
|
||||||
writer.Flush()
|
writer.Flush()
|
||||||
assert.Equal(t, 0, buffer.Len(), "Buffer should be empty")
|
require.Equal(t, 0, buffer.Len(), "Buffer should be empty")
|
||||||
buffer.Reset()
|
buffer.Reset()
|
||||||
|
|
||||||
logger.Warn().Log("warn")
|
logger.Warn().Log("warn")
|
||||||
writer.Flush()
|
writer.Flush()
|
||||||
assert.Equal(t, 0, buffer.Len(), "Buffer should be empty")
|
require.Equal(t, 0, buffer.Len(), "Buffer should be empty")
|
||||||
buffer.Reset()
|
buffer.Reset()
|
||||||
|
|
||||||
logger.Error().Log("error")
|
logger.Error().Log("error")
|
||||||
writer.Flush()
|
writer.Flush()
|
||||||
assert.Equal(t, 0, buffer.Len(), "Buffer should be empty")
|
require.Equal(t, 0, buffer.Len(), "Buffer should be empty")
|
||||||
buffer.Reset()
|
buffer.Reset()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -112,22 +112,22 @@ func TestLogDebug(t *testing.T) {
|
|||||||
|
|
||||||
logger.Debug().Log("debug")
|
logger.Debug().Log("debug")
|
||||||
writer.Flush()
|
writer.Flush()
|
||||||
assert.NotEqual(t, 0, buffer.Len(), "Buffer should not be empty")
|
require.NotEqual(t, 0, buffer.Len(), "Buffer should not be empty")
|
||||||
buffer.Reset()
|
buffer.Reset()
|
||||||
|
|
||||||
logger.Info().Log("info")
|
logger.Info().Log("info")
|
||||||
writer.Flush()
|
writer.Flush()
|
||||||
assert.NotEqual(t, 0, buffer.Len(), "Buffer should not be empty")
|
require.NotEqual(t, 0, buffer.Len(), "Buffer should not be empty")
|
||||||
buffer.Reset()
|
buffer.Reset()
|
||||||
|
|
||||||
logger.Warn().Log("warn")
|
logger.Warn().Log("warn")
|
||||||
writer.Flush()
|
writer.Flush()
|
||||||
assert.NotEqual(t, 0, buffer.Len(), "Buffer should not be empty")
|
require.NotEqual(t, 0, buffer.Len(), "Buffer should not be empty")
|
||||||
buffer.Reset()
|
buffer.Reset()
|
||||||
|
|
||||||
logger.Error().Log("error")
|
logger.Error().Log("error")
|
||||||
writer.Flush()
|
writer.Flush()
|
||||||
assert.NotEqual(t, 0, buffer.Len(), "Buffer should not be empty")
|
require.NotEqual(t, 0, buffer.Len(), "Buffer should not be empty")
|
||||||
buffer.Reset()
|
buffer.Reset()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -139,22 +139,22 @@ func TestLogInfo(t *testing.T) {
|
|||||||
|
|
||||||
logger.Debug().Log("debug")
|
logger.Debug().Log("debug")
|
||||||
writer.Flush()
|
writer.Flush()
|
||||||
assert.Equal(t, 0, buffer.Len(), "Buffer should be empty")
|
require.Equal(t, 0, buffer.Len(), "Buffer should be empty")
|
||||||
buffer.Reset()
|
buffer.Reset()
|
||||||
|
|
||||||
logger.Info().Log("info")
|
logger.Info().Log("info")
|
||||||
writer.Flush()
|
writer.Flush()
|
||||||
assert.NotEqual(t, 0, buffer.Len(), "Buffer should not be empty")
|
require.NotEqual(t, 0, buffer.Len(), "Buffer should not be empty")
|
||||||
buffer.Reset()
|
buffer.Reset()
|
||||||
|
|
||||||
logger.Warn().Log("warn")
|
logger.Warn().Log("warn")
|
||||||
writer.Flush()
|
writer.Flush()
|
||||||
assert.NotEqual(t, 0, buffer.Len(), "Buffer should not be empty")
|
require.NotEqual(t, 0, buffer.Len(), "Buffer should not be empty")
|
||||||
buffer.Reset()
|
buffer.Reset()
|
||||||
|
|
||||||
logger.Error().Log("error")
|
logger.Error().Log("error")
|
||||||
writer.Flush()
|
writer.Flush()
|
||||||
assert.NotEqual(t, 0, buffer.Len(), "Buffer should not be empty")
|
require.NotEqual(t, 0, buffer.Len(), "Buffer should not be empty")
|
||||||
buffer.Reset()
|
buffer.Reset()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -166,22 +166,22 @@ func TestLogWarn(t *testing.T) {
|
|||||||
|
|
||||||
logger.Debug().Log("debug")
|
logger.Debug().Log("debug")
|
||||||
writer.Flush()
|
writer.Flush()
|
||||||
assert.Equal(t, 0, buffer.Len(), "Buffer should be empty")
|
require.Equal(t, 0, buffer.Len(), "Buffer should be empty")
|
||||||
buffer.Reset()
|
buffer.Reset()
|
||||||
|
|
||||||
logger.Info().Log("info")
|
logger.Info().Log("info")
|
||||||
writer.Flush()
|
writer.Flush()
|
||||||
assert.Equal(t, 0, buffer.Len(), "Buffer should be empty")
|
require.Equal(t, 0, buffer.Len(), "Buffer should be empty")
|
||||||
buffer.Reset()
|
buffer.Reset()
|
||||||
|
|
||||||
logger.Warn().Log("warn")
|
logger.Warn().Log("warn")
|
||||||
writer.Flush()
|
writer.Flush()
|
||||||
assert.NotEqual(t, 0, buffer.Len(), "Buffer should not be empty")
|
require.NotEqual(t, 0, buffer.Len(), "Buffer should not be empty")
|
||||||
buffer.Reset()
|
buffer.Reset()
|
||||||
|
|
||||||
logger.Error().Log("error")
|
logger.Error().Log("error")
|
||||||
writer.Flush()
|
writer.Flush()
|
||||||
assert.NotEqual(t, 0, buffer.Len(), "Buffer should not be empty")
|
require.NotEqual(t, 0, buffer.Len(), "Buffer should not be empty")
|
||||||
buffer.Reset()
|
buffer.Reset()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -193,21 +193,43 @@ func TestLogError(t *testing.T) {
|
|||||||
|
|
||||||
logger.Debug().Log("debug")
|
logger.Debug().Log("debug")
|
||||||
writer.Flush()
|
writer.Flush()
|
||||||
assert.Equal(t, 0, buffer.Len(), "Buffer should be empty")
|
require.Equal(t, 0, buffer.Len(), "Buffer should be empty")
|
||||||
buffer.Reset()
|
buffer.Reset()
|
||||||
|
|
||||||
logger.Info().Log("info")
|
logger.Info().Log("info")
|
||||||
writer.Flush()
|
writer.Flush()
|
||||||
assert.Equal(t, 0, buffer.Len(), "Buffer should be empty")
|
require.Equal(t, 0, buffer.Len(), "Buffer should be empty")
|
||||||
buffer.Reset()
|
buffer.Reset()
|
||||||
|
|
||||||
logger.Warn().Log("warn")
|
logger.Warn().Log("warn")
|
||||||
writer.Flush()
|
writer.Flush()
|
||||||
assert.Equal(t, 0, buffer.Len(), "Buffer should be empty")
|
require.Equal(t, 0, buffer.Len(), "Buffer should be empty")
|
||||||
buffer.Reset()
|
buffer.Reset()
|
||||||
|
|
||||||
logger.Error().Log("error")
|
logger.Error().Log("error")
|
||||||
writer.Flush()
|
writer.Flush()
|
||||||
assert.NotEqual(t, 0, buffer.Len(), "Buffer should not be empty")
|
require.NotEqual(t, 0, buffer.Len(), "Buffer should not be empty")
|
||||||
buffer.Reset()
|
buffer.Reset()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestLogWithField(t *testing.T) {
|
||||||
|
bufwriter := NewBufferWriter(Linfo, 10)
|
||||||
|
|
||||||
|
logger := New("test").WithOutput(bufwriter)
|
||||||
|
logger = logger.WithField("foo", "bar")
|
||||||
|
logger.Info().Log("hello")
|
||||||
|
|
||||||
|
events := bufwriter.Events()
|
||||||
|
|
||||||
|
require.Equal(t, 1, len(events))
|
||||||
|
require.Empty(t, events[0].err)
|
||||||
|
require.Equal(t, "bar", events[0].Data["foo"])
|
||||||
|
|
||||||
|
logger = logger.WithField("func", func() bool { return true })
|
||||||
|
logger.Info().Log("hello")
|
||||||
|
|
||||||
|
events = bufwriter.Events()
|
||||||
|
require.Equal(t, 2, len(events))
|
||||||
|
require.NotEmpty(t, events[1].err)
|
||||||
|
require.Equal(t, "bar", events[0].Data["foo"])
|
||||||
|
}
|
||||||
|
|||||||
181
log/writer_test.go
Normal file
181
log/writer_test.go
Normal file
@ -0,0 +1,181 @@
|
|||||||
|
package log
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"testing"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestJSONWriter(t *testing.T) {
|
||||||
|
buffer := bytes.Buffer{}
|
||||||
|
|
||||||
|
writer := NewJSONWriter(&buffer, Linfo)
|
||||||
|
writer.Write(&Event{
|
||||||
|
logger: &logger{},
|
||||||
|
Time: time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC),
|
||||||
|
Level: Linfo,
|
||||||
|
Component: "test",
|
||||||
|
Caller: "me",
|
||||||
|
Message: "hello world",
|
||||||
|
err: "",
|
||||||
|
Data: map[string]interface{}{"foo": "bar"},
|
||||||
|
})
|
||||||
|
|
||||||
|
require.Equal(t, `{"Time":"2009-11-10T23:00:00Z","Level":"INFO","Component":"test","Caller":"me","Message":"hello world","Data":{"caller":"me","component":"test","foo":"bar","message":"hello world","ts":"2009-11-10T23:00:00Z"}}`, buffer.String())
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestConsoleWriter(t *testing.T) {
|
||||||
|
buffer := bytes.Buffer{}
|
||||||
|
|
||||||
|
writer := NewConsoleWriter(&buffer, Linfo, false)
|
||||||
|
writer.Write(&Event{
|
||||||
|
logger: &logger{},
|
||||||
|
Time: time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC),
|
||||||
|
Level: Linfo,
|
||||||
|
Component: "test",
|
||||||
|
Caller: "me",
|
||||||
|
Message: "hello world",
|
||||||
|
err: "",
|
||||||
|
Data: map[string]interface{}{"foo": "bar"},
|
||||||
|
})
|
||||||
|
|
||||||
|
require.Equal(t, `ts=2009-11-10T23:00:00Z level=INFO component="test" msg="hello world" foo="bar"`+"\n", buffer.String())
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestTopicWriter(t *testing.T) {
|
||||||
|
bufwriter := NewBufferWriter(Linfo, 10)
|
||||||
|
writer1 := NewTopicWriter(bufwriter, []string{})
|
||||||
|
writer2 := NewTopicWriter(bufwriter, []string{"foobar"})
|
||||||
|
|
||||||
|
writer1.Write(&Event{
|
||||||
|
logger: &logger{},
|
||||||
|
Time: time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC),
|
||||||
|
Level: Linfo,
|
||||||
|
Component: "test",
|
||||||
|
Caller: "me",
|
||||||
|
Message: "hello world",
|
||||||
|
err: "",
|
||||||
|
Data: map[string]interface{}{"foo": "bar"},
|
||||||
|
})
|
||||||
|
|
||||||
|
writer2.Write(&Event{
|
||||||
|
logger: &logger{},
|
||||||
|
Time: time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC),
|
||||||
|
Level: Linfo,
|
||||||
|
Component: "test",
|
||||||
|
Caller: "me",
|
||||||
|
Message: "hello world",
|
||||||
|
err: "",
|
||||||
|
Data: map[string]interface{}{"foo": "bar"},
|
||||||
|
})
|
||||||
|
|
||||||
|
require.Equal(t, 1, len(bufwriter.Events()))
|
||||||
|
|
||||||
|
writer1.Write(&Event{
|
||||||
|
logger: &logger{},
|
||||||
|
Time: time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC),
|
||||||
|
Level: Linfo,
|
||||||
|
Component: "foobar",
|
||||||
|
Caller: "me",
|
||||||
|
Message: "hello world",
|
||||||
|
err: "",
|
||||||
|
Data: map[string]interface{}{"foo": "bar"},
|
||||||
|
})
|
||||||
|
|
||||||
|
writer2.Write(&Event{
|
||||||
|
logger: &logger{},
|
||||||
|
Time: time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC),
|
||||||
|
Level: Linfo,
|
||||||
|
Component: "foobar",
|
||||||
|
Caller: "me",
|
||||||
|
Message: "hello world",
|
||||||
|
err: "",
|
||||||
|
Data: map[string]interface{}{"foo": "bar"},
|
||||||
|
})
|
||||||
|
|
||||||
|
require.Equal(t, 3, len(bufwriter.Events()))
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestMultiwriter(t *testing.T) {
|
||||||
|
bufwriter1 := NewBufferWriter(Linfo, 10)
|
||||||
|
bufwriter2 := NewBufferWriter(Linfo, 10)
|
||||||
|
|
||||||
|
writer := NewMultiWriter(bufwriter1, bufwriter2)
|
||||||
|
|
||||||
|
writer.Write(&Event{
|
||||||
|
logger: &logger{},
|
||||||
|
Time: time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC),
|
||||||
|
Level: Linfo,
|
||||||
|
Component: "foobar",
|
||||||
|
Caller: "me",
|
||||||
|
Message: "hello world",
|
||||||
|
err: "",
|
||||||
|
Data: map[string]interface{}{"foo": "bar"},
|
||||||
|
})
|
||||||
|
|
||||||
|
require.Equal(t, 1, len(bufwriter1.Events()))
|
||||||
|
require.Equal(t, 1, len(bufwriter2.Events()))
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestLevelRewriter(t *testing.T) {
|
||||||
|
bufwriter := NewBufferWriter(Linfo, 10)
|
||||||
|
|
||||||
|
rule := LevelRewriteRule{
|
||||||
|
Level: Lwarn,
|
||||||
|
Component: "foobar",
|
||||||
|
Match: map[string]string{
|
||||||
|
"foo": "bar",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
writer := NewLevelRewriter(bufwriter, []LevelRewriteRule{rule})
|
||||||
|
writer.Write(&Event{
|
||||||
|
logger: &logger{},
|
||||||
|
Time: time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC),
|
||||||
|
Level: Linfo,
|
||||||
|
Component: "foobar",
|
||||||
|
Caller: "me",
|
||||||
|
Message: "hello world",
|
||||||
|
err: "",
|
||||||
|
Data: map[string]interface{}{"foo": "bar"},
|
||||||
|
})
|
||||||
|
|
||||||
|
events := bufwriter.Events()
|
||||||
|
|
||||||
|
require.Equal(t, 1, len(events))
|
||||||
|
require.Equal(t, Lwarn, events[0].Level)
|
||||||
|
|
||||||
|
writer.Write(&Event{
|
||||||
|
logger: &logger{},
|
||||||
|
Time: time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC),
|
||||||
|
Level: Linfo,
|
||||||
|
Component: "foobar",
|
||||||
|
Caller: "me",
|
||||||
|
Message: "hello world",
|
||||||
|
err: "",
|
||||||
|
Data: map[string]interface{}{"bar": "foo"},
|
||||||
|
})
|
||||||
|
|
||||||
|
events = bufwriter.Events()
|
||||||
|
|
||||||
|
require.Equal(t, 2, len(events))
|
||||||
|
require.Equal(t, Linfo, events[1].Level)
|
||||||
|
|
||||||
|
writer.Write(&Event{
|
||||||
|
logger: &logger{},
|
||||||
|
Time: time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC),
|
||||||
|
Level: Linfo,
|
||||||
|
Component: "test",
|
||||||
|
Caller: "me",
|
||||||
|
Message: "hello world",
|
||||||
|
err: "",
|
||||||
|
Data: map[string]interface{}{"foo": "bar"},
|
||||||
|
})
|
||||||
|
|
||||||
|
events = bufwriter.Events()
|
||||||
|
|
||||||
|
require.Equal(t, 3, len(events))
|
||||||
|
require.Equal(t, Linfo, events[2].Level)
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user