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 }