Pulse/internal/monitoring/log_capture_test.go

50 lines
837 B
Go

package monitoring
import (
"strings"
"sync"
"testing"
"github.com/rcourtman/pulse-go-rewrite/internal/logging"
)
type monitoringLogCapture struct {
id string
lines chan string
mu sync.Mutex
buf strings.Builder
}
func newMonitoringLogCapture(t *testing.T) *monitoringLogCapture {
t.Helper()
id, lines, _ := logging.GetBroadcaster().Subscribe()
capture := &monitoringLogCapture{
id: id,
lines: lines,
}
t.Cleanup(func() {
logging.GetBroadcaster().Unsubscribe(id)
})
return capture
}
func (c *monitoringLogCapture) String() string {
c.mu.Lock()
defer c.mu.Unlock()
for {
select {
case line, ok := <-c.lines:
if !ok {
return c.buf.String()
}
c.buf.WriteString(line)
if !strings.HasSuffix(line, "\n") {
c.buf.WriteByte('\n')
}
default:
return c.buf.String()
}
}
}