diff options
| author | Michael Vogt <michael.vogt@ubuntu.com> | 2015-05-20 08:35:34 +0200 |
|---|---|---|
| committer | Michael Vogt <michael.vogt@ubuntu.com> | 2015-05-20 08:35:34 +0200 |
| commit | 0b8ac8f35ddb73fdf43b9cd52a3a269f408e2f1f (patch) | |
| tree | d0812e0d9bd40bd733d5411691f3f242f6f29fa8 /logger | |
| parent | cb285ad98cf5e7feebe37db51eed5d644fc3f131 (diff) | |
logger: add missing tests and fix crash when syslog is not available (thanks John!)
Diffstat (limited to 'logger')
| -rw-r--r-- | logger/logger.go | 11 | ||||
| -rw-r--r-- | logger/logger_test.go | 36 |
2 files changed, 41 insertions, 6 deletions
diff --git a/logger/logger.go b/logger/logger.go index 0bb0e70f34..0fce8d091d 100644 --- a/logger/logger.go +++ b/logger/logger.go @@ -20,6 +20,7 @@ package logger import ( "fmt" "io" + "io/ioutil" "log" "log/syslog" "os" @@ -112,14 +113,22 @@ func (l *ConsoleLog) Notice(msg string) { l.log.Output(3, msg) } +// variable to allow mocking the syslog.NewLogger call in the tests +var newSyslog = newSyslogImpl + +func newSyslogImpl() (*log.Logger, error) { + return syslog.NewLogger(SyslogPriority, SyslogFlags) +} + // NewConsoleLog creates a ConsoleLog with a log.Logger using the given // io.Writer and flag, and a syslog.Writer. func NewConsoleLog(w io.Writer, flag int) (*ConsoleLog, error) { clog := log.New(w, "", flag) - sys, err := syslog.NewLogger(SyslogPriority, SyslogFlags) + sys, err := newSyslog() if err != nil { clog.Output(3, "WARNING: can not create syslog logger") + sys = log.New(ioutil.Discard, "", flag) } return &ConsoleLog{ diff --git a/logger/logger_test.go b/logger/logger_test.go index 209393a49c..af311ab75e 100644 --- a/logger/logger_test.go +++ b/logger/logger_test.go @@ -19,8 +19,9 @@ package logger import ( "bytes" + "fmt" + "io/ioutil" "log" - "log/syslog" "testing" . "launchpad.net/gocheck" @@ -36,15 +37,17 @@ type LogSuite struct{} func (s *LogSuite) SetUpTest(c *C) { c.Assert(logger, Equals, NullLogger) - // sbuild environments do not allow talking to /dev/log - _, err := syslog.NewLogger(SyslogPriority, SyslogFlags) - if err != nil { - c.Skip("/dev/log can not be accessed") + // we do not want to pollute syslog in our tests (and sbuild + // will also not let us do that) + newSyslog = func() (*log.Logger, error) { + l := log.New(ioutil.Discard, "discarded-log-msg", 0) + return l, nil } } func (s *LogSuite) TearDownTest(c *C) { SetLogger(NullLogger) + newSyslog = newSyslogImpl } func (s *LogSuite) TestDefault(c *C) { @@ -109,3 +112,26 @@ func (s *LogSuite) TestPanicf(c *C) { c.Check(sysbuf.String(), Matches, `(?m).*logger_test\.go:\d+: PANIC xyzzy`) c.Check(logbuf.String(), Matches, `(?m).*logger_test\.go:\d+: PANIC xyzzy`) } + +func (s *LogSuite) TestSyslogFails(c *C) { + var logbuf bytes.Buffer + + // pretend syslog is not available (e.g. because of no /dev/log in + // a chroot or something) + newSyslog = func() (*log.Logger, error) { + return nil, fmt.Errorf("nih! nih!") + } + + // ensure a warning is displayed + l, err := NewConsoleLog(&logbuf, DefaultFlags) + c.Assert(err, IsNil) + c.Check(logbuf.String(), Matches, `(?m).*:\d+: WARNING: can not create syslog logger`) + + // ensure that even without a syslog the console log works and we + // do not crash + logbuf.Reset() + SetLogger(l) + Noticef("I do not want to crash") + c.Check(logbuf.String(), Matches, `(?m).*logger_test\.go:\d+: I do not want to crash`) + +} |
