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  }