aboutsummaryrefslogtreecommitdiff
path: root/src/internal/trace/reader_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/internal/trace/reader_test.go')
-rw-r--r--src/internal/trace/reader_test.go74
1 files changed, 74 insertions, 0 deletions
diff --git a/src/internal/trace/reader_test.go b/src/internal/trace/reader_test.go
index b395183e0e..222d2dfa82 100644
--- a/src/internal/trace/reader_test.go
+++ b/src/internal/trace/reader_test.go
@@ -13,6 +13,7 @@ import (
"path/filepath"
"strings"
"testing"
+ "time"
"internal/trace"
"internal/trace/raw"
@@ -171,3 +172,76 @@ func dumpTraceToFile(t *testing.T, testName string, stress bool, b []byte) strin
}
return f.Name()
}
+
+func TestTraceGenSync(t *testing.T) {
+ type sync struct {
+ Time trace.Time
+ ClockSnapshot *trace.ClockSnapshot
+ }
+ runTest := func(testName string, wantSyncs []sync) {
+ t.Run(testName, func(t *testing.T) {
+ testPath := "testdata/tests/" + testName
+ r, _, _, err := testtrace.ParseFile(testPath)
+ if err != nil {
+ t.Fatalf("malformed test %s: bad trace file: %v", testPath, err)
+ }
+ tr, err := trace.NewReader(r)
+ if err != nil {
+ t.Fatalf("malformed test %s: bad trace file: %v", testPath, err)
+ }
+ var syncEvents []trace.Event
+ for {
+ ev, err := tr.ReadEvent()
+ if err == io.EOF {
+ break
+ }
+ if err != nil {
+ t.Fatalf("malformed test %s: bad trace file: %v", testPath, err)
+ }
+ if ev.Kind() == trace.EventSync {
+ syncEvents = append(syncEvents, ev)
+ }
+ }
+
+ if got, want := len(syncEvents), len(wantSyncs); got != want {
+ t.Errorf("got %d sync events, want %d", got, want)
+ }
+
+ for i, want := range wantSyncs {
+ got := syncEvents[i]
+ gotSync := syncEvents[i].Sync()
+ if got.Time() != want.Time {
+ t.Errorf("sync=%d got time %d, want %d", i+1, got.Time(), want.Time)
+ }
+ if gotSync.ClockSnapshot == nil && want.ClockSnapshot == nil {
+ continue
+ }
+ if gotSync.ClockSnapshot.Trace != want.ClockSnapshot.Trace {
+ t.Errorf("sync=%d got trace time %d, want %d", i+1, gotSync.ClockSnapshot.Trace, want.ClockSnapshot.Trace)
+ }
+ if !gotSync.ClockSnapshot.Wall.Equal(want.ClockSnapshot.Wall) {
+ t.Errorf("sync=%d got wall time %s, want %s", i+1, gotSync.ClockSnapshot.Wall, want.ClockSnapshot.Wall)
+ }
+ if gotSync.ClockSnapshot.Mono != want.ClockSnapshot.Mono {
+ t.Errorf("sync=%d got mono time %d, want %d", i+1, gotSync.ClockSnapshot.Mono, want.ClockSnapshot.Mono)
+ }
+ }
+ })
+ }
+
+ runTest("go123-sync.test", []sync{
+ {10, nil},
+ {40, nil},
+ // The EvFrequency batch for generation 3 is emitted at trace.Time(80),
+ // but 60 is the minTs of the generation, see b30 in the go generator.
+ {60, nil},
+ {63, nil},
+ })
+
+ runTest("go125-sync.test", []sync{
+ {9, &trace.ClockSnapshot{Trace: 10, Mono: 99, Wall: time.Date(2025, 2, 28, 15, 4, 9, 123, time.UTC)}},
+ {38, &trace.ClockSnapshot{Trace: 40, Mono: 199, Wall: time.Date(2025, 2, 28, 15, 4, 10, 123, time.UTC)}},
+ {58, &trace.ClockSnapshot{Trace: 60, Mono: 299, Wall: time.Date(2025, 2, 28, 15, 4, 11, 123, time.UTC)}},
+ {83, nil},
+ })
+}