@@ -7,11 +7,88 @@ import (
77 "testing"
88)
99
10+ type mockCommandRunner struct {
11+ priority string
12+ source string
13+ message string
14+ called bool
15+ }
16+
17+ func (m * mockCommandRunner ) Run (priority , source , message string ) error {
18+ m .called = true
19+ m .priority = priority
20+ m .source = source
21+ m .message = message
22+ return nil
23+ }
24+
25+ func TestDarwinSyslog_Write_InfoPriority (t * testing.T ) {
26+ runner := & mockCommandRunner {}
27+ s := & darwinSyslog {out : & bytes.Buffer {}, source : "test" , runner : runner }
28+
29+ s .Write ([]byte ("[INFO] info message" ))
30+
31+ if ! runner .called {
32+ t .Fatal ("expected runner to be called" )
33+ }
34+ if runner .priority != "daemon.info" {
35+ t .Errorf ("expected priority 'daemon.info', got %q" , runner .priority )
36+ }
37+ }
38+
39+ func TestDarwinSyslog_Write_WarningPriority (t * testing.T ) {
40+ runner := & mockCommandRunner {}
41+ s := & darwinSyslog {out : & bytes.Buffer {}, source : "test" , runner : runner }
42+
43+ s .Write ([]byte ("[WARNING] warning message" ))
44+
45+ if runner .priority != "daemon.warning" {
46+ t .Errorf ("expected priority 'daemon.warning', got %q" , runner .priority )
47+ }
48+ }
49+
50+ func TestDarwinSyslog_Write_ErrorPriority (t * testing.T ) {
51+ runner := & mockCommandRunner {}
52+ s := & darwinSyslog {out : & bytes.Buffer {}, source : "test" , runner : runner }
53+
54+ s .Write ([]byte ("[ERROR] error message" ))
55+
56+ if runner .priority != "daemon.err" {
57+ t .Errorf ("expected priority 'daemon.err', got %q" , runner .priority )
58+ }
59+ }
60+
61+ func TestDarwinSyslog_Write_DefaultsToInfo (t * testing.T ) {
62+ runner := & mockCommandRunner {}
63+ s := & darwinSyslog {out : & bytes.Buffer {}, source : "test" , runner : runner }
64+
65+ s .Write ([]byte ("[DEBUG] debug message" ))
66+
67+ if runner .priority != "daemon.info" {
68+ t .Errorf ("expected default priority 'daemon.info', got %q" , runner .priority )
69+ }
70+ }
71+
72+ func TestDarwinSyslog_Write_PassesSourceAndMessage (t * testing.T ) {
73+ runner := & mockCommandRunner {}
74+ s := & darwinSyslog {out : & bytes.Buffer {}, source : "my-app" , runner : runner }
75+
76+ s .Write ([]byte ("[INFO] hello world" ))
77+
78+ if runner .source != "my-app" {
79+ t .Errorf ("expected source 'my-app', got %q" , runner .source )
80+ }
81+ if runner .message != "hello world" {
82+ t .Errorf ("expected message 'hello world', got %q" , runner .message )
83+ }
84+ }
85+
1086func TestDarwinSyslog_Write_ForwardsToOut (t * testing.T ) {
87+ runner := & mockCommandRunner {}
1188 var out bytes.Buffer
12- s := & darwinSyslog {out : & out , source : "test" }
89+ s := & darwinSyslog {out : & out , source : "test" , runner : runner }
1390
14- data := []byte ("[INFO] hello from darwin " )
91+ data := []byte ("[INFO] forwarded " )
1592 n , err := s .Write (data )
1693
1794 if err != nil {
@@ -21,53 +98,24 @@ func TestDarwinSyslog_Write_ForwardsToOut(t *testing.T) {
2198 t .Errorf ("expected %d bytes written, got %d" , len (data ), n )
2299 }
23100 if out .String () != string (data ) {
24- t .Errorf ("expected out to contain %q, got %q" , string (data ), out .String ())
25- }
26- }
27-
28- func TestDarwinSyslog_Write_Levels (t * testing.T ) {
29- tests := []struct {
30- name string
31- input string
32- }{
33- {"info level" , "[INFO] info message" },
34- {"warning level" , "[WARNING] warning message" },
35- {"error level" , "[ERROR] error message" },
36- {"unknown level defaults to info" , "[DEBUG] debug message" },
37- }
38-
39- for _ , tt := range tests {
40- t .Run (tt .name , func (t * testing.T ) {
41- var out bytes.Buffer
42- s := & darwinSyslog {out : & out , source : "test" }
43-
44- _ , err := s .Write ([]byte (tt .input ))
45- if err != nil {
46- t .Fatalf ("expected no error, got %v" , err )
47- }
48- if out .String () != tt .input {
49- t .Errorf ("expected out %q, got %q" , tt .input , out .String ())
50- }
51- })
101+ t .Errorf ("expected out %q, got %q" , string (data ), out .String ())
52102 }
53103}
54104
55105func TestDarwinSyslog_Close (t * testing.T ) {
56- s := & darwinSyslog {out : & bytes.Buffer {}, source : "test" }
106+ s := & darwinSyslog {out : & bytes.Buffer {}, source : "test" , runner : & mockCommandRunner {} }
57107
58- err := s .Close ()
59- if err != nil {
108+ if err := s .Close (); err != nil {
60109 t .Errorf ("expected nil error, got %v" , err )
61110 }
62111}
63112
64- func TestNew_Darwin (t * testing.T ) {
113+ func TestNewWithRunner_Darwin (t * testing.T ) {
114+ runner := & mockCommandRunner {}
65115 var out bytes.Buffer
66- syslogger , err := New ("test-source" , & out )
67116
68- if err != nil {
69- t .Fatalf ("expected no error, got %v" , err )
70- }
117+ syslogger := newWithRunner ("test-source" , & out , runner )
118+
71119 if syslogger == nil {
72120 t .Fatal ("expected non-nil Syslog" )
73121 }
0 commit comments