// 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" "internal/trace/raw" "io" "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 -out 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 }