| package logtree |
| |
| import ( |
| "context" |
| "fmt" |
| "os" |
| "testing" |
| ) |
| |
| // PipeAllToStderr starts a goroutine that will forward all logtree entries |
| // into stderr, in the canonical logtree payload representation. |
| // |
| // It's designed to be used in tests, and will automatically stop when the |
| // test/benchmark it's running in exits. |
| func PipeAllToStderr(t testing.TB, lt *LogTree) { |
| t.Helper() |
| |
| reader, err := lt.Read("", WithChildren(), WithStream()) |
| if err != nil { |
| t.Fatalf("Failed to set up logtree reader: %v", err) |
| } |
| |
| // Internal context used to cancel the goroutine. This could also be a |
| // implemented via a channel. |
| ctx, ctxC := context.WithCancel(context.Background()) |
| t.Cleanup(ctxC) |
| |
| go func() { |
| for { |
| select { |
| case <-ctx.Done(): |
| return |
| case p := <-reader.Stream: |
| fmt.Fprintf(os.Stderr, "%s\n", p.String()) |
| } |
| } |
| }() |
| } |