logfrog-go/logger_test.go

72 lines
1.4 KiB
Go

package logfrog
import (
"bufio"
"io"
"testing"
"github.com/stretchr/testify/assert"
)
type TestHandler struct {
*BaseLogHandler
writer io.Writer
}
func newTestHandler(w io.Writer) *TestHandler {
b := NewBaseLogHandler()
s := &TestHandler{b, w}
b.LogHandler = s
return s
}
func (s *TestHandler) Write(value []byte) error {
_, err := s.writer.Write(value)
return err
}
func TestLogger(t *testing.T) {
t.Run("handler-processor-is-isolated", func(t *testing.T) {
testProcessor := func (r *LogRecord) *LogRecord {
r.Message = "<redacted>"
return r
}
pr1, pw1 := io.Pipe()
pr2, pw2 := io.Pipe()
defer pr1.Close()
defer pr2.Close()
bw1 := bufio.NewWriter(pw1)
bw2 := bufio.NewWriter(pw2)
handler1 := newTestHandler(bw1)
handler1.AddProcessorFn(testProcessor)
handler2 := newTestHandler(bw2)
logger := NewLogger("test", DEBUG)
logger.AddHandler(handler1)
logger.AddHandler(handler2)
go func() {
logger.Info("Hello world!")
bw1.Flush()
pw1.Close()
bw2.Flush()
pw2.Close()
}()
buf, err := io.ReadAll(pr1)
assert.NoError(t, err)
assert.Equal(t, "<redacted>", string(buf))
buf, err = io.ReadAll(pr2)
assert.NoError(t, err)
assert.Equal(t, "Hello world!", string(buf))
})
}