mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
internal/trace: add "command" to convert text traces to raw
This is primarily helpful for parsing traces dumped via CI. cmd/dist doesn't like commands in std which are not actually part of the Go distribution. So rather than using a real command, this is actually a test which does the conversion. Change-Id: I6a6a636c829a4acc0bce8cf7548105ad59d83c67 Reviewed-on: https://go-review.googlesource.com/c/go/+/716882 Reviewed-by: Michael Knyszek <mknyszek@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
This commit is contained in:
parent
052c192a4c
commit
bf58e7845e
2 changed files with 80 additions and 0 deletions
|
|
@ -37,6 +37,7 @@ func Dump(t *testing.T, testName string, traceBytes []byte, forceToFile bool) {
|
||||||
t.Logf("text trace too large to dump (%d bytes)", len(s))
|
t.Logf("text trace too large to dump (%d bytes)", len(s))
|
||||||
} else {
|
} else {
|
||||||
t.Log(s)
|
t.Log(s)
|
||||||
|
t.Log("Convert this to a raw trace with `go test internal/trace/testtrace -covert in.tracetxt -out out.trace`")
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// We asked to dump the trace or failed. Write the trace to a file.
|
// We asked to dump the trace or failed. Write the trace to a file.
|
||||||
|
|
|
||||||
79
src/internal/trace/testtrace/helpers_test.go
Normal file
79
src/internal/trace/testtrace/helpers_test.go
Normal file
|
|
@ -0,0 +1,79 @@
|
||||||
|
// Copyright 2025 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 testtrace
|
||||||
|
|
||||||
|
import (
|
||||||
|
"flag"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"internal/trace/raw"
|
||||||
|
"os"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
convert = flag.String("convert", "", "Path to trace text file to convert to binary format")
|
||||||
|
output = flag.String("out", "", "Output path for converted trace")
|
||||||
|
)
|
||||||
|
|
||||||
|
// TestConvertDump is not actually a test, it is a tool for converting trace
|
||||||
|
// text dumps generated by Dump into the binary trace format. Set -convert and
|
||||||
|
// -o to perform a converison.
|
||||||
|
//
|
||||||
|
// go test internal/trace/testtrace -convert in.tracetxt -out out.trace
|
||||||
|
//
|
||||||
|
// This would be cleaner as a dedicated internal command rather than a test,
|
||||||
|
// but cmd/dist does not handle internal (non-distributed) commands in std
|
||||||
|
// well.
|
||||||
|
func TestConvertDump(t *testing.T) {
|
||||||
|
if *convert == "" {
|
||||||
|
t.Skip("Set -convert to convert a trace text file")
|
||||||
|
}
|
||||||
|
if *output == "" {
|
||||||
|
t.Fatal("Set -o to specify conversion output")
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := convertDump(*convert, *output); err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func convertDump(inPath, outPath string) error {
|
||||||
|
in, err := os.Open(inPath)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("error opening input: %v", err)
|
||||||
|
}
|
||||||
|
defer in.Close()
|
||||||
|
|
||||||
|
out, err := os.Create(outPath)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("error creating output: %v", err)
|
||||||
|
}
|
||||||
|
defer out.Close()
|
||||||
|
|
||||||
|
tr, err := raw.NewTextReader(in)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("error creating text reader: %v", err)
|
||||||
|
}
|
||||||
|
tw, err := raw.NewWriter(out, tr.Version())
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("error creating raw writer: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
for {
|
||||||
|
ev, err := tr.ReadEvent()
|
||||||
|
if err == io.EOF {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("bad trace file: %v", err)
|
||||||
|
}
|
||||||
|
if err := tw.WriteEvent(ev); err != nil {
|
||||||
|
return fmt.Errorf("failed to write trace bytes: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue