github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/apiserver/logsink_internal_test.go (about)

     1  // Copyright 2021 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package apiserver
     5  
     6  import (
     7  	"bytes"
     8  	"time"
     9  
    10  	"github.com/juju/errors"
    11  	gc "gopkg.in/check.v1"
    12  
    13  	corelogger "github.com/juju/juju/core/logger"
    14  	"github.com/juju/juju/rpc/params"
    15  )
    16  
    17  type loggingStrategySuite struct{}
    18  
    19  var _ = gc.Suite(&loggingStrategySuite{})
    20  
    21  func (s *loggingStrategySuite) TestLoggingOfDBInsertFailures(c *gc.C) {
    22  	var logBuf bytes.Buffer
    23  	strategy := &agentLoggingStrategy{
    24  		recordLogger: failingRecordLogger{},
    25  		fileLogger:   &logBuf,
    26  	}
    27  
    28  	err := strategy.WriteLog(params.LogRecord{
    29  		Time:    time.Now(),
    30  		Level:   "WARN",
    31  		Message: "running low on resources",
    32  	})
    33  
    34  	// The captured DB error should be surfaced from WriteLog
    35  	c.Assert(err, gc.ErrorMatches, ".*spawn more overlords")
    36  
    37  	// Ensure that the DB error was also written to the sink
    38  	c.Assert(logBuf.String(), gc.Matches, "(?m).*spawn more overlords.*")
    39  }
    40  
    41  type failingRecordLogger struct{}
    42  
    43  func (failingRecordLogger) Log([]corelogger.LogRecord) error {
    44  	return errors.New("spawn more overlords")
    45  }