~ubuntu-branches/ubuntu/oneiric/syslog-ng/oneiric

« back to all changes in this revision

Viewing changes to tests/unit/test_template.c

  • Committer: Bazaar Package Importer
  • Author(s): Laszlo Boszormenyi (GCS)
  • Date: 2011-05-16 22:02:46 UTC
  • mfrom: (26.1.1 sid)
  • Revision ID: james.westby@ubuntu.com-20110516220246-nknmeu831n49bx1z
Tags: 3.2.4-1
* New upstream release, fixing infinite loop via PCRE and global. No CVE
  number yet, Vigil@nce id is 10648.
* Remove all patches, they were applied upstream.

Show diffs side-by-side

added added

removed removed

Lines of Context:
5
5
#include "apphook.h"
6
6
#include "cfg.h"
7
7
#include "timeutils.h"
 
8
#include "plugin.h"
8
9
 
9
10
#include <time.h>
10
11
#include <stdlib.h>
13
14
 
14
15
gboolean success = TRUE;
15
16
gboolean verbose = FALSE;
 
17
MsgFormatOptions parse_options;
16
18
 
17
19
void
18
20
testcase(LogMessage *msg, gchar *template, gchar *expected)
19
21
{
20
22
  LogTemplate *templ;
21
23
  GString *res = g_string_sized_new(128);
22
 
  static TimeZoneInfo *tzinfo = NULL;
23
 
 
24
 
  if (!tzinfo)
25
 
    tzinfo = time_zone_info_new(NULL);
26
 
 
27
 
  templ = log_template_new("dummy", template);
28
 
  log_template_format(templ, msg, LT_ESCAPE, TS_FMT_BSD, tzinfo, 3, 0, res);
 
24
  GError *error = NULL;
 
25
  LogMessage *context[2] = { msg, msg };
 
26
 
 
27
  templ = log_template_new(configuration, "dummy", template);
 
28
  if (!log_template_compile(templ, &error))
 
29
    {
 
30
      fprintf(stderr, "FAIL: error compiling template, template=%s, error=%s\n", template, error->message);
 
31
      g_clear_error(&error);
 
32
      success = FALSE;
 
33
      goto error;
 
34
    }
 
35
  log_template_format_with_context(templ, context, 2, NULL, LTZ_LOCAL, 0, res);
29
36
 
30
37
  if (strcmp(res->str, expected) != 0)
31
38
    {
36
43
    {
37
44
      fprintf(stderr, "PASS: template test success, template=%s => %s\n", template, expected);
38
45
    }
 
46
 error:
39
47
  log_template_unref(templ);
40
48
  g_string_free(res, TRUE);
41
49
}
42
50
 
 
51
void
 
52
testcase_failure(gchar *template, const gchar *expected_error)
 
53
{
 
54
  LogTemplate *templ;
 
55
  GError *error = NULL;
 
56
 
 
57
  templ = log_template_new(configuration, NULL, template);
 
58
  if (log_template_compile(templ, &error))
 
59
    {
 
60
      fprintf(stderr, "FAIL: compilation failure expected to template, but success was returned, template=%s, expected_error=%s\n", template, expected_error);
 
61
      success = FALSE;
 
62
      goto error;
 
63
    }
 
64
  if (strstr(error->message, expected_error) == NULL)
 
65
    {
 
66
      fprintf(stderr, "FAIL: compilation error doesn't match, error=%s, expected_error=%s\n", error->message, expected_error);
 
67
      success = FALSE;
 
68
      goto error;
 
69
    }
 
70
 error:
 
71
  log_template_unref(templ);
 
72
}
 
73
 
43
74
int
44
75
main(int argc G_GNUC_UNUSED, char *argv[] G_GNUC_UNUSED)
45
76
{
46
77
  LogMessage *msg;
47
78
  char *msg_str = "<155>2006-02-11T10:34:56+01:00 bzorp syslog-ng[23323]:árvíztűrőtükörfúrógép";
48
 
  GlobalConfig dummy;
49
79
 
50
80
  if (argc > 1)
51
81
    verbose = TRUE;
52
82
 
53
 
  configuration = &dummy;
54
 
  dummy.version = 0x0201;
 
83
  configuration = cfg_new(0x0302);
 
84
  plugin_load_module("syslogformat", configuration, NULL);
 
85
  plugin_load_module("basicfuncs", configuration, NULL);
 
86
  plugin_load_module("convertfuncs", configuration, NULL);
 
87
  msg_format_options_defaults(&parse_options);
 
88
  msg_format_options_init(&parse_options, configuration);
 
89
  configuration->template_options.frac_digits = 3;
 
90
  configuration->template_options.time_zone_info[LTZ_LOCAL] = time_zone_info_new(NULL);
55
91
 
56
92
  app_startup();
57
93
 
58
94
  putenv("TZ=MET-1METDST");
59
95
  tzset();
60
96
 
61
 
  msg = log_msg_new(msg_str, strlen(msg_str), g_sockaddr_inet_new("10.10.10.10", 1010), 0, NULL, -1, 0xFFFF);
 
97
  msg = log_msg_new(msg_str, strlen(msg_str), g_sockaddr_inet_new("10.11.12.13", 1010), &parse_options);
62
98
  log_msg_set_value(msg, log_msg_get_value_handle("APP.VALUE"), "value", -1);
63
99
  log_msg_set_match(msg, 0, "whole-match", -1);
64
100
  log_msg_set_match(msg, 1, "first-match", -1);
155
191
  testcase(msg, "$PROGRAM", "syslog-ng");
156
192
  testcase(msg, "$PID", "23323");
157
193
  testcase(msg, "$MSGHDR", "syslog-ng[23323]:");
158
 
  testcase(msg, "$MSG", "syslog-ng[23323]:árvíztűrőtükörfúrógép");
159
 
  testcase(msg, "$MSGONLY", "árvíztűrőtükörfúrógép");
160
 
  testcase(msg, "$MESSAGE", "syslog-ng[23323]:árvíztűrőtükörfúrógép");
161
 
  testcase(msg, "$SOURCEIP", "10.10.10.10");
 
194
  testcase(msg, "$MSG", "árvíztűrőtükörfúrógép");
 
195
  testcase(msg, "$MESSAGE", "árvíztűrőtükörfúrógép");
 
196
  testcase(msg, "$SOURCEIP", "10.11.12.13");
162
197
  testcase(msg, "$PROGRAM/var/log/messages/$HOST/$HOST_FROM/$MONTH$DAY${QQQQQ}valami", "syslog-ng/var/log/messages/bzorp/kismacska/0211valami");
163
198
  testcase(msg, "${APP.VALUE}", "value");
164
199
  testcase(msg, "${APP.VALUE:-ures}", "value");
167
202
  testcase(msg, "$1", "first-match");
168
203
  testcase(msg, "$$$1$$", "$first-match$");
169
204
 
170
 
  dummy.version = 0x0300;
 
205
  /* template functions */
 
206
  testcase(msg, "$(echo $HOST $PID)", "bzorp 23323");
 
207
  testcase(msg, "$(echo \"$(echo $HOST)\" $PID)", "bzorp 23323");
 
208
  testcase(msg, "$(echo \"$(echo '$(echo $HOST)')\" $PID)", "bzorp 23323");
 
209
  testcase(msg, "$(echo \"$(echo '$(echo $HOST)')\" $PID)", "bzorp 23323");
 
210
  testcase(msg, "$(echo '\"$(echo $(echo $HOST))\"' $PID)", "\"bzorp\" 23323");
 
211
  testcase(msg, "$(ipv4-to-int $SOURCEIP)", "168496141");
 
212
 
 
213
  testcase(msg, "$(grep 'facility(local3)' $PID)", "23323,23323");
 
214
  testcase(msg, "$(grep 'facility(local3)' $PID $PROGRAM)", "23323,syslog-ng,23323,syslog-ng");
 
215
  testcase(msg, "$(grep 'facility(local4)' $PID)", "");
 
216
  testcase(msg, "$(grep ('$FACILITY' == 'local4') $PID)", "");
 
217
  testcase(msg, "$(grep ('$FACILITY(' == 'local3(') $PID)", "23323,23323");
 
218
  testcase(msg, "$(grep ('$FACILITY(' == 'local4)') $PID)", "");
 
219
  testcase(msg, "$(grep \\'$FACILITY\\'\\ ==\\ \\'local4\\' $PID)", "");
 
220
  testcase(msg, "$(if 'facility(local4)' alma korte)", "korte");
 
221
  testcase(msg, "$(if 'facility(local3)' alma korte)", "alma");
 
222
 
 
223
  testcase(msg, "$(if '\"$FACILITY\" lt \"local3\"' alma korte)", "korte");
 
224
  testcase(msg, "$(if '\"$FACILITY\" le \"local3\"' alma korte)", "alma");
 
225
  testcase(msg, "$(if '\"$FACILITY\" eq \"local3\"' alma korte)", "alma");
 
226
  testcase(msg, "$(if '\"$FACILITY\" ne \"local3\"' alma korte)", "korte");
 
227
  testcase(msg, "$(if '\"$FACILITY\" gt \"local3\"' alma korte)", "korte");
 
228
  testcase(msg, "$(if '\"$FACILITY\" ge \"local3\"' alma korte)", "alma");
 
229
 
 
230
  testcase(msg, "$(if '\"$FACILITY_NUM\" < \"19\"' alma korte)", "korte");
 
231
  testcase(msg, "$(if '\"$FACILITY_NUM\" <= \"19\"' alma korte)", "alma");
 
232
  testcase(msg, "$(if '\"$FACILITY_NUM\" == \"19\"' alma korte)", "alma");
 
233
  testcase(msg, "$(if '\"$FACILITY_NUM\" != \"19\"' alma korte)", "korte");
 
234
  testcase(msg, "$(if '\"$FACILITY_NUM\" > \"19\"' alma korte)", "korte");
 
235
  testcase(msg, "$(if '\"$FACILITY_NUM\" >= \"19\"' alma korte)", "alma");
 
236
  testcase(msg, "$(if '\"$FACILITY_NUM\" >= \"19\" and \"kicsi\" == \"nagy\"' alma korte)", "korte");
 
237
  testcase(msg, "$(if '\"$FACILITY_NUM\" >= \"19\" or \"kicsi\" == \"nagy\"' alma korte)", "alma");
 
238
 
 
239
  /* message refs */
 
240
  testcase(msg, "$(echo ${HOST}@0 ${PID}@1)", "bzorp 23323");
 
241
  testcase(msg, "$(echo $HOST $PID)@0", "bzorp 23323");
 
242
 
 
243
  testcase(msg, "$(grep 'facility(local3)' $PID)@0", "23323");
 
244
  testcase(msg, "$(grep 'facility(local3)' $PID)@1", "23323");
 
245
  testcase(msg, "$(grep 'facility(local3)' $PID)@2", "");
 
246
 
 
247
  /* template syntax errors */
 
248
  testcase_failure("${unbalanced_brace", "'}' is missing");
 
249
  testcase(msg, "$unbalanced_brace}", "}");
 
250
  testcase(msg, "$}", "$}");
 
251
  testcase_failure("$(unbalanced_paren", "missing function name or inbalanced '('");
 
252
  testcase(msg, "$unbalanced_paren)", ")");
 
253
 
 
254
 
 
255
  configuration->version = 0x0201;
171
256
  testcase(msg, "$MSGHDR", "syslog-ng[23323]:");
172
 
  testcase(msg, "$MSG", "árvíztűrőtükörfúrógép");
173
 
  testcase(msg, "$MESSAGE", "árvíztűrőtükörfúrógép");
 
257
  testcase(msg, "$MSG", "syslog-ng[23323]:árvíztűrőtükörfúrógép");
 
258
  testcase(msg, "$MSGONLY", "árvíztűrőtükörfúrógép");
 
259
  testcase(msg, "$MESSAGE", "syslog-ng[23323]:árvíztűrőtükörfúrógép");
174
260
 
175
261
  log_msg_unref(msg);
176
262
 
 
263
  configuration->version = 0x0302;
 
264
 
177
265
  msg_str = "syslog-ng: árvíztűrőtükörfúrógép [pid test]";
178
 
  msg = log_msg_new(msg_str, strlen(msg_str), g_sockaddr_inet_new("10.10.10.10", 1010), 0, NULL, -1, 0xFFFF);
 
266
  msg = log_msg_new(msg_str, strlen(msg_str), g_sockaddr_inet_new("10.11.12.13", 1010), &parse_options);
179
267
 
180
268
  testcase(msg, "$PID", "");
181
269
  log_msg_unref(msg);
182
270
 
183
271
  msg_str = "<155>2006-02-11T10:34:56+01:00 bzorp syslog-ng[23323]:árvíztűrőtükörfúrógép";
184
272
 
185
 
  msg = log_msg_new(msg_str, strlen(msg_str), g_sockaddr_inet_new("10.10.10.10", 1010), LP_DONT_STORE_LEGACY_MSGHDR, NULL, -1, 0xFFFF);
 
273
  parse_options.flags = LP_EXPECT_HOSTNAME;
 
274
  msg = log_msg_new(msg_str, strlen(msg_str), g_sockaddr_inet_new("10.11.12.13", 1010), &parse_options);
186
275
 
187
276
  testcase(msg, "$LEGACY_MSGHDR", "");
188
277
  testcase(msg, "$MSGHDR", "syslog-ng[23323]: ");
189
278
  log_msg_unref(msg);
190
279
 
191
280
  msg_str = "<132>1 2006-10-29T01:59:59.156+01:00 mymachine evntslog 3535 ID47 [exampleSDID@0 iut=\"3\" eventSource=\"Application\" eventID=\"1011\"][examplePriority@0 class=\"high\"] BOMAn application event log entry...";
192
 
  msg = log_msg_new(msg_str, strlen(msg_str), g_sockaddr_inet_new("10.10.10.10", 1010), LP_SYSLOG_PROTOCOL, NULL, -1, 0xFFFF);
 
281
  parse_options.flags = LP_SYSLOG_PROTOCOL;
 
282
  msg = log_msg_new(msg_str, strlen(msg_str), g_sockaddr_inet_new("10.11.12.13", 1010), &parse_options);
193
283
 
194
284
  testcase(msg, "$PRI", "132");
195
285
  testcase(msg, "$HOST", "mymachine");