1 #include <cgreen/mocks.h>
2 
3 /* syslog calls mocked via mock_vfprintf, so expect that too */
4 
5 #if !defined(HAVE_SYSLOG) || !defined(HAVE_SYSLOG_H)
add_fglog_syslog(TestSuite * suite)6 void add_fglog_syslog(TestSuite *suite)
7 {
8 }
9 #else
10 
Ensure(fglog_uses_printf_if_no_use_syslog)11 Ensure(fglog_uses_printf_if_no_use_syslog)
12 {
13     never_expect(mock_syslog);
14     never_expect(mock_vsyslog);
15     never_expect(mock_openlog);
16 
17     always_expect(mock_fprintf);
18     always_expect(mock_vfprintf);
19     always_expect(mock_fclose);
20 
21     log_file("stderr");
22     fglog(normal_log_msg);
23 }
24 
Ensure(fglog_opens_syslog_first_time)25 Ensure(fglog_opens_syslog_first_time)
26 {
27     expect(mock_openlog,
28 	   when(ident, is_equal_to_string(default_name)),
29 	   when(option, is_equal_to(LOG_PID)),
30 	   when(facility, is_equal_to(FACILITY)));
31     always_expect(mock_vsyslog);
32     always_expect(mock_vfprintf);
33 
34     log_file("syslog");
35     fglog(normal_log_msg);
36 }
37 
Ensure(fglog_doesnot_open_syslog_after_debug)38 Ensure(fglog_doesnot_open_syslog_after_debug)
39 {
40     expect(mock_openlog);
41     never_expect(mock_openlog);
42     always_expect(mock_vsyslog);
43     always_expect(mock_vfprintf);
44 
45     log_file("syslog");
46     debug(syslog_debug_level, normal_log_msg);
47     fglog(normal_log_msg);
48 }
49 
Ensure(fglog_doesnot_open_syslog_after_fglog)50 Ensure(fglog_doesnot_open_syslog_after_fglog)
51 {
52     expect(mock_openlog);
53     never_expect(mock_openlog);
54     always_expect(mock_vsyslog);
55     always_expect(mock_vfprintf);
56 
57     log_file("syslog");
58     fglog(normal_log_msg);
59     fglog(normal_log_msg);
60 }
61 
Ensure(fglog_simple_output_syslog)62 Ensure(fglog_simple_output_syslog)
63 {
64     expect(mock_openlog);
65     expect(mock_vsyslog,
66 	   when(priority, is_equal_to(LOG_NOTICE)));
67 
68     expect(mock_vfprintf,
69 	   when(stream, is_equal_to(NULL)),
70 	   when(res_str, is_equal_to_string(normal_log_msg)));
71 
72     log_file("syslog");
73     fglog(normal_log_msg);
74 }
75 
Ensure(fglog_errno_output_syslog)76 Ensure(fglog_errno_output_syslog)
77 {
78     char *exp;
79 
80     expect(mock_openlog);
81     expect(mock_vsyslog,
82 	   when(priority, is_equal_to(LOG_NOTICE)));
83 
84     expect(mock_vfprintf,
85 	   when(stream, is_equal_to(NULL)),
86 	   when(res_str, is_equal_to_string(errno_log_msg + 1)));
87 
88     exp = create_string("(errno=%d: %m)", errno);
89     expect(mock_syslog,
90 	   when(priority, is_equal_to(LOG_NOTICE)));
91     expect(mock_vfprintf,
92 	   when(stream, is_equal_to(NULL)),
93 	   when(res_str, is_equal_to_string(exp)));
94 
95     log_file("syslog");
96     fglog(errno_log_msg);
97 
98     free(exp);
99 }
100 
Ensure(fglog_outputs_after_log_file_syslog)101 Ensure(fglog_outputs_after_log_file_syslog)
102 {
103     expect(mock_openlog,
104 	   when(ident, is_equal_to_string(default_name)));
105     expect(mock_vsyslog,
106 	   when(priority, is_equal_to(LOG_NOTICE)));
107 
108     expect(mock_vfprintf,
109 	   when(stream, is_equal_to(NULL)),
110 	   when(res_str, is_equal_to_string(normal_log_msg)));
111 
112     log_file("syslog");
113     fglog(normal_log_msg);
114 }
115 
Ensure(fglog_outputs_after_log_program_log_file_syslog)116 Ensure(fglog_outputs_after_log_program_log_file_syslog)
117 {
118     expect(mock_openlog,
119 	   when(ident, is_equal_to_string(custom_name)));
120     expect(mock_vsyslog,
121 	   when(priority, is_equal_to(LOG_NOTICE)));
122 
123     expect(mock_vfprintf,
124 	   when(stream, is_equal_to(NULL)),
125 	   when(res_str, is_equal_to_string(normal_log_msg)));
126 
127     log_program(custom_name);
128     log_file("syslog");
129     fglog(normal_log_msg);
130 }
131 
Ensure(fglog_outputs_after_log_file_syslog_log_program)132 Ensure(fglog_outputs_after_log_file_syslog_log_program)
133 {
134     expect(mock_openlog,
135 	   when(ident, is_equal_to_string(default_name)));
136     expect(mock_openlog,
137 	   when(ident, is_equal_to_string(custom_name)));
138     expect(mock_vsyslog,
139 	   when(priority, is_equal_to(LOG_NOTICE)));
140 
141     expect(mock_vfprintf,
142 	   when(stream, is_equal_to(NULL)),
143 	   when(res_str, is_equal_to_string(normal_log_msg)));
144 
145     log_file("syslog");
146     log_program(custom_name);
147     fglog(normal_log_msg);
148 }
149 
add_fglog_syslog(TestSuite * suite)150 void add_fglog_syslog(TestSuite *suite)
151 {
152     add_test(suite, fglog_uses_printf_if_no_use_syslog);
153     add_test(suite, fglog_opens_syslog_first_time);
154     add_test(suite, fglog_doesnot_open_syslog_after_debug);
155     add_test(suite, fglog_doesnot_open_syslog_after_fglog);
156     add_test(suite, fglog_simple_output_syslog);
157     add_test(suite, fglog_errno_output_syslog);
158     add_test(suite, fglog_outputs_after_log_file_syslog);
159     add_test(suite, fglog_outputs_after_log_program_log_file_syslog);
160     add_test(suite, fglog_outputs_after_log_file_syslog_log_program);
161 }
162 
163 #endif /* HAVE_SYSLOG HAVE_SYSLOG_H */
164