1 package grpc_zap
2
3 import (
4 "fmt"
5 "runtime"
6 "testing"
7
8 "github.com/stretchr/testify/assert"
9 "go.uber.org/zap"
10 "go.uber.org/zap/zapcore"
11 "go.uber.org/zap/zaptest"
12 "go.uber.org/zap/zaptest/observer"
13 "google.golang.org/grpc/grpclog"
14 )
15
16 func Test_zapGrpcLogger_V(t *testing.T) {
17 const (
18
19
20 normal = 0
21
22
23
24 verbose = 2
25
26
27
28 extremelyVerbose = 99
29 )
30
31 core, _ := observer.New(zapcore.DebugLevel)
32 logger := zap.New(core)
33 ReplaceGrpcLoggerV2WithVerbosity(logger, verbose)
34 assert.True(t, grpclog.V(normal))
35 assert.True(t, grpclog.V(verbose))
36 assert.False(t, grpclog.V(extremelyVerbose))
37 }
38
39 func TestReplaceGrpcLoggerV2(t *testing.T) {
40 defer ReplaceGrpcLoggerV2(zap.NewNop())
41
42 args := []interface{}{"message", "param"}
43 cases := []struct {
44 name string
45 fn func(...interface{})
46 level zapcore.Level
47 }{
48 {name: "Info", fn: grpclog.Info, level: zap.InfoLevel},
49 {name: "Infoln", fn: grpclog.Infoln, level: zap.InfoLevel},
50 {name: "Warning", fn: grpclog.Warning, level: zap.WarnLevel},
51 {name: "Warningln", fn: grpclog.Warningln, level: zap.WarnLevel},
52 {name: "Error", fn: grpclog.Error, level: zap.ErrorLevel},
53 {name: "Errorln", fn: grpclog.Errorln, level: zap.ErrorLevel},
54 {name: "Fatal", fn: grpclog.Fatal, level: zap.FatalLevel},
55 {name: "Fatalln", fn: grpclog.Fatalln, level: zap.FatalLevel},
56 }
57 for _, c := range cases {
58 t.Run(c.name, func(t *testing.T) {
59 called := false
60 ReplaceGrpcLoggerV2(zaptest.NewLogger(t, zaptest.WrapOptions(zap.Hooks(func(entry zapcore.Entry) error {
61 called = true
62 assert.Equal(t, c.level, entry.Level)
63 assert.Equal(t, fmt.Sprint(args...), entry.Message)
64 _, file, _, _ := runtime.Caller(0)
65 assert.Equal(t, file, entry.Caller.File)
66 return nil
67 }), zap.AddCaller(), zap.OnFatal(zapcore.WriteThenPanic))))
68
69 if c.level != zap.FatalLevel {
70 c.fn(args...)
71 } else {
72 assert.Panics(t, func() {
73 c.fn(args...)
74 })
75 }
76 assert.True(t, called, "hook not called")
77 })
78 }
79 }
80
View as plain text