diff --git a/log_level_test.go b/log_level_test.go index ee9c260..2c3f6d5 100644 --- a/log_level_test.go +++ b/log_level_test.go @@ -2,6 +2,8 @@ package log import ( "encoding/json" + "errors" + "fmt" "io" "testing" ) @@ -9,45 +11,74 @@ import ( func TestLogLevel(t *testing.T) { const subsystem = "log-level-test" logger := Logger(subsystem) - reader := NewPipeReader() - done := make(chan struct{}) - go func() { - defer close(done) + readLog := func(reader *PipeReader, errCh chan error) { decoder := json.NewDecoder(reader) - for { - var entry struct { - Message string `json:"msg"` - Caller string `json:"caller"` - } - err := decoder.Decode(&entry) - switch err { - default: - t.Error(err) - return - case io.EOF: - return - case nil: - } - if entry.Message != "bar" { - t.Errorf("unexpected message: %s", entry.Message) - } - if entry.Caller == "" { - t.Errorf("no caller in log entry") - } + var entry struct { + Message string `json:"msg"` + Caller string `json:"caller"` + } + err := decoder.Decode(&entry) + switch err { + default: + errCh <- err + return + case io.EOF: + errCh <- nil + return + case nil: + } + if entry.Message != "bar" { + errCh <- fmt.Errorf("unexpected message: %s", entry.Message) + return } - }() - logger.Debugw("foo") - if err := SetLogLevel(subsystem, "debug"); err != nil { + if entry.Caller == "" { + errCh <- errors.New("no caller in log entry") + return + } + errCh <- nil + } + + err := SetLogLevel(subsystem, "error") + if err != nil { + t.Error(err) + } + reader := NewPipeReader() + errCh := make(chan error, 1) + go readLog(reader, errCh) + logger.Debug("foo") + _ = logger.Sync() + if err = reader.Close(); err != nil { + t.Error(err) + } + if err = <-errCh; err != nil { t.Error(err) } - logger.Debugw("bar") + + if err = SetLogLevel(subsystem, "debug"); err != nil { + t.Error(err) + } + reader = NewPipeReader() + go readLog(reader, errCh) + logger.Debug("bar") + _ = logger.Sync() + if err = reader.Close(); err != nil { + t.Error(err) + } + if err = <-errCh; err != nil { + t.Error(err) + } + SetAllLoggers(LevelInfo) - logger.Debugw("baz") + reader = NewPipeReader() + go readLog(reader, errCh) + logger.Debug("baz") // ignore the error because // https://github.com/uber-go/zap/issues/880 _ = logger.Sync() if err := reader.Close(); err != nil { t.Error(err) } - <-done + if err = <-errCh; err != nil { + t.Error(err) + } }