Skip to content

Commit e9b5d07

Browse files
authored
Collect structured entries in logger mock (#6)
1 parent abb0344 commit e9b5d07

File tree

7 files changed

+61
-17
lines changed

7 files changed

+61
-17
lines changed

.github/workflows/bench.yml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,7 @@ jobs:
6868
run: |
6969
export REF_NAME=master
7070
cd __base
71-
BENCH_COUNT=5 make bench-run bench-stat
72-
cp bench-master.txt ../bench-master.txt
71+
make | grep bench-run && (BENCH_COUNT=5 make bench-run bench-stat && cp bench-master.txt ../bench-master.txt) || echo "No benchmarks in base"
7372
- name: Benchmark
7473
id: bench
7574
run: |

.github/workflows/test-unit.yml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,7 @@ jobs:
5151
if: matrix.go-version == '1.16.x' && env.RUN_BASE_COVERAGE == 'on' && steps.benchmark-base.outputs.cache-hit != 'true' && github.event.pull_request.base.sha != ''
5252
run: |
5353
cd __base
54-
make test-unit
55-
go tool cover -func=./unit.coverprofile | sed -e 's/.go:[0-9]*:\t/.go\t/g' | sed -e 's/\t\t*/\t/g' > ../unit-base.txt
54+
make | grep test-unit && (make test-unit && go tool cover -func=./unit.coverprofile | sed -e 's/.go:[0-9]*:\t/.go\t/g' | sed -e 's/\t\t*/\t/g' > ../unit-base.txt) || echo "No test-unit in base"
5655
- name: Test
5756
id: test
5857
run: |

.golangci.yml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,10 @@ linters:
2828
- paralleltest
2929
- forbidigo
3030
- exhaustivestruct
31-
- interfacer
31+
- interfacer # deprecated
3232
- forcetypeassert
33-
- scopelint
33+
- scopelint # deprecated
34+
- ifshort # too many false positives
3435

3536
issues:
3637
exclude-use-default: false

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ module github.com/bool64/ctxd
33
go 1.13
44

55
require (
6-
github.com/bool64/dev v0.1.26
6+
github.com/bool64/dev v0.1.28
77
github.com/stretchr/testify v1.4.0
88
github.com/swaggest/usecase v0.1.5
99
)

go.sum

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,13 @@
1-
github.com/bool64/dev v0.1.0/go.mod h1:pn52JC52uSgpazChx9CeXyG+S3sW2V36HHoLNBbscdg=
21
github.com/bool64/dev v0.1.25/go.mod h1:cTHiTDNc8EewrQPy3p1obNilpMpdmlUesDkFTF2zRWU=
3-
github.com/bool64/dev v0.1.26 h1:9RppeANjTKsF0ZEROkgh0z8qKTvpNeVmKnz0uuCAkS4=
4-
github.com/bool64/dev v0.1.26/go.mod h1:cTHiTDNc8EewrQPy3p1obNilpMpdmlUesDkFTF2zRWU=
2+
github.com/bool64/dev v0.1.28 h1:bL7WI4kF5RzjzsQ+8wyWtqQkasw4m4q8l1Cz3CjShZE=
3+
github.com/bool64/dev v0.1.28/go.mod h1:cTHiTDNc8EewrQPy3p1obNilpMpdmlUesDkFTF2zRWU=
54
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
65
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
76
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
87
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
98
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
109
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
1110
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
12-
github.com/swaggest/usecase v0.0.0-20200928062416-27f47131b0f8 h1:XGJJai6ngqYpy/cTMvGreiO+jradIn1uq7Q5hY2OCF4=
13-
github.com/swaggest/usecase v0.0.0-20200928062416-27f47131b0f8/go.mod h1:rcngDv7OaBXZyEXdEtimcDeNon7sq3iqLm9hxT06s3c=
1411
github.com/swaggest/usecase v0.1.5 h1:xMDWXnYGysVaF2f3ZnmDsn2FlZ8fd3FJD+O+8wl4aNQ=
1512
github.com/swaggest/usecase v0.1.5/go.mod h1:uubX4ZbjQK1Bnl0xX9hOYpb/IUiSoVKk/yQImawbNMU=
1613
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=

mock.go

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,21 @@ import (
55
"context"
66
"encoding/json"
77
"sync"
8+
"time"
89
)
910

1011
// LoggerMock logs messages to internal buffer.
1112
type LoggerMock struct {
12-
mu sync.Mutex
13-
bytes.Buffer
1413
OnError func(err error)
14+
15+
sync.Mutex
16+
bytes.Buffer
17+
LoggedEntries []struct {
18+
Time time.Time `json:"time"`
19+
Level string `json:"level"`
20+
Message string `json:"message"`
21+
Data map[string]interface{} `json:"data,omitempty"`
22+
}
1523
}
1624

1725
func (m *LoggerMock) failed(err error) bool {
@@ -31,14 +39,23 @@ func (m *LoggerMock) failed(err error) bool {
3139
}
3240

3341
func (m *LoggerMock) log(ctx context.Context, level, msg string, keysAndValues []interface{}) {
34-
m.mu.Lock()
35-
defer m.mu.Unlock()
42+
m.Lock()
43+
defer m.Unlock()
44+
45+
data := Tuples(append(Fields(ctx), keysAndValues...)).Fields()
3646

37-
jm, err := json.Marshal(Tuples(append(Fields(ctx), keysAndValues...)).Fields())
47+
jm, err := json.Marshal(data)
3848
if m.failed(err) {
3949
return
4050
}
4151

52+
m.LoggedEntries = append(m.LoggedEntries, struct {
53+
Time time.Time `json:"time"`
54+
Level string `json:"level"`
55+
Message string `json:"message"`
56+
Data map[string]interface{} `json:"data,omitempty"`
57+
}{Time: time.Now(), Level: level, Message: msg, Data: data})
58+
4259
out := LogWriter(ctx)
4360
if out == nil {
4461
out = m

mock_test.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,34 @@ func TestLoggerMock_Error(t *testing.T) {
2626
m.Error(context.Background(), "foo", "func", func() {})
2727
assert.Equal(t, "json: unsupported type: func()\n", m.String())
2828
}
29+
30+
func TestLoggerMock_Debug(t *testing.T) {
31+
m := ctxd.LoggerMock{}
32+
33+
ctx := ctxd.AddFields(context.Background(), "foo", 1, "bar", 2)
34+
35+
m.Debug(ctx, "debug message", "baz", 3)
36+
m.Info(ctx, "info message", "baz", 3)
37+
m.Warn(ctx, "warn message", "baz", 3)
38+
m.Error(ctx, "error message", "baz", 3)
39+
m.Important(ctx, "important message", "baz", 3)
40+
41+
assert.Equal(t, `debug: debug message {"bar":2,"baz":3,"foo":1}
42+
info: info message {"bar":2,"baz":3,"foo":1}
43+
warn: warn message {"bar":2,"baz":3,"foo":1}
44+
error: error message {"bar":2,"baz":3,"foo":1}
45+
important: important message {"bar":2,"baz":3,"foo":1}`+"\n", m.String(), m.String())
46+
47+
data := map[string]interface{}{"bar": 2, "baz": 3, "foo": 1}
48+
49+
assert.Equal(t, "debug message", m.LoggedEntries[0].Message)
50+
assert.Equal(t, data, m.LoggedEntries[0].Data)
51+
assert.Equal(t, "info message", m.LoggedEntries[1].Message)
52+
assert.Equal(t, data, m.LoggedEntries[1].Data)
53+
assert.Equal(t, "warn message", m.LoggedEntries[2].Message)
54+
assert.Equal(t, data, m.LoggedEntries[2].Data)
55+
assert.Equal(t, "error message", m.LoggedEntries[3].Message)
56+
assert.Equal(t, data, m.LoggedEntries[3].Data)
57+
assert.Equal(t, "important message", m.LoggedEntries[4].Message)
58+
assert.Equal(t, data, m.LoggedEntries[4].Data)
59+
}

0 commit comments

Comments
 (0)