...

Source file src/github.com/rs/zerolog/syslog_test.go

Documentation: github.com/rs/zerolog

     1  // +build !binary_log
     2  // +build !windows
     3  
     4  package zerolog
     5  
     6  import (
     7  	"bytes"
     8  	"reflect"
     9  	"strings"
    10  	"testing"
    11  )
    12  
    13  type syslogEvent struct {
    14  	level string
    15  	msg   string
    16  }
    17  type syslogTestWriter struct {
    18  	events []syslogEvent
    19  }
    20  
    21  func (w *syslogTestWriter) Write(p []byte) (int, error) {
    22  	return 0, nil
    23  }
    24  func (w *syslogTestWriter) Trace(m string) error {
    25  	w.events = append(w.events, syslogEvent{"Trace", m})
    26  	return nil
    27  }
    28  func (w *syslogTestWriter) Debug(m string) error {
    29  	w.events = append(w.events, syslogEvent{"Debug", m})
    30  	return nil
    31  }
    32  func (w *syslogTestWriter) Info(m string) error {
    33  	w.events = append(w.events, syslogEvent{"Info", m})
    34  	return nil
    35  }
    36  func (w *syslogTestWriter) Warning(m string) error {
    37  	w.events = append(w.events, syslogEvent{"Warning", m})
    38  	return nil
    39  }
    40  func (w *syslogTestWriter) Err(m string) error {
    41  	w.events = append(w.events, syslogEvent{"Err", m})
    42  	return nil
    43  }
    44  func (w *syslogTestWriter) Emerg(m string) error {
    45  	w.events = append(w.events, syslogEvent{"Emerg", m})
    46  	return nil
    47  }
    48  func (w *syslogTestWriter) Crit(m string) error {
    49  	w.events = append(w.events, syslogEvent{"Crit", m})
    50  	return nil
    51  }
    52  
    53  func TestSyslogWriter(t *testing.T) {
    54  	sw := &syslogTestWriter{}
    55  	log := New(SyslogLevelWriter(sw))
    56  	log.Trace().Msg("trace")
    57  	log.Debug().Msg("debug")
    58  	log.Info().Msg("info")
    59  	log.Warn().Msg("warn")
    60  	log.Error().Msg("error")
    61  	log.Log().Msg("nolevel")
    62  	want := []syslogEvent{
    63  		{"Debug", `{"level":"debug","message":"debug"}` + "\n"},
    64  		{"Info", `{"level":"info","message":"info"}` + "\n"},
    65  		{"Warning", `{"level":"warn","message":"warn"}` + "\n"},
    66  		{"Err", `{"level":"error","message":"error"}` + "\n"},
    67  		{"Info", `{"message":"nolevel"}` + "\n"},
    68  	}
    69  	if got := sw.events; !reflect.DeepEqual(got, want) {
    70  		t.Errorf("Invalid syslog message routing: want %v, got %v", want, got)
    71  	}
    72  }
    73  
    74  type testCEEwriter struct {
    75  	buf *bytes.Buffer
    76  }
    77  
    78  // Only implement one method as we're just testing the prefixing
    79  func (c testCEEwriter) Debug(m string) error { return nil }
    80  
    81  func (c testCEEwriter) Info(m string) error {
    82  	_, err := c.buf.Write([]byte(m))
    83  	return err
    84  }
    85  
    86  func (c testCEEwriter) Warning(m string) error { return nil }
    87  
    88  func (c testCEEwriter) Err(m string) error { return nil }
    89  
    90  func (c testCEEwriter) Emerg(m string) error { return nil }
    91  
    92  func (c testCEEwriter) Crit(m string) error { return nil }
    93  
    94  func (c testCEEwriter) Write(b []byte) (int, error) {
    95  	return c.buf.Write(b)
    96  }
    97  
    98  func TestSyslogWriter_WithCEE(t *testing.T) {
    99  	var buf bytes.Buffer
   100  	sw := testCEEwriter{&buf}
   101  	log := New(SyslogCEEWriter(sw))
   102  	log.Info().Str("key", "value").Msg("message string")
   103  	got := string(buf.Bytes())
   104  	want := "@cee:{"
   105  	if !strings.HasPrefix(got, want) {
   106  		t.Errorf("Bad CEE message start: want %v, got %v", want, got)
   107  	}
   108  }
   109  

View as plain text