1// +build !binary_log
2// +build !windows
3
4package zerolog
5
6import (
7	"reflect"
8	"testing"
9)
10
11type syslogEvent struct {
12	level string
13	msg   string
14}
15type syslogTestWriter struct {
16	events []syslogEvent
17}
18
19func (w *syslogTestWriter) Write(p []byte) (int, error) {
20	return 0, nil
21}
22func (w *syslogTestWriter) Trace(m string) error {
23	w.events = append(w.events, syslogEvent{"Trace", m})
24	return nil
25}
26func (w *syslogTestWriter) Debug(m string) error {
27	w.events = append(w.events, syslogEvent{"Debug", m})
28	return nil
29}
30func (w *syslogTestWriter) Info(m string) error {
31	w.events = append(w.events, syslogEvent{"Info", m})
32	return nil
33}
34func (w *syslogTestWriter) Warning(m string) error {
35	w.events = append(w.events, syslogEvent{"Warning", m})
36	return nil
37}
38func (w *syslogTestWriter) Err(m string) error {
39	w.events = append(w.events, syslogEvent{"Err", m})
40	return nil
41}
42func (w *syslogTestWriter) Emerg(m string) error {
43	w.events = append(w.events, syslogEvent{"Emerg", m})
44	return nil
45}
46func (w *syslogTestWriter) Crit(m string) error {
47	w.events = append(w.events, syslogEvent{"Crit", m})
48	return nil
49}
50
51func TestSyslogWriter(t *testing.T) {
52	sw := &syslogTestWriter{}
53	log := New(SyslogLevelWriter(sw))
54	log.Trace().Msg("trace")
55	log.Debug().Msg("debug")
56	log.Info().Msg("info")
57	log.Warn().Msg("warn")
58	log.Error().Msg("error")
59	log.Log().Msg("nolevel")
60	want := []syslogEvent{
61		{"Debug", `{"level":"debug","message":"debug"}` + "\n"},
62		{"Info", `{"level":"info","message":"info"}` + "\n"},
63		{"Warning", `{"level":"warn","message":"warn"}` + "\n"},
64		{"Err", `{"level":"error","message":"error"}` + "\n"},
65		{"Info", `{"message":"nolevel"}` + "\n"},
66	}
67	if got := sw.events; !reflect.DeepEqual(got, want) {
68		t.Errorf("Invalid syslog message routing: want %v, got %v", want, got)
69	}
70}
71