From 0de57ebf88b4386810bd4ad42d9ff9c16f15d970 Mon Sep 17 00:00:00 2001 From: Kir Kolyshkin Date: Fri, 22 Sep 2023 13:42:50 -0700 Subject: [PATCH] log/slog: fix time regexp in test CL 525556 started using timeRE regexp to match time output from JSON handler, and relaxed it to allow arbitrary (rather than fixed 3 digit) precision. What it missed is in JSON handler the fractional part is omitted entirely (together with the decimal dot) when the nanoseconds field is 0. As a result, there are occasional CI failures in js/wasm (which, I guess, has better chances to return zero nanoseconds). To fix the flaky test, let's use two different regular expressions, tailored to text and JSON. Change-Id: Ie98990fcf278bb0916ab31c9177e6b22a523062a Reviewed-on: https://go-review.googlesource.com/c/go/+/530675 Run-TryBot: Kirill Kolyshkin LUCI-TryBot-Result: Go LUCI TryBot-Result: Gopher Robot Auto-Submit: Ian Lance Taylor Reviewed-by: Than McIntosh Reviewed-by: Andy Pan Reviewed-by: Jonathan Amsterdam --- src/log/slog/logger_test.go | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/src/log/slog/logger_test.go b/src/log/slog/logger_test.go index 26e6f68f49..88aa38ee0c 100644 --- a/src/log/slog/logger_test.go +++ b/src/log/slog/logger_test.go @@ -22,7 +22,13 @@ import ( "time" ) -const timeRE = `\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{1,9}(Z|[+-]\d{2}:\d{2})` +// textTimeRE is a regexp to match log timestamps for Text handler. +// This is RFC3339Nano with the fixed 3 digit sub-second precision. +const textTimeRE = `\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}(Z|[+-]\d{2}:\d{2})` + +// jsonTimeRE is a regexp to match log timestamps for Text handler. +// This is RFC3339Nano with an arbitrary sub-second precision. +const jsonTimeRE = `\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?(Z|[+-]\d{2}:\d{2})` func TestLogTextHandler(t *testing.T) { ctx := context.Background() @@ -33,7 +39,7 @@ func TestLogTextHandler(t *testing.T) { check := func(want string) { t.Helper() if want != "" { - want = "time=" + timeRE + " " + want + want = "time=" + textTimeRE + " " + want } checkLogOutput(t, buf.String(), want) buf.Reset() @@ -118,7 +124,7 @@ func TestConnections(t *testing.T) { // log.Logger's output goes through the handler. SetDefault(New(NewTextHandler(&slogbuf, &HandlerOptions{AddSource: true}))) log.Print("msg2") - checkLogOutput(t, slogbuf.String(), "time="+timeRE+` level=INFO source=.*logger_test.go:\d{3}"? msg=msg2`) + checkLogOutput(t, slogbuf.String(), "time="+textTimeRE+` level=INFO source=.*logger_test.go:\d{3}"? msg=msg2`) // The default log.Logger always outputs at Info level. slogbuf.Reset() @@ -381,7 +387,7 @@ func TestNewLogLogger(t *testing.T) { h := NewTextHandler(&buf, nil) ll := NewLogLogger(h, LevelWarn) ll.Print("hello") - checkLogOutput(t, buf.String(), "time="+timeRE+` level=WARN msg=hello`) + checkLogOutput(t, buf.String(), "time="+textTimeRE+` level=WARN msg=hello`) } func TestLoggerNoOps(t *testing.T) { @@ -633,10 +639,10 @@ func TestPanics(t *testing.T) { in any out string }{ - {(*panicTextAndJsonMarshaler)(nil), `{"time":"` + timeRE + `","level":"INFO","msg":"msg","p":null}`}, - {panicTextAndJsonMarshaler{io.ErrUnexpectedEOF}, `{"time":"` + timeRE + `","level":"INFO","msg":"msg","p":"!PANIC: unexpected EOF"}`}, - {panicTextAndJsonMarshaler{"panicking"}, `{"time":"` + timeRE + `","level":"INFO","msg":"msg","p":"!PANIC: panicking"}`}, - {panicTextAndJsonMarshaler{42}, `{"time":"` + timeRE + `","level":"INFO","msg":"msg","p":"!PANIC: 42"}`}, + {(*panicTextAndJsonMarshaler)(nil), `{"time":"` + jsonTimeRE + `","level":"INFO","msg":"msg","p":null}`}, + {panicTextAndJsonMarshaler{io.ErrUnexpectedEOF}, `{"time":"` + jsonTimeRE + `","level":"INFO","msg":"msg","p":"!PANIC: unexpected EOF"}`}, + {panicTextAndJsonMarshaler{"panicking"}, `{"time":"` + jsonTimeRE + `","level":"INFO","msg":"msg","p":"!PANIC: panicking"}`}, + {panicTextAndJsonMarshaler{42}, `{"time":"` + jsonTimeRE + `","level":"INFO","msg":"msg","p":"!PANIC: 42"}`}, } { Info("msg", "p", pt.in) checkLogOutput(t, logBuf.String(), pt.out) -- 2.50.0