Skip to content

Commit 61d75da

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

File tree

1 file changed

+143
-49
lines changed

1 file changed

+143
-49
lines changed

lib/stats/tests/test_stats_query.c

+143-49
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,88 @@ _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;
165-
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);
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;
202+
StatsCounterItem *ctr = (StatsCounterItem *) args[2];
203+
GString *str = (GString *)args[4];
175204

205+
g_string_append_printf(str, "%s\n", stats_counter_get_name(ctr));
176206
return TRUE;
177207
}
178208

209+
// FIXME: this must be mocked to _ctl_format_get_sum of stats-query-commands.c instead of duplicating the code
179210
static gboolean
180211
_test_format_str_get_sum(gpointer user_data)
181212
{
182213
gpointer *args = (gpointer *) user_data;
183214
GString *result = (GString *) args[0];
184-
gint *sum = (gint *) args[1];
185-
186-
g_string_printf(result, "%d", *sum);
215+
gint64 *sum = (gint64 *) args[1];
187216

217+
g_string_printf(result, "%" G_GINT64_FORMAT "\n", *sum);
188218
return TRUE;
189219
}
190220

191221
static gboolean
192-
_test_format_list(gpointer user_data)
222+
_test_format_log_msg_get_sum(gpointer user_data)
193223
{
224+
gchar *name, *value;
194225
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));
226+
LogMessage *msg = (LogMessage *) args[0];
227+
gint *sum = (gint *) args[1];
228+
229+
name = "sum";
230+
value = g_strdup_printf("%d", *sum);
231+
232+
log_msg_set_value_by_name(msg, name, value, -1);
198233

234+
g_free(value);
199235
return TRUE;
200236
}
201237

@@ -231,7 +267,7 @@ ParameterizedTest(QueryTestCase *test_cases, stats_query, test_stats_query_get_l
231267
const gchar *actual;
232268
LogMessage *msg = log_msg_new_empty();
233269

234-
stats_query_get(test_cases->pattern, _test_format_log_msg_get, (gpointer)msg);
270+
stats_query_get(test_cases->pattern, _test_format_log_msg_get, "kv", (gpointer)msg);
235271
actual = log_msg_get_value_by_name(msg, test_cases->pattern, NULL);
236272
cr_assert_str_eq(actual, test_cases->expected,
237273
"Counter: '%s'; expected number: '%s';, got: '%s';", test_cases->pattern, test_cases->expected, actual);
@@ -240,38 +276,96 @@ ParameterizedTest(QueryTestCase *test_cases, stats_query, test_stats_query_get_l
240276
}
241277

242278

243-
ParameterizedTestParameters(stats_query, test_stats_query_get_str_out)
279+
ParameterizedTestParameters(stats_query, test_stats_query_get_kv_str_out)
280+
{
281+
static QueryTestCase test_cases[] =
282+
{
283+
{"center.*.*", "center.guba.polo.frozen.suppressed=12\n"},
284+
{"cent*", "center.guba.polo.frozen.suppressed=12\n"},
285+
{"src.pipe.guba.gumi.disz.*.*", "src.pipe.guba.gumi.disz.frozen.suppressed=0\n"},
286+
{"src.pipe.guba.gumi.*.*", "src.pipe.guba.gumi.disz.frozen.suppressed=0\n"},
287+
{"src.pipe.guba.*.*", "src.pipe.guba.gumi.disz.frozen.suppressed=0\n"},
288+
{"src.pipe.*.*", "src.pipe.guba.gumi.disz.frozen.suppressed=0\n"},
289+
{"dst.*.*", "dst.tcp.guba.labda.received.dropped=0\n"},
290+
{"dst.*.*.*", "dst.tcp.guba.labda.received.dropped=0\n"},
291+
{"dst.*.*.*.*", "dst.tcp.guba.labda.received.dropped=0\n"},
292+
{"src.java.*.*", ""},
293+
{"src.ja*.*.*", ""},
294+
{"global.id.instance.name", "global.id.instance.name=0\n"},
295+
};
296+
297+
return cr_make_param_array(QueryTestCase, test_cases, sizeof(test_cases) / sizeof(test_cases[0]));
298+
}
299+
300+
ParameterizedTestParameters(stats_query, test_stats_query_get_prometheus_str_out)
301+
{
302+
static QueryTestCase test_cases[] =
303+
{
304+
{"center.*.*", "syslogng_center_suppressed{id=\"guba.polo\",stat_instance=\"frozen\"} 12\n"},
305+
{"cent*", "syslogng_center_suppressed{id=\"guba.polo\",stat_instance=\"frozen\"} 12\n"},
306+
{"src.pipe.guba.gumi.disz.*.*", "syslogng_src_pipe_suppressed{id=\"guba.gumi.disz\",stat_instance=\"frozen\"} 0\n"},
307+
{"src.pipe.guba.gumi.*.*", "syslogng_src_pipe_suppressed{id=\"guba.gumi.disz\",stat_instance=\"frozen\"} 0\n"},
308+
{"src.pipe.guba.*.*", "syslogng_src_pipe_suppressed{id=\"guba.gumi.disz\",stat_instance=\"frozen\"} 0\n"},
309+
{"src.pipe.*.*", "syslogng_src_pipe_suppressed{id=\"guba.gumi.disz\",stat_instance=\"frozen\"} 0\n"},
310+
{"dst.*.*", "syslogng_dst_tcp_dropped{id=\"guba.labda\",stat_instance=\"received\"} 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+
{"src.java.*.*", ""},
314+
{"src.ja*.*.*", ""},
315+
{"global.id.instance.name", "syslogng_global_id_name 0\n"},
316+
};
317+
318+
return cr_make_param_array(QueryTestCase, test_cases, sizeof(test_cases) / sizeof(test_cases[0]));
319+
}
320+
321+
ParameterizedTestParameters(stats_query, test_stats_query_get_csv_str_out)
244322
{
245323
static QueryTestCase test_cases[] =
246324
{
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"},
325+
{"center.*.*", "center;guba.polo;frozen;a;suppressed;12\n"},
326+
{"cent*", "center;guba.polo;frozen;a;suppressed;12\n"},
327+
{"src.pipe.guba.gumi.disz.*.*", "src.pipe;guba.gumi.disz;frozen;a;suppressed;0\n"},
328+
{"src.pipe.guba.gumi.*.*", "src.pipe;guba.gumi.disz;frozen;a;suppressed;0\n"},
329+
{"src.pipe.guba.*.*", "src.pipe;guba.gumi.disz;frozen;a;suppressed;0\n"},
330+
{"src.pipe.*.*", "src.pipe;guba.gumi.disz;frozen;a;suppressed;0\n"},
331+
{"dst.*.*", "dst.tcp;guba.labda;received;a;dropped;0\n"},
332+
{"dst.*.*.*", "dst.tcp;guba.labda;received;a;dropped;0\n"},
333+
{"dst.*.*.*.*", "dst.tcp;guba.labda;received;a;dropped;0\n"},
256334
{"src.java.*.*", ""},
257335
{"src.ja*.*.*", ""},
258-
{"global.id.instance.name", "global.id.instance.name: 0\n"},
336+
{"global.id.instance.name", "global;id;instance;a;name;0\n"},
259337
};
260338

261339
return cr_make_param_array(QueryTestCase, test_cases, sizeof(test_cases) / sizeof(test_cases[0]));
262340
}
263341

264-
ParameterizedTest(QueryTestCase *test_cases, stats_query, test_stats_query_get_str_out)
342+
void run_test_case(QueryTestCase *test_cases, const char *format)
265343
{
266344
GString *result = g_string_new("");
267345

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

272351
g_string_free(result, TRUE);
273352
}
274353

354+
ParameterizedTest(QueryTestCase *test_cases, stats_query, test_stats_query_get_kv_str_out)
355+
{
356+
run_test_case(test_cases, "kv");
357+
}
358+
359+
ParameterizedTest(QueryTestCase *test_cases, stats_query, test_stats_query_get_prometheus_str_out)
360+
{
361+
run_test_case(test_cases, "prometheus");
362+
}
363+
364+
ParameterizedTest(QueryTestCase *test_cases, stats_query, test_stats_query_get_csv_str_out)
365+
{
366+
run_test_case(test_cases, "csv");
367+
}
368+
275369
ParameterizedTestParameters(stats_query, test_stats_query_get_sum_log_msg_out)
276370
{
277371
static QueryTestCase test_cases[] =
@@ -300,13 +394,13 @@ ParameterizedTestParameters(stats_query, test_stats_query_get_sum_str_out)
300394
{
301395
static QueryTestCase test_cases[] =
302396
{
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"},
397+
{"*", "12\n"},
398+
{"center.*.*", "12\n"},
399+
{"cent*", "12\n"},
400+
{"src.pipe.guba.gumi.disz.*.*", "0\n"},
401+
{"*.tcp.guba.*.*", "0\n"},
402+
{"*.guba.*i.*.*", "0\n"},
403+
{"*.guba.gum?.*.*", "0\n"},
310404
{"src.ja*.*.*", ""},
311405
};
312406

0 commit comments

Comments
 (0)