Skip to content

Commit fd0418c

Browse files
committed
syslog-ng-ctl: fix stats and get query test cases
Signed-off-by: Hofi <hofione@gmail.com>
1 parent 35cb68d commit fd0418c

File tree

1 file changed

+143
-48
lines changed

1 file changed

+143
-48
lines changed

lib/stats/tests/test_stats_query.c

+143-48
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,10 @@
3131
#include "stats/stats-counter.h"
3232
#include "stats/stats-query.h"
3333
#include "stats/stats-registry.h"
34+
#include "stats/stats-prometheus.h"
35+
#include "stats/stats-csv.h"
36+
#include "scratch-buffers.h"
37+
3438
#include <string.h>
3539

3640
guint SCS_FILE;
@@ -132,12 +136,11 @@ static gboolean
132136
_test_format_log_msg_get(gpointer user_data)
133137
{
134138
gpointer *args = (gpointer *) user_data;
135-
StatsCounterItem *ctr = (StatsCounterItem *) args[0];
136-
LogMessage *msg = (LogMessage *) args[1];
137-
gchar *name, *value;
139+
StatsCounterItem *ctr = (StatsCounterItem *) args[2];
140+
LogMessage *msg = (LogMessage *) args[4];
138141

139-
name = g_strdup_printf("%s", stats_counter_get_name(ctr));
140-
value = g_strdup_printf("%"G_GSIZE_FORMAT, stats_counter_get(ctr));
142+
gchar *name = g_strdup_printf("%s", stats_counter_get_name(ctr));
143+
gchar *value = g_strdup_printf("%"G_GSIZE_FORMAT, stats_counter_get(ctr));
141144

142145
log_msg_set_value_by_name(msg, name, value, -1);
143146

@@ -147,55 +150,89 @@ _test_format_log_msg_get(gpointer user_data)
147150
return TRUE;
148151
}
149152

153+
// FIXME: this must be mocked to _ctl_format_get of stats-query-commands.c instead of duplicating the code
150154
static gboolean
151155
_test_format_str_get(gpointer user_data)
152156
{
153157
gpointer *args = (gpointer *) user_data;
154-
StatsCounterItem *ctr = (StatsCounterItem *) args[0];
155-
GString *str = (GString *) args[1];
156-
g_string_append_printf(str, "%s: %"G_GSIZE_FORMAT"\n", stats_counter_get_name(ctr), stats_counter_get(ctr));
158+
StatsCluster *sc = (StatsCluster *) args[0];
159+
gint type = GPOINTER_TO_INT(args[1]);
160+
StatsCounterItem *ctr = (StatsCounterItem *) args[2];
161+
const gchar *fmt = (const gchar *) args[3];
162+
GString *str = (GString *)args[4];
163+
164+
if (g_str_equal(fmt, "kv"))
165+
g_string_append_printf(str, "%s=%"G_GSIZE_FORMAT"\n", stats_counter_get_name(ctr), stats_counter_get(ctr));
166+
else if (g_str_equal(fmt, "prometheus"))
167+
{
168+
ScratchBuffersMarker marker;
169+
scratch_buffers_mark(&marker);
170+
171+
GString *record = stats_prometheus_format_counter(sc, type, ctr);
172+
if (record == NULL)
173+
return FALSE;
174+
175+
g_string_append(str, record->str);
176+
scratch_buffers_reclaim_marked(marker);
177+
}
178+
else if (g_str_equal(fmt, "csv"))
179+
{
180+
ScratchBuffersMarker marker;
181+
scratch_buffers_mark(&marker);
182+
183+
GString *record = stats_csv_format_counter(sc, type, ctr);
184+
if (record == NULL)
185+
return FALSE;
186+
187+
g_string_append(str, record->str);
188+
scratch_buffers_reclaim_marked(marker);
189+
}
157190

158191
return TRUE;
159192
}
160193

194+
// FIXME: this must be mocked to _ctl_format_name_without_value of stats-query-commands.c instead of duplicating the code
161195
static gboolean
162-
_test_format_log_msg_get_sum(gpointer user_data)
196+
_test_format_list(gpointer user_data)
163197
{
164-
gchar *name, *value;
198+
// Other user_data elements are
199+
// - StatsCluster * = args[0]
200+
// - gint type = args[1];
201+
// - const gchar * fmt = args[3]; gpointer *args = (gpointer *) user_data;
165202
gpointer *args = (gpointer *) user_data;
166-
LogMessage *msg = (LogMessage *) args[0];
167-
gint *sum = (gint *) args[1];
168-
169-
name = "sum";
170-
value = g_strdup_printf("%d", *sum);
171-
172-
log_msg_set_value_by_name(msg, name, value, -1);
173-
174-
g_free(value);
203+
StatsCounterItem *ctr = (StatsCounterItem *) args[2];
204+
GString *str = (GString *)args[4];
175205

206+
g_string_append_printf(str, "%s\n", stats_counter_get_name(ctr));
176207
return TRUE;
177208
}
178209

210+
// FIXME: this must be mocked to _ctl_format_get_sum of stats-query-commands.c instead of duplicating the code
179211
static gboolean
180212
_test_format_str_get_sum(gpointer user_data)
181213
{
182214
gpointer *args = (gpointer *) user_data;
183215
GString *result = (GString *) args[0];
184-
gint *sum = (gint *) args[1];
185-
186-
g_string_printf(result, "%d", *sum);
216+
gint64 *sum = (gint64 *) args[1];
187217

218+
g_string_printf(result, "%" G_GINT64_FORMAT "\n", *sum);
188219
return TRUE;
189220
}
190221

191222
static gboolean
192-
_test_format_list(gpointer user_data)
223+
_test_format_log_msg_get_sum(gpointer user_data)
193224
{
225+
gchar *name, *value;
194226
gpointer *args = (gpointer *) user_data;
195-
StatsCounterItem *ctr = (StatsCounterItem *) args[0];
196-
GString *str = (GString *) args[1];
197-
g_string_append_printf(str, "%s\n", stats_counter_get_name(ctr));
227+
LogMessage *msg = (LogMessage *) args[0];
228+
gint *sum = (gint *) args[1];
229+
230+
name = "sum";
231+
value = g_strdup_printf("%d", *sum);
198232

233+
log_msg_set_value_by_name(msg, name, value, -1);
234+
235+
g_free(value);
199236
return TRUE;
200237
}
201238

@@ -231,7 +268,7 @@ ParameterizedTest(QueryTestCase *test_cases, stats_query, test_stats_query_get_l
231268
const gchar *actual;
232269
LogMessage *msg = log_msg_new_empty();
233270

234-
stats_query_get(test_cases->pattern, _test_format_log_msg_get, (gpointer)msg);
271+
stats_query_get(test_cases->pattern, _test_format_log_msg_get, "kv", (gpointer)msg);
235272
actual = log_msg_get_value_by_name(msg, test_cases->pattern, NULL);
236273
cr_assert_str_eq(actual, test_cases->expected,
237274
"Counter: '%s'; expected number: '%s';, got: '%s';", test_cases->pattern, test_cases->expected, actual);
@@ -240,38 +277,96 @@ ParameterizedTest(QueryTestCase *test_cases, stats_query, test_stats_query_get_l
240277
}
241278

242279

243-
ParameterizedTestParameters(stats_query, test_stats_query_get_str_out)
280+
ParameterizedTestParameters(stats_query, test_stats_query_get_kv_str_out)
244281
{
245282
static QueryTestCase test_cases[] =
246283
{
247-
{"center.*.*", "center.guba.polo.frozen.suppressed: 12\n"},
248-
{"cent*", "center.guba.polo.frozen.suppressed: 12\n"},
249-
{"src.pipe.guba.gumi.disz.*.*", "src.pipe.guba.gumi.disz.frozen.suppressed: 0\n"},
250-
{"src.pipe.guba.gumi.*.*", "src.pipe.guba.gumi.disz.frozen.suppressed: 0\n"},
251-
{"src.pipe.guba.*.*", "src.pipe.guba.gumi.disz.frozen.suppressed: 0\n"},
252-
{"src.pipe.*.*", "src.pipe.guba.gumi.disz.frozen.suppressed: 0\n"},
253-
{"dst.*.*", "dst.tcp.guba.labda.received.dropped: 0\n"},
254-
{"dst.*.*.*", "dst.tcp.guba.labda.received.dropped: 0\n"},
255-
{"dst.*.*.*.*", "dst.tcp.guba.labda.received.dropped: 0\n"},
284+
{"center.*.*", "center.guba.polo.frozen.suppressed=12\n"},
285+
{"cent*", "center.guba.polo.frozen.suppressed=12\n"},
286+
{"src.pipe.guba.gumi.disz.*.*", "src.pipe.guba.gumi.disz.frozen.suppressed=0\n"},
287+
{"src.pipe.guba.gumi.*.*", "src.pipe.guba.gumi.disz.frozen.suppressed=0\n"},
288+
{"src.pipe.guba.*.*", "src.pipe.guba.gumi.disz.frozen.suppressed=0\n"},
289+
{"src.pipe.*.*", "src.pipe.guba.gumi.disz.frozen.suppressed=0\n"},
290+
{"dst.*.*", "dst.tcp.guba.labda.received.dropped=0\n"},
291+
{"dst.*.*.*", "dst.tcp.guba.labda.received.dropped=0\n"},
292+
{"dst.*.*.*.*", "dst.tcp.guba.labda.received.dropped=0\n"},
256293
{"src.java.*.*", ""},
257294
{"src.ja*.*.*", ""},
258-
{"global.id.instance.name", "global.id.instance.name: 0\n"},
295+
{"global.id.instance.name", "global.id.instance.name=0\n"},
259296
};
260297

261298
return cr_make_param_array(QueryTestCase, test_cases, sizeof(test_cases) / sizeof(test_cases[0]));
262299
}
263300

264-
ParameterizedTest(QueryTestCase *test_cases, stats_query, test_stats_query_get_str_out)
301+
ParameterizedTestParameters(stats_query, test_stats_query_get_prometheus_str_out)
302+
{
303+
static QueryTestCase test_cases[] =
304+
{
305+
{"center.*.*", "syslogng_center_suppressed{id=\"guba.polo\",stat_instance=\"frozen\"} 12\n"},
306+
{"cent*", "syslogng_center_suppressed{id=\"guba.polo\",stat_instance=\"frozen\"} 12\n"},
307+
{"src.pipe.guba.gumi.disz.*.*", "syslogng_src_pipe_suppressed{id=\"guba.gumi.disz\",stat_instance=\"frozen\"} 0\n"},
308+
{"src.pipe.guba.gumi.*.*", "syslogng_src_pipe_suppressed{id=\"guba.gumi.disz\",stat_instance=\"frozen\"} 0\n"},
309+
{"src.pipe.guba.*.*", "syslogng_src_pipe_suppressed{id=\"guba.gumi.disz\",stat_instance=\"frozen\"} 0\n"},
310+
{"src.pipe.*.*", "syslogng_src_pipe_suppressed{id=\"guba.gumi.disz\",stat_instance=\"frozen\"} 0\n"},
311+
{"dst.*.*", "syslogng_dst_tcp_dropped{id=\"guba.labda\",stat_instance=\"received\"} 0\n"},
312+
{"dst.*.*.*", "syslogng_dst_tcp_dropped{id=\"guba.labda\",stat_instance=\"received\"} 0\n"},
313+
{"dst.*.*.*.*", "syslogng_dst_tcp_dropped{id=\"guba.labda\",stat_instance=\"received\"} 0\n"},
314+
{"src.java.*.*", ""},
315+
{"src.ja*.*.*", ""},
316+
{"global.id.instance.name", "syslogng_global_id_name 0\n"},
317+
};
318+
319+
return cr_make_param_array(QueryTestCase, test_cases, sizeof(test_cases) / sizeof(test_cases[0]));
320+
}
321+
322+
ParameterizedTestParameters(stats_query, test_stats_query_get_csv_str_out)
323+
{
324+
static QueryTestCase test_cases[] =
325+
{
326+
{"center.*.*", "center;guba.polo;frozen;a;suppressed;12\n"},
327+
{"cent*", "center;guba.polo;frozen;a;suppressed;12\n"},
328+
{"src.pipe.guba.gumi.disz.*.*", "src.pipe;guba.gumi.disz;frozen;a;suppressed;0\n"},
329+
{"src.pipe.guba.gumi.*.*", "src.pipe;guba.gumi.disz;frozen;a;suppressed;0\n"},
330+
{"src.pipe.guba.*.*", "src.pipe;guba.gumi.disz;frozen;a;suppressed;0\n"},
331+
{"src.pipe.*.*", "src.pipe;guba.gumi.disz;frozen;a;suppressed;0\n"},
332+
{"dst.*.*", "dst.tcp;guba.labda;received;a;dropped;0\n"},
333+
{"dst.*.*.*", "dst.tcp;guba.labda;received;a;dropped;0\n"},
334+
{"dst.*.*.*.*", "dst.tcp;guba.labda;received;a;dropped;0\n"},
335+
{"src.java.*.*", ""},
336+
{"src.ja*.*.*", ""},
337+
{"global.id.instance.name", "global;id;instance;a;name;0\n"},
338+
};
339+
340+
return cr_make_param_array(QueryTestCase, test_cases, sizeof(test_cases) / sizeof(test_cases[0]));
341+
}
342+
343+
void run_test_case(QueryTestCase *test_cases, const char *format)
265344
{
266345
GString *result = g_string_new("");
267346

268-
stats_query_get(test_cases->pattern, _test_format_str_get, (gpointer)result);
347+
stats_query_get(test_cases->pattern, _test_format_str_get, format, (gpointer)result);
269348
cr_assert_str_eq(result->str, test_cases->expected,
270-
"Pattern: '%s'; expected key and value: '%s';, got: '%s';", test_cases->pattern, test_cases->expected, result->str);
349+
"Pattern: '%s'; expected key and value: '%s';, got: '%s';",
350+
test_cases->pattern, test_cases->expected, result->str);
271351

272352
g_string_free(result, TRUE);
273353
}
274354

355+
ParameterizedTest(QueryTestCase *test_cases, stats_query, test_stats_query_get_kv_str_out)
356+
{
357+
run_test_case(test_cases, "kv");
358+
}
359+
360+
ParameterizedTest(QueryTestCase *test_cases, stats_query, test_stats_query_get_prometheus_str_out)
361+
{
362+
run_test_case(test_cases, "prometheus");
363+
}
364+
365+
ParameterizedTest(QueryTestCase *test_cases, stats_query, test_stats_query_get_csv_str_out)
366+
{
367+
run_test_case(test_cases, "csv");
368+
}
369+
275370
ParameterizedTestParameters(stats_query, test_stats_query_get_sum_log_msg_out)
276371
{
277372
static QueryTestCase test_cases[] =
@@ -300,13 +395,13 @@ ParameterizedTestParameters(stats_query, test_stats_query_get_sum_str_out)
300395
{
301396
static QueryTestCase test_cases[] =
302397
{
303-
{"*", "12"},
304-
{"center.*.*", "12"},
305-
{"cent*", "12"},
306-
{"src.pipe.guba.gumi.disz.*.*", "0"},
307-
{"*.tcp.guba.*.*", "0"},
308-
{"*.guba.*i.*.*", "0"},
309-
{"*.guba.gum?.*.*", "0"},
398+
{"*", "12\n"},
399+
{"center.*.*", "12\n"},
400+
{"cent*", "12\n"},
401+
{"src.pipe.guba.gumi.disz.*.*", "0\n"},
402+
{"*.tcp.guba.*.*", "0\n"},
403+
{"*.guba.*i.*.*", "0\n"},
404+
{"*.guba.gum?.*.*", "0\n"},
310405
{"src.ja*.*.*", ""},
311406
};
312407

0 commit comments

Comments
 (0)