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