// Copyright 2014 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 ( "bytes" "flag" "os" . "runtime/trace" "testing" "time" ) var saveTraces = flag.Bool("savetraces", false, "save traces collected by tests") func TestTraceStartStop(t *testing.T) { if IsEnabled() { t.Skip("skipping because -test.trace is set") } buf := new(bytes.Buffer) if err := Start(buf); err != nil { t.Fatalf("failed to start tracing: %v", err) } Stop() size := buf.Len() if size == 0 { t.Fatalf("trace is empty") } time.Sleep(100 * time.Millisecond) if size != buf.Len() { t.Fatalf("trace writes after stop: %v -> %v", size, buf.Len()) } saveTrace(t, buf, "TestTraceStartStop") } func TestTraceDoubleStart(t *testing.T) { if IsEnabled() { t.Skip("skipping because -test.trace is set") } Stop() buf := new(bytes.Buffer) if err := Start(buf); err != nil { t.Fatalf("failed to start tracing: %v", err) } if err := Start(buf); err == nil { t.Fatalf("succeed to start tracing second time") } Stop() Stop() } func saveTrace(t *testing.T, buf *bytes.Buffer, name string) { if !*saveTraces { return } if err := os.WriteFile(name+".trace", buf.Bytes(), 0600); err != nil { t.Errorf("failed to write trace file: %s", err) } }