7
#include "logpatterns.h"
14
#include <glib/gstdio.h>
16
gboolean fail = FALSE;
17
gboolean verbose = FALSE;
19
gchar *pdb = "<patterndb version='2' pub_date='2009-07-28'>\
20
<ruleset name='testset' id='1'>\
21
<rule provider='test' id='11' class='system'>\
23
<pattern>pattern11</pattern>\
24
<pattern>pattern11a</pattern>\
31
<value name='n11-1'>v11-1</value>\
32
<value name='n11-2'>v11-2</value>\
33
<value name='vvv'>${HOST}</value>\
36
<rule provider='test' id='12' class='system'>\
38
<pattern>pattern12</pattern>\
39
<pattern>pattern12a</pattern>\
45
#define test_fail(fmt, args...) \
47
printf(fmt, ##args); \
51
#define test_msg(fmt, args...) \
53
if (verbose) printf(fmt, ##args); \
56
#define MYHOST "MYHOST"
59
test_rule_value(LogPatternDatabase *patterndb, const gchar *pattern, const gchar *name, const gchar *value)
62
LogMessage *msg = log_msg_new_empty();
63
gboolean found = FALSE;
64
GString *val = g_string_sized_new(256);
67
log_msg_set_value(msg, LM_V_MESSAGE, pattern, strlen(pattern));
68
log_msg_set_value(msg, LM_V_HOST, MYHOST, strlen(MYHOST));
70
result = log_pattern_database_lookup(patterndb, msg, NULL);
75
while (i < result->values->len && !g_str_equal(((LogTemplate *)g_ptr_array_index(result->values, i))->name, name))
78
if (i < result->values->len)
80
log_template_format(g_ptr_array_index(result->values, i), msg, 0, TS_FMT_ISO, NULL, 0, 0, val);
81
found = g_str_equal(val->str, value);
87
test_fail("Value '%s' is %smatching for pattern '%s' (%d)\n", name, found ? "" : "not ", pattern, !!result);
90
g_string_free(val, TRUE);
94
test_rule_tag(LogPatternDatabase *patterndb, const gchar *pattern, const gchar *tag, gboolean set)
97
LogMessage *msg = log_msg_new_empty();
98
guint tag_id = log_tags_get_by_name(tag);
99
gboolean found = FALSE;
102
log_msg_set_value(msg, LM_V_MESSAGE, pattern, strlen(pattern));
104
result = log_pattern_database_lookup(patterndb, msg, NULL);
109
while (i < result->tags->len && g_array_index(result->tags, guint, i) != tag_id)
112
if (i < result->tags->len)
118
test_fail("Tag '%s' is %sset for pattern '%s' (%d)\n", tag, found ? "" : "not ", pattern, !!result);
124
main(int argc, char *argv[])
126
LogPatternDatabase patterndb;
127
gchar *filename = NULL;
136
memset(&patterndb, 0x0, sizeof(LogPatternDatabase));
138
g_file_open_tmp("patterndbXXXXXX.xml", &filename, NULL);
139
g_file_set_contents(filename, pdb, strlen(pdb), NULL);
141
if (log_pattern_database_load(&patterndb, filename))
143
if (!g_str_equal(patterndb.version, "2"))
144
test_fail("Invalid version '%s'\n", patterndb.version);
145
if (!g_str_equal(patterndb.pub_date, "2009-07-28"))
146
test_fail("Invalid pub_date '%s'\n", patterndb.pub_date);
148
test_rule_tag(&patterndb, "pattern11", "tag11-1", TRUE);
149
test_rule_tag(&patterndb, "pattern11", "tag11-2", TRUE);
150
test_rule_tag(&patterndb, "pattern11", "tag11-3", FALSE);
151
test_rule_tag(&patterndb, "pattern11a", "tag11-1", TRUE);
152
test_rule_tag(&patterndb, "pattern11a", "tag11-2", TRUE);
153
test_rule_tag(&patterndb, "pattern11a", "tag11-3", FALSE);
154
test_rule_tag(&patterndb, "pattern12", "tag12-1", FALSE);
155
test_rule_tag(&patterndb, "pattern12", "tag12-2", FALSE);
156
test_rule_tag(&patterndb, "pattern12", "tag12-3", FALSE);
157
test_rule_tag(&patterndb, "pattern12a", "tag12-1", FALSE);
158
test_rule_tag(&patterndb, "pattern12a", "tag12-2", FALSE);
159
test_rule_tag(&patterndb, "pattern12a", "tag12-3", FALSE);
160
test_rule_tag(&patterndb, "pattern1x", "tag1x-1", FALSE);
161
test_rule_tag(&patterndb, "pattern1x", "tag1x-2", FALSE);
162
test_rule_tag(&patterndb, "pattern1x", "tag1x-3", FALSE);
163
test_rule_tag(&patterndb, "pattern1xa", "tag1x-1", FALSE);
164
test_rule_tag(&patterndb, "pattern1xa", "tag1x-2", FALSE);
165
test_rule_tag(&patterndb, "pattern1xa", "tag1x-3", FALSE);
167
test_rule_value(&patterndb, "pattern11", "n11-1", "v11-1");
168
test_rule_value(&patterndb, "pattern11", "n11-2", "v11-2");
169
test_rule_value(&patterndb, "pattern11", "n11-3", NULL);
170
test_rule_value(&patterndb, "pattern11a", "n11-1", "v11-1");
171
test_rule_value(&patterndb, "pattern11a", "n11-2", "v11-2");
172
test_rule_value(&patterndb, "pattern11a", "n11-3", NULL);
173
test_rule_value(&patterndb, "pattern12", "n12-1", NULL);
174
test_rule_value(&patterndb, "pattern12", "n12-2", NULL);
175
test_rule_value(&patterndb, "pattern12", "n12-3", NULL);
176
test_rule_value(&patterndb, "pattern1x", "n1x-1", NULL);
177
test_rule_value(&patterndb, "pattern1x", "n1x-2", NULL);
178
test_rule_value(&patterndb, "pattern1x", "n1x-3", NULL);
180
test_rule_value(&patterndb, "pattern11", "vvv", MYHOST);
182
log_pattern_database_free(&patterndb);
190
return (fail ? 1 : 0);