]> Cypherpunks.ru repositories - gostls13.git/commitdiff
log/slog: fix time regexp in test
authorKir Kolyshkin <kolyshkin@gmail.com>
Fri, 22 Sep 2023 20:42:50 +0000 (13:42 -0700)
committerGopher Robot <gobot@golang.org>
Wed, 27 Sep 2023 01:15:17 +0000 (01:15 +0000)
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 <kolyshkin@gmail.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Auto-Submit: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Than McIntosh <thanm@google.com>
Reviewed-by: Andy Pan <panjf2000@gmail.com>
Reviewed-by: Jonathan Amsterdam <jba@google.com>
src/log/slog/logger_test.go

index 26e6f68f49c05e8a5694ee2b50ffb874ef0f9604..88aa38ee0c973ba8c1aafdeecba5c60daf9c7d69 100644 (file)
@@ -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)