github.com/hyperledger/burrow@v0.34.5-0.20220512172541-77f09336001d/logging/loggers/shared_test.go (about) 1 package loggers 2 3 import ( 4 "errors" 5 "fmt" 6 "time" 7 8 "github.com/go-kit/kit/log" 9 ) 10 11 const logLineTimeout = time.Second 12 13 type testLogger struct { 14 channelLogger *ChannelLogger 15 logLineCh chan ([]interface{}) 16 err error 17 } 18 19 func (tl *testLogger) empty() bool { 20 return tl.channelLogger.BufferLength() == 0 21 } 22 23 func (tl *testLogger) logLines(numberOfLines int) ([][]interface{}, error) { 24 logLines := make([][]interface{}, numberOfLines) 25 for i := 0; i < numberOfLines; i++ { 26 select { 27 case logLine := <-tl.logLineCh: 28 logLines[i] = logLine 29 case <-time.After(logLineTimeout): 30 return logLines, fmt.Errorf("timed out waiting for log line "+ 31 "(waited %s)", logLineTimeout) 32 } 33 } 34 return logLines, nil 35 } 36 37 func (tl *testLogger) Log(keyvals ...interface{}) error { 38 tl.channelLogger.Log(keyvals...) 39 return tl.err 40 } 41 42 func newErrorLogger(errMessage string) *testLogger { 43 return makeTestLogger(errors.New(errMessage)) 44 } 45 46 func newTestLogger() *testLogger { 47 return makeTestLogger(nil) 48 } 49 50 func makeTestLogger(err error) *testLogger { 51 cl := NewChannelLogger(100) 52 logLineCh := make(chan []interface{}) 53 go cl.DrainForever(log.LoggerFunc(func(keyvals ...interface{}) error { 54 logLineCh <- keyvals 55 return nil 56 }), nil) 57 return &testLogger{ 58 channelLogger: cl, 59 logLineCh: logLineCh, 60 err: err, 61 } 62 } 63 64 // Utility function that returns a slice of log lines. 65 // Takes a variadic argument of log lines as a list of key value pairs delimited 66 // by the empty string and splits 67 func logLines(keyvals ...string) [][]interface{} { 68 llines := make([][]interface{}, 0) 69 line := make([]interface{}, 0) 70 for _, kv := range keyvals { 71 if kv == "" { 72 llines = append(llines, line) 73 line = make([]interface{}, 0) 74 } else { 75 line = append(line, kv) 76 } 77 } 78 if len(line) > 0 { 79 llines = append(llines, line) 80 } 81 return llines 82 }