1
2
3
4
5 package trace_test
6
7 import (
8 "internal/trace"
9 "internal/trace/testtrace"
10 "internal/trace/version"
11 "io"
12 "os"
13 "path/filepath"
14 "testing"
15 )
16
17 func TestTraceV1(t *testing.T) {
18 traces, err := filepath.Glob("./internal/tracev1/testdata/*_good")
19 if err != nil {
20 t.Fatalf("failed to glob for tests: %s", err)
21 }
22 var testedUserRegions bool
23 for _, p := range traces {
24 p := p
25 testName, err := filepath.Rel("./internal/tracev1/testdata", p)
26 if err != nil {
27 t.Fatalf("failed to relativize testdata path: %s", err)
28 }
29 t.Run(testName, func(t *testing.T) {
30 f, err := os.Open(p)
31 if err != nil {
32 t.Fatalf("failed to open test %q: %s", p, err)
33 }
34 defer f.Close()
35
36 tr, err := trace.NewReader(f)
37 if err != nil {
38 t.Fatalf("failed to create reader: %s", err)
39 }
40
41 v := testtrace.NewValidator()
42 v.GoVersion = version.Go121
43 for {
44 ev, err := tr.ReadEvent()
45 if err != nil {
46 if err == io.EOF {
47 break
48 }
49 t.Fatalf("couldn't read converted event: %s", err)
50 }
51 if err := v.Event(ev); err != nil {
52 t.Fatalf("converted event did not validate; event: \n%s\nerror: %s", ev, err)
53 }
54
55 if testName == "user_task_region_1_21_good" {
56 testedUserRegions = true
57 validRegions := map[string]struct{}{
58 "post-existing region": {},
59 "region0": {},
60 "region1": {},
61 }
62
63
64
65
66
67
68 switch ev.Kind() {
69 case trace.EventRegionBegin, trace.EventRegionEnd:
70 if _, ok := validRegions[ev.Region().Type]; !ok {
71 t.Fatalf("converted event has unexpected region type:\n%s", ev)
72 }
73 case trace.EventTaskBegin, trace.EventTaskEnd:
74 if ev.Task().Type != "task0" {
75 t.Fatalf("converted event has unexpected task type name:\n%s", ev)
76 }
77 case trace.EventLog:
78 l := ev.Log()
79 if l.Task != 1 || l.Category != "key0" || l.Message != "0123456789abcdef" {
80 t.Fatalf("converted event has unexpected user log:\n%s", ev)
81 }
82 }
83 }
84 }
85 })
86 }
87 if !testedUserRegions {
88 t.Fatal("didn't see expected test case user_task_region_1_21_good")
89 }
90 }
91
View as plain text