Something went wrong. Try again.
Cloudflare Tunnel client with NetBSD support
Something went wrong. Try again.
2.6 kB · 132 lines
Go
at master
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133package logger
import ( "io" "testing"
"github.com/pkg/errors" "github.com/rs/zerolog" "github.com/stretchr/testify/assert")
type mockedWriter struct { wantErr bool writeCalls int}
func (c *mockedWriter) Write(p []byte) (int, error) { c.writeCalls++
if c.wantErr { return -1, errors.New("Expected error") }
return len(p), nil}
// Tests that a new writer is only used if it actually works.func TestResilientMultiWriter_Errors(t *testing.T) { tests := []struct { name string writers []*mockedWriter }{ { name: "All valid writers", writers: []*mockedWriter{ { wantErr: false, }, { wantErr: false, }, }, }, { name: "All invalid writers", writers: []*mockedWriter{ { wantErr: true, }, { wantErr: true, }, }, }, { name: "First invalid writer", writers: []*mockedWriter{ { wantErr: true, }, { wantErr: false, }, }, }, { name: "First valid writer", writers: []*mockedWriter{ { wantErr: false, }, { wantErr: true, }, }, }, }
for _, test := range tests { t.Run(test.name, func(t *testing.T) { writers := []io.Writer{} for _, w := range test.writers { writers = append(writers, w) } multiWriter := resilientMultiWriter{zerolog.InfoLevel, writers, nil}
logger := zerolog.New(multiWriter).With().Timestamp().Logger() logger.Info().Msg("Test msg")
for _, w := range test.writers { // Expect each writer to be written to regardless of the previous writers returning an error assert.Equal(t, 1, w.writeCalls) } }) }}
type mockedManagementWriter struct { WriteCalls int}
func (c *mockedManagementWriter) Write(p []byte) (int, error) { return len(p), nil}
func (c *mockedManagementWriter) WriteLevel(level zerolog.Level, p []byte) (int, error) { c.WriteCalls++ return len(p), nil}
// Tests that management writer receives write calls of all levels except Disabledfunc TestResilientMultiWriter_Management(t *testing.T) { for _, level := range []zerolog.Level{ zerolog.DebugLevel, zerolog.InfoLevel, zerolog.WarnLevel, zerolog.ErrorLevel, zerolog.FatalLevel, zerolog.PanicLevel, } { t.Run(level.String(), func(t *testing.T) { managementWriter := mockedManagementWriter{} multiWriter := resilientMultiWriter{level, []io.Writer{&mockedWriter{}}, &managementWriter}
logger := zerolog.New(multiWriter).With().Timestamp().Logger() logger.Info().Msg("Test msg")
// Always write to management assert.Equal(t, 1, managementWriter.WriteCalls) }) }}