golang/src/internal/trace/oldtrace_test.go

90 lines
2.5 KiB
Go

// Copyright 2024 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package trace_test
import (
"internal/trace"
"internal/trace/testtrace"
"io"
"os"
"path/filepath"
"testing"
)
func TestOldtrace(t *testing.T) {
traces, err := filepath.Glob("./internal/oldtrace/testdata/*_good")
if err != nil {
t.Fatalf("failed to glob for tests: %s", err)
}
var testedUserRegions bool
for _, p := range traces {
p := p
testName, err := filepath.Rel("./internal/oldtrace/testdata", p)
if err != nil {
t.Fatalf("failed to relativize testdata path: %s", err)
}
t.Run(testName, func(t *testing.T) {
f, err := os.Open(p)
if err != nil {
t.Fatalf("failed to open test %q: %s", p, err)
}
defer f.Close()
tr, err := trace.NewReader(f)
if err != nil {
t.Fatalf("failed to create reader: %s", err)
}
v := testtrace.NewValidator()
v.Go121 = true
for {
ev, err := tr.ReadEvent()
if err != nil {
if err == io.EOF {
break
}
t.Fatalf("couldn't read converted event: %s", err)
}
if err := v.Event(ev); err != nil {
t.Fatalf("converted event did not validate; event: \n%s\nerror: %s", ev, err)
}
if testName == "user_task_region_1_21_good" {
testedUserRegions = true
validRegions := map[string]struct{}{
"post-existing region": struct{}{},
"region0": struct{}{},
"region1": struct{}{},
}
// Check that we correctly convert user regions. These
// strings were generated by
// runtime/trace.TestUserTaskRegion, which is the basis for
// the user_task_region_* test cases. We only check for the
// Go 1.21 traces because earlier traces used different
// strings.
switch ev.Kind() {
case trace.EventRegionBegin, trace.EventRegionEnd:
if _, ok := validRegions[ev.Region().Type]; !ok {
t.Fatalf("converted event has unexpected region type:\n%s", ev)
}
case trace.EventTaskBegin, trace.EventTaskEnd:
if ev.Task().Type != "task0" {
t.Fatalf("converted event has unexpected task type name:\n%s", ev)
}
case trace.EventLog:
l := ev.Log()
if l.Task != 1 || l.Category != "key0" || l.Message != "0123456789abcdef" {
t.Fatalf("converted event has unexpected user log:\n%s", ev)
}
}
}
}
})
}
if !testedUserRegions {
t.Fatal("didn't see expected test case user_task_region_1_21_good")
}
}