package logging import ( "bytes" "fmt" "testing" "github.com/hashicorp/go-hclog" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "google.golang.org/grpc/grpclog" ) func TestGRPCLogger(t *testing.T) { var out bytes.Buffer // Use a placeholder value for TimeFormat so we don't care about dates/times logger := hclog.New(&hclog.LoggerOptions{ Level: hclog.Trace, Output: &out, TimeFormat: "timeformat", }) grpclog.SetLoggerV2(NewGRPCLogger(&Config{LogLevel: "TRACE"}, logger)) // All of these should output something grpclog.Info("Info,") grpclog.Infoln("Infoln") grpclog.Infof("Infof: %d", 1) grpclog.Warning("Warning,") grpclog.Warningln("Warningln") grpclog.Warningf("Warningf: %d", 1) grpclog.Error("Error,") grpclog.Errorln("Errorln") grpclog.Errorf("Errorf: %d", 1) // Fatal tests are hard... assume they are good! expect := `timeformat [INFO] Info, timeformat [INFO] Infoln timeformat [INFO] Infof: 1 timeformat [WARN] Warning, timeformat [WARN] Warningln timeformat [WARN] Warningf: 1 timeformat [ERROR] Error, timeformat [ERROR] Errorln timeformat [ERROR] Errorf: 1 ` require.Equal(t, expect, out.String()) } func TestGRPCLogger_V(t *testing.T) { tests := []struct { level string v int want bool }{ {"ERR", -1, false}, {"ERR", 0, false}, {"ERR", 1, false}, {"ERR", 2, false}, {"ERR", 3, false}, {"WARN", -1, false}, {"WARN", 0, false}, {"WARN", 1, false}, {"WARN", 2, false}, {"WARN", 3, false}, {"INFO", -1, true}, {"INFO", 0, true}, {"INFO", 1, false}, {"INFO", 2, false}, {"INFO", 3, false}, {"DEBUG", -1, true}, {"DEBUG", 0, true}, {"DEBUG", 1, true}, {"DEBUG", 2, false}, {"DEBUG", 3, false}, {"TRACE", -1, true}, {"TRACE", 0, true}, {"TRACE", 1, true}, {"TRACE", 2, true}, {"TRACE", 3, true}, } for _, tt := range tests { t.Run(fmt.Sprintf("%s,%d", tt.level, tt.v), func(t *testing.T) { var out bytes.Buffer logger := hclog.New(&hclog.LoggerOptions{ Name: t.Name(), Level: hclog.Trace, Output: &out, }) grpclog.SetLoggerV2(NewGRPCLogger(&Config{LogLevel: tt.level}, logger)) assert.Equal(t, tt.want, grpclog.V(tt.v)) }) } }