]> Cypherpunks repositories - gostls13.git/commitdiff
runtime/trace: fix broken TestSubscribers
authorMichael Anthony Knyszek <mknyszek@google.com>
Thu, 11 Dec 2025 18:02:36 +0000 (18:02 +0000)
committerMichael Knyszek <mknyszek@google.com>
Thu, 11 Dec 2025 18:37:14 +0000 (10:37 -0800)
Currently we don't break out of the loop on a failure. This is
leading to timeouts trying to parse a broken trace over and over,
forever.

But there's another issue where when we try to dump the trace, we pass
only the unread portion of the bytes.Buffer.

Change-Id: I1a338eea08eaf7f592fb7dd2a736a6fe0728c62d
Reviewed-on: https://go-review.googlesource.com/c/go/+/729320
Reviewed-by: Carlos Amedee <carlos@golang.org>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>

src/runtime/trace/subscribe_test.go

index 6378c3401a9a9f0b500201293e96677d61712301..869ab0e75b6b440d344fce9e6727746a7b1b6c9f 100644 (file)
@@ -16,15 +16,15 @@ import (
 )
 
 func TestSubscribers(t *testing.T) {
-       validate := func(t *testing.T, source string, tr *bytes.Buffer) {
+       validate := func(t *testing.T, source string, tr []byte) {
                defer func() {
                        if t.Failed() {
-                               testtrace.Dump(t, "trace", tr.Bytes(), *dumpTraces)
+                               testtrace.Dump(t, "trace", tr, *dumpTraces)
                        }
                }()
 
                // Prepare to read the trace snapshot.
-               r, err := inttrace.NewReader(tr)
+               r, err := inttrace.NewReader(bytes.NewReader(tr))
                if err != nil {
                        t.Errorf("unexpected error creating trace reader for %s: %v", source, err)
                        return
@@ -45,9 +45,11 @@ func TestSubscribers(t *testing.T) {
                        }
                        if err != nil {
                                t.Errorf("unexpected error reading trace for %s: %v", source, err)
+                               break
                        }
                        if err := v.Event(ev); err != nil {
                                t.Errorf("event validation failed: %s", err)
+                               break
                        }
                        if ev.Kind() == inttrace.EventSync {
                                syncs = append(syncs, evs)
@@ -64,8 +66,8 @@ func TestSubscribers(t *testing.T) {
        }
 
        validateTraces := func(t *testing.T, trace, frTrace *bytes.Buffer) {
-               validate(t, "tracer", trace)
-               validate(t, "flightRecorder", frTrace)
+               validate(t, "tracer", trace.Bytes())
+               validate(t, "flightRecorder", frTrace.Bytes())
        }
        startFlightRecorder := func(t *testing.T) *trace.FlightRecorder {
                fr := trace.NewFlightRecorder(trace.FlightRecorderConfig{})