github.com/release-engineering/exodus-rsync@v1.11.2/internal/cmd/log_helpers_test.go (about) 1 package cmd 2 3 import ( 4 "testing" 5 6 "github.com/apex/log/handlers/memory" 7 "github.com/apex/log/handlers/multi" 8 "github.com/release-engineering/exodus-rsync/internal/args" 9 "github.com/release-engineering/exodus-rsync/internal/log" 10 11 apexLog "github.com/apex/log" 12 ) 13 14 // Implementation of log.Interface which will return a logger with 15 // a memory Handler installed. 16 type memoryLoggerInterface struct { 17 handler memory.Handler 18 delegate func(args.Config) *log.Logger 19 } 20 21 func (m *memoryLoggerInterface) NewLogger(args args.Config) *log.Logger { 22 logger := m.delegate(args) 23 24 // We expect logger to have some real handler installed. 25 // We'll let it keep that handler, but also install our memory handler. 26 logger.Handler = multi.New( 27 &m.handler, 28 logger.Handler, 29 ) 30 31 return logger 32 } 33 34 func CaptureLogger(t *testing.T) *memory.Handler { 35 oldLog := ext.log 36 t.Cleanup(func() { ext.log = oldLog }) 37 38 memoryLogger := memoryLoggerInterface{ 39 delegate: oldLog.NewLogger, 40 } 41 42 ext.log = &memoryLogger 43 44 return &memoryLogger.handler 45 } 46 47 func FindEntry(m *memory.Handler, msg string) *apexLog.Entry { 48 found := make([]*apexLog.Entry, 0) 49 50 for _, entry := range m.Entries { 51 if entry.Message == msg { 52 found = append(found, entry) 53 } 54 } 55 56 if len(found) == 1 { 57 return found[0] 58 } 59 60 return nil 61 }