blob: 45bcaf2afb1957e352f1900ae03d3d75783f372b [file] [log] [blame]
Serge Bazanskif8a8e652021-07-06 16:23:43 +02001package logtree
2
3import (
4 "context"
Serge Bazanskif8a8e652021-07-06 16:23:43 +02005 "testing"
6)
7
Serge Bazanski29974f32023-04-05 12:29:09 +02008// PipeAllToTest starts a goroutine that will forward all logtree entries
9// t.Logf(), in the canonical logtree payload representation.
Serge Bazanskif8a8e652021-07-06 16:23:43 +020010//
11// It's designed to be used in tests, and will automatically stop when the
12// test/benchmark it's running in exits.
Serge Bazanski29974f32023-04-05 12:29:09 +020013func PipeAllToTest(t testing.TB, lt *LogTree) {
Serge Bazanskif8a8e652021-07-06 16:23:43 +020014 t.Helper()
15
16 reader, err := lt.Read("", WithChildren(), WithStream())
17 if err != nil {
18 t.Fatalf("Failed to set up logtree reader: %v", err)
19 }
20
21 // Internal context used to cancel the goroutine. This could also be a
22 // implemented via a channel.
23 ctx, ctxC := context.WithCancel(context.Background())
24 t.Cleanup(ctxC)
25
26 go func() {
Serge Bazanski29974f32023-04-05 12:29:09 +020027 t.Helper()
Serge Bazanskif8a8e652021-07-06 16:23:43 +020028 for {
29 select {
30 case <-ctx.Done():
31 return
32 case p := <-reader.Stream:
Serge Bazanski29974f32023-04-05 12:29:09 +020033 t.Logf("%s", p.String())
Serge Bazanskif8a8e652021-07-06 16:23:43 +020034 }
35 }
36 }()
37}