Add tests

This commit is contained in:
Ingo Oppermann 2023-01-24 21:04:24 +01:00
parent 8c0f2ebabc
commit c05e16b6a0
No known key found for this signature in database
GPG Key ID: 2AB32426E9DD229E
3 changed files with 233 additions and 39 deletions

View File

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

View File

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