Skip to content

Commit 581c412

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

File tree

1 file changed

+143
-46
lines changed

1 file changed

+143
-46
lines changed

lib/stats/tests/test_stats_query.c

+143-46
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,54 +150,90 @@ _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 duplicting 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 duplicting 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;
165198
gpointer *args = (gpointer *) user_data;
166-
LogMessage *msg = (LogMessage *) args[0];
167-
gint *sum = (gint *) args[1];
199+
//StatsCluster *sc = (StatsCluster *) args[0];
200+
//gint type = (gint) args[1];
201+
StatsCounterItem *ctr = (StatsCounterItem *) args[2];
202+
//const gchar *fmt = (const gchar *) args[3];
203+
GString *str = (GString *)args[4];
168204

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);
205+
g_string_append_printf(str, "%s\n", stats_counter_get_name(ctr));
175206

176207
return TRUE;
177208
}
178209

210+
// FIXME: this must be mocked to _ctl_format_get_sum of stats-query-commands.c instead of duplicting 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];
216+
gint64 *sum = (gint64 *) args[1];
185217

186-
g_string_printf(result, "%d", *sum);
218+
g_string_printf(result, "%" G_GINT64_FORMAT "\n", *sum);
187219

188220
return TRUE;
189221
}
190222

191223
static gboolean
192-
_test_format_list(gpointer user_data)
224+
_test_format_log_msg_get_sum(gpointer user_data)
193225
{
226+
gchar *name, *value;
194227
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));
228+
LogMessage *msg = (LogMessage *) args[0];
229+
gint *sum = (gint *) args[1];
230+
231+
name = "sum";
232+
value = g_strdup_printf("%d", *sum);
233+
234+
log_msg_set_value_by_name(msg, name, value, -1);
235+
236+
g_free(value);
198237

199238
return TRUE;
200239
}
@@ -231,7 +270,7 @@ ParameterizedTest(QueryTestCase *test_cases, stats_query, test_stats_query_get_l
231270
const gchar *actual;
232271
LogMessage *msg = log_msg_new_empty();
233272

234-
stats_query_get(test_cases->pattern, _test_format_log_msg_get, (gpointer)msg);
273+
stats_query_get(test_cases->pattern, _test_format_log_msg_get, "kv", (gpointer)msg);
235274
actual = log_msg_get_value_by_name(msg, test_cases->pattern, NULL);
236275
cr_assert_str_eq(actual, test_cases->expected,
237276
"Counter: '%s'; expected number: '%s';, got: '%s';", test_cases->pattern, test_cases->expected, actual);
@@ -240,38 +279,96 @@ ParameterizedTest(QueryTestCase *test_cases, stats_query, test_stats_query_get_l
240279
}
241280

242281

243-
ParameterizedTestParameters(stats_query, test_stats_query_get_str_out)
282+
ParameterizedTestParameters(stats_query, test_stats_query_get_kv_str_out)
244283
{
245284
static QueryTestCase test_cases[] =
246285
{
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"},
286+
{"center.*.*", "center.guba.polo.frozen.suppressed=12\n"},
287+
{"cent*", "center.guba.polo.frozen.suppressed=12\n"},
288+
{"src.pipe.guba.gumi.disz.*.*", "src.pipe.guba.gumi.disz.frozen.suppressed=0\n"},
289+
{"src.pipe.guba.gumi.*.*", "src.pipe.guba.gumi.disz.frozen.suppressed=0\n"},
290+
{"src.pipe.guba.*.*", "src.pipe.guba.gumi.disz.frozen.suppressed=0\n"},
291+
{"src.pipe.*.*", "src.pipe.guba.gumi.disz.frozen.suppressed=0\n"},
292+
{"dst.*.*", "dst.tcp.guba.labda.received.dropped=0\n"},
293+
{"dst.*.*.*", "dst.tcp.guba.labda.received.dropped=0\n"},
294+
{"dst.*.*.*.*", "dst.tcp.guba.labda.received.dropped=0\n"},
256295
{"src.java.*.*", ""},
257296
{"src.ja*.*.*", ""},
258-
{"global.id.instance.name", "global.id.instance.name: 0\n"},
297+
{"global.id.instance.name", "global.id.instance.name=0\n"},
259298
};
260299

261300
return cr_make_param_array(QueryTestCase, test_cases, sizeof(test_cases) / sizeof(test_cases[0]));
262301
}
263302

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

268-
stats_query_get(test_cases->pattern, _test_format_str_get, (gpointer)result);
349+
stats_query_get(test_cases->pattern, _test_format_str_get, format, (gpointer)result);
269350
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);
351+
"Pattern: '%s'; expected key and value: '%s';, got: '%s';",
352+
test_cases->pattern, test_cases->expected, result->str);
271353

272354
g_string_free(result, TRUE);
273355
}
274356

357+
ParameterizedTest(QueryTestCase *test_cases, stats_query, test_stats_query_get_kv_str_out)
358+
{
359+
run_test_case(test_cases, "kv");
360+
}
361+
362+
ParameterizedTest(QueryTestCase *test_cases, stats_query, test_stats_query_get_prometheus_str_out)
363+
{
364+
run_test_case(test_cases, "prometheus");
365+
}
366+
367+
ParameterizedTest(QueryTestCase *test_cases, stats_query, test_stats_query_get_csv_str_out)
368+
{
369+
run_test_case(test_cases, "csv");
370+
}
371+
275372
ParameterizedTestParameters(stats_query, test_stats_query_get_sum_log_msg_out)
276373
{
277374
static QueryTestCase test_cases[] =
@@ -300,13 +397,13 @@ ParameterizedTestParameters(stats_query, test_stats_query_get_sum_str_out)
300397
{
301398
static QueryTestCase test_cases[] =
302399
{
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"},
400+
{"*", "12\n"},
401+
{"center.*.*", "12\n"},
402+
{"cent*", "12\n"},
403+
{"src.pipe.guba.gumi.disz.*.*", "0\n"},
404+
{"*.tcp.guba.*.*", "0\n"},
405+
{"*.guba.*i.*.*", "0\n"},
406+
{"*.guba.gum?.*.*", "0\n"},
310407
{"src.ja*.*.*", ""},
311408
};
312409

0 commit comments

Comments
 (0)