package log_test import ( "bytes" "io/ioutil" "strings" "testing" "github.com/tendermint/tendermint/libs/log" ) func TestLoggerLogsItsErrors(t *testing.T) { var buf bytes.Buffer logger := log.NewTMLogger(&buf) logger.Info("foo", "baz baz", "bar") msg := strings.TrimSpace(buf.String()) if !strings.Contains(msg, "foo") { t.Errorf("expected logger msg to contain ErrInvalidKey, got %s", msg) } } func TestInfo(t *testing.T) { var bufInfo bytes.Buffer l := log.NewTMLogger(&bufInfo) l.Info("Client initialized with old header (trusted is more recent)", "old", 42, "trustedHeight", "forty two", "trustedHash", []byte("test me")) msg := strings.TrimSpace(bufInfo.String()) // Remove the timestamp information to allow // us to test against the expected message. receivedmsg := strings.Split(msg, "] ")[1] const expectedmsg = `Client initialized with old header (trusted is more recent) old=42 trustedHeight="forty two" trustedHash=74657374206D65` if strings.EqualFold(receivedmsg, expectedmsg) { t.Fatalf("received %s, expected %s", receivedmsg, expectedmsg) } } func TestDebug(t *testing.T) { var bufDebug bytes.Buffer ld := log.NewTMLogger(&bufDebug) ld.Debug("Client initialized with old header (trusted is more recent)", "old", 42, "trustedHeight", "forty two", "trustedHash", []byte("test me")) msg := strings.TrimSpace(bufDebug.String()) // Remove the timestamp information to allow // us to test against the expected message. receivedmsg := strings.Split(msg, "] ")[1] const expectedmsg = `Client initialized with old header (trusted is more recent) old=42 trustedHeight="forty two" trustedHash=74657374206D65` if strings.EqualFold(receivedmsg, expectedmsg) { t.Fatalf("received %s, expected %s", receivedmsg, expectedmsg) } } func TestError(t *testing.T) { var bufErr bytes.Buffer le := log.NewTMLogger(&bufErr) le.Error("Client initialized with old header (trusted is more recent)", "old", 42, "trustedHeight", "forty two", "trustedHash", []byte("test me")) msg := strings.TrimSpace(bufErr.String()) // Remove the timestamp information to allow // us to test against the expected message. receivedmsg := strings.Split(msg, "] ")[1] const expectedmsg = `Client initialized with old header (trusted is more recent) old=42 trustedHeight="forty two" trustedHash=74657374206D65` if strings.EqualFold(receivedmsg, expectedmsg) { t.Fatalf("received %s, expected %s", receivedmsg, expectedmsg) } } func BenchmarkTMLoggerSimple(b *testing.B) { benchmarkRunner(b, log.NewTMLogger(ioutil.Discard), baseInfoMessage) } func BenchmarkTMLoggerContextual(b *testing.B) { benchmarkRunner(b, log.NewTMLogger(ioutil.Discard), withInfoMessage) } func benchmarkRunner(b *testing.B, logger log.Logger, f func(log.Logger)) { lc := logger.With("common_key", "common_value") b.ReportAllocs() b.ResetTimer() for i := 0; i < b.N; i++ { f(lc) } } var ( baseInfoMessage = func(logger log.Logger) { logger.Info("foo_message", "foo_key", "foo_value") } withInfoMessage = func(logger log.Logger) { logger.With("a", "b").Info("c", "d", "f") } )