1 // Copyright 2023 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
18 "internal/trace/v2/raw"
19 "internal/trace/v2/testtrace"
20 "internal/trace/v2/version"
24 logEvents = flag.Bool("log-events", false, "whether to log high-level events; significantly slows down tests")
25 dumpTraces = flag.Bool("dump-traces", false, "dump traces even on success")
28 func TestReaderGolden(t *testing.T) {
29 matches, err := filepath.Glob("./testdata/tests/*.test")
31 t.Fatalf("failed to glob for tests: %v", err)
33 for _, testPath := range matches {
35 testName, err := filepath.Rel("./testdata", testPath)
37 t.Fatalf("failed to relativize testdata path: %v", err)
39 t.Run(testName, func(t *testing.T) {
40 tr, exp, err := testtrace.ParseFile(testPath)
42 t.Fatalf("failed to parse test file at %s: %v", testPath, err)
44 testReader(t, tr, exp)
49 func testReader(t *testing.T, tr io.Reader, exp *testtrace.Expectation) {
50 r, err := trace.NewReader(tr)
52 if err := exp.Check(err); err != nil {
57 v := testtrace.NewValidator()
59 ev, err := r.ReadEvent()
64 if err := exp.Check(err); err != nil {
72 if err := v.Event(ev); err != nil {
76 if err := exp.Check(nil); err != nil {
81 func dumpTraceToText(t *testing.T, b []byte) string {
84 br, err := raw.NewReader(bytes.NewReader(b))
86 t.Fatalf("dumping trace: %v", err)
88 var sb strings.Builder
89 tw, err := raw.NewTextWriter(&sb, version.Go122)
91 t.Fatalf("dumping trace: %v", err)
94 ev, err := br.ReadEvent()
99 t.Fatalf("dumping trace: %v", err)
101 if err := tw.WriteEvent(ev); err != nil {
102 t.Fatalf("dumping trace: %v", err)
108 func dumpTraceToFile(t *testing.T, testName string, stress bool, b []byte) string {
115 name := fmt.Sprintf("%s.%s.trace.", testName, desc)
116 f, err := os.CreateTemp("", name)
118 t.Fatalf("creating temp file: %v", err)
121 if _, err := io.Copy(f, bytes.NewReader(b)); err != nil {
122 t.Fatalf("writing trace dump to %q: %v", f.Name(), err)