| // 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) |
| } |
| } |