~ubuntu-branches/ubuntu/trusty/syslog-ng/trusty-proposed

« back to all changes in this revision

Viewing changes to tests/unit/test_patterndb_v2.c

  • Committer: Bazaar Package Importer
  • Author(s): Laszlo Boszormenyi (GCS)
  • Date: 2010-08-04 17:17:51 UTC
  • mfrom: (1.3.4 upstream)
  • Revision ID: james.westby@ubuntu.com-20100804171751-5bvfxhlc5xrmi3n8
Tags: 3.1.2-1
* New upstream release. 
* Update to Standards-Version 3.9.1 .
* Build depend on libcap-dev to add capability support on Linux archs.
* Disable statistics logging (closes: #586749) and restore logging to
  /var/log/syslog .

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
 
 
2
#include "apphook.h"
 
3
#include "tags.h"
 
4
#include "logmsg.h"
 
5
#include "messages.h"
 
6
#include "filter.h"
 
7
#include "logpatterns.h"
 
8
 
 
9
#include <stdio.h>
 
10
#include <sys/time.h>
 
11
#include <time.h>
 
12
#include <string.h>
 
13
#include <stdlib.h>
 
14
#include <glib/gstdio.h>
 
15
 
 
16
gboolean fail = FALSE;
 
17
gboolean verbose = FALSE;
 
18
 
 
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'>\
 
22
   <patterns>\
 
23
    <pattern>pattern11</pattern>\
 
24
    <pattern>pattern11a</pattern>\
 
25
   </patterns>\
 
26
   <tags>\
 
27
    <tag>tag11-1</tag>\
 
28
    <tag>tag11-2</tag>\
 
29
   </tags>\
 
30
   <values>\
 
31
    <value name='n11-1'>v11-1</value>\
 
32
    <value name='n11-2'>v11-2</value>\
 
33
    <value name='vvv'>${HOST}</value>\
 
34
   </values>\
 
35
  </rule>\
 
36
  <rule provider='test' id='12' class='system'>\
 
37
   <patterns>\
 
38
    <pattern>pattern12</pattern>\
 
39
    <pattern>pattern12a</pattern>\
 
40
   </patterns>\
 
41
  </rule>\
 
42
 </ruleset>\
 
43
</patterndb>";
 
44
 
 
45
#define test_fail(fmt, args...) \
 
46
do {\
 
47
 printf(fmt, ##args); \
 
48
 fail = TRUE; \
 
49
} while (0);
 
50
 
 
51
#define test_msg(fmt, args...) \
 
52
do { \
 
53
  if (verbose) printf(fmt, ##args); \
 
54
} while (0);
 
55
 
 
56
#define MYHOST "MYHOST"
 
57
 
 
58
void
 
59
test_rule_value(LogPatternDatabase *patterndb, const gchar *pattern, const gchar *name, const gchar *value)
 
60
{
 
61
  LogDBResult *result;
 
62
  LogMessage *msg = log_msg_new_empty();
 
63
  gboolean found = FALSE;
 
64
  GString *val = g_string_sized_new(256);
 
65
  gint i = 0;
 
66
 
 
67
  log_msg_set_value(msg, LM_V_MESSAGE, pattern, strlen(pattern));
 
68
  log_msg_set_value(msg, LM_V_HOST, MYHOST, strlen(MYHOST));
 
69
 
 
70
  result = log_pattern_database_lookup(patterndb, msg, NULL);
 
71
  if (result)
 
72
    {
 
73
       if (result->values)
 
74
         {
 
75
           while (i < result->values->len && !g_str_equal(((LogTemplate *)g_ptr_array_index(result->values, i))->name, name))
 
76
             i++;
 
77
 
 
78
           if (i < result->values->len)
 
79
             {
 
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);
 
82
             }
 
83
         }
 
84
    }
 
85
 
 
86
  if (!!value ^ found)
 
87
    test_fail("Value '%s' is %smatching for pattern '%s' (%d)\n", name, found ? "" : "not ", pattern, !!result);
 
88
 
 
89
  log_msg_unref(msg);
 
90
  g_string_free(val, TRUE);
 
91
}
 
92
 
 
93
void
 
94
test_rule_tag(LogPatternDatabase *patterndb, const gchar *pattern, const gchar *tag, gboolean set)
 
95
{
 
96
  LogDBResult *result;
 
97
  LogMessage *msg = log_msg_new_empty();
 
98
  guint tag_id = log_tags_get_by_name(tag);
 
99
  gboolean found = FALSE;
 
100
  gint i = 0;
 
101
 
 
102
  log_msg_set_value(msg, LM_V_MESSAGE, pattern, strlen(pattern));
 
103
 
 
104
  result = log_pattern_database_lookup(patterndb, msg, NULL);
 
105
  if (result)
 
106
    {
 
107
       if (result->tags)
 
108
         {
 
109
           while (i < result->tags->len && g_array_index(result->tags, guint, i) != tag_id)
 
110
             i++;
 
111
 
 
112
           if (i < result->tags->len)
 
113
             found = TRUE;
 
114
         }
 
115
    }
 
116
 
 
117
  if (set ^ found)
 
118
    test_fail("Tag '%s' is %sset for pattern '%s' (%d)\n", tag, found ? "" : "not ", pattern, !!result);
 
119
 
 
120
  log_msg_unref(msg);
 
121
}
 
122
 
 
123
int
 
124
main(int argc, char *argv[])
 
125
{
 
126
  LogPatternDatabase patterndb;
 
127
  gchar *filename = NULL;
 
128
 
 
129
  app_startup();
 
130
 
 
131
  if (argc > 1)
 
132
    verbose = TRUE;
 
133
 
 
134
  msg_init(TRUE);
 
135
 
 
136
  memset(&patterndb, 0x0, sizeof(LogPatternDatabase));
 
137
 
 
138
  g_file_open_tmp("patterndbXXXXXX.xml", &filename, NULL);
 
139
  g_file_set_contents(filename, pdb, strlen(pdb), NULL);
 
140
 
 
141
  if (log_pattern_database_load(&patterndb, filename))
 
142
    {
 
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);
 
147
 
 
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);
 
166
 
 
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);
 
179
 
 
180
      test_rule_value(&patterndb, "pattern11", "vvv", MYHOST);
 
181
 
 
182
      log_pattern_database_free(&patterndb);
 
183
    }
 
184
  else
 
185
    fail = TRUE;
 
186
 
 
187
  g_unlink(filename);
 
188
  g_free(filename);
 
189
  app_shutdown();
 
190
  return  (fail ? 1 : 0);
 
191
}