...

Source file src/github.com/grpc-ecosystem/go-grpc-middleware/logging/zap/grpclogger_test.go

Documentation: github.com/grpc-ecosystem/go-grpc-middleware/logging/zap

     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  		// The default verbosity level.
    19  		// See https://github.com/grpc/grpc-go/blob/8ab16ef276a33df4cdb106446eeff40ff56a6928/grpclog/loggerv2.go#L108.
    20  		normal = 0
    21  
    22  		// Currently the only level of "being verbose".
    23  		// For example https://github.com/grpc/grpc-go/blob/8ab16ef276a33df4cdb106446eeff40ff56a6928/grpclog/grpclog.go#L21.
    24  		verbose = 2
    25  
    26  		// As is mentioned in https://github.com/grpc/grpc-go/blob/8ab16ef276a33df4cdb106446eeff40ff56a6928/README.md#how-to-turn-on-logging,
    27  		// though currently not being used in the code.
    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