Update exporting unit tests (#13706)
Vladimir Kobal committed
Sep 26, 2022 at 10:24 UTC
a1758307f9924a2c8a942aae258ff26a77329cae
4 files changed
+211
-69
collectors/cgroups.plugin/tests/test_doubles.c
+4
-3
@@ -101,7 +101,7 @@ collected_number rrddim_set_by_pointer(RRDSET *st, RRDDIM *rd, collected_number
101
return 0;
102
}
103
104
-RRDSETVAR *rrdsetvar_custom_chart_variable_create(RRDSET *st, const char *name)
104
+const RRDSETVAR_ACQUIRED *rrdsetvar_custom_chart_variable_add_and_acquire(RRDSET *st, const char *name)
105
{
106
UNUSED(st);
107
UNUSED(name);
@@ -109,9 +109,10 @@ RRDSETVAR *rrdsetvar_custom_chart_variable_create(RRDSET *st, const char *name)
109
return NULL;
110
}
111
112
-void rrdsetvar_custom_chart_variable_set(RRDSETVAR *rs, NETDATA_DOUBLE value)
112
+void rrdsetvar_custom_chart_variable_set(RRDSET *st, const RRDSETVAR_ACQUIRED *rsa, NETDATA_DOUBLE value)
113
{
114
- UNUSED(rs);
114
+ UNUSED(st);
115
+ UNUSED(rsa);
116
UNUSED(value);
117
}
118
exporting/tests/exporting_fixtures.c
+58
-27
@@ -33,31 +33,13 @@ int teardown_configured_engine(void **state)
33
return 0;
34
}
35
36
-int setup_rrdhost()
37
-{
38
- localhost = calloc(1, sizeof(RRDHOST));
39
-
40
- localhost->rrd_update_every = 1;
41
-
42
- localhost->tags = string_strdupz("TAG1=VALUE1 TAG2=VALUE2");
43
-
44
- localhost->rrdlabels = rrdlabels_create();
45
- rrdlabels_add(localhost->rrdlabels, "key1", "value1", RRDLABEL_SRC_CONFIG);
46
- rrdlabels_add(localhost->rrdlabels, "key2", "value2", RRDLABEL_SRC_CONFIG);
36
+static void rrddim_insert_callback(const DICTIONARY_ITEM *item __maybe_unused, void *rrddim, void *st) {
37
+ RRDDIM *rd = rrddim;
38
48
- localhost->rrdset_root = calloc(1, sizeof(RRDSET));
49
- RRDSET *st = localhost->rrdset_root;
50
- st->rrdhost = localhost;
51
- st->id = string_strdupz("chart_id");
52
- st->name = string_strdupz("chart_name");
53
- st->rrd_memory_mode |= RRD_MEMORY_MODE_SAVE;
54
- st->update_every = 1;
55
-
56
- localhost->rrdset_root->dimensions = calloc(1, sizeof(RRDDIM));
57
- RRDDIM *rd = localhost->rrdset_root->dimensions;
58
- rd->rrdset = st;
39
rd->id = string_strdupz("dimension_id");
40
rd->name = string_strdupz("dimension_name");
41
+
42
+ rd->rrdset = (RRDSET *)st;
43
rd->last_collected_value = 123000321;
44
rd->last_collected_time.tv_sec = 15051;
45
rd->collections_counter++;
@@ -70,25 +52,74 @@ int setup_rrdhost()
52
rd->tiers[0]->query_ops.is_finished = __mock_rrddim_query_is_finished;
53
rd->tiers[0]->query_ops.next_metric = __mock_rrddim_query_next_metric;
54
rd->tiers[0]->query_ops.finalize = __mock_rrddim_query_finalize;
55
+}
56
+
57
+static void rrdset_insert_callback(const DICTIONARY_ITEM *item __maybe_unused, void *rrdset, void *constructor_data __maybe_unused) {
58
+ RRDHOST *host = localhost;
59
+ RRDSET *st = rrdset;
60
+
61
+ // const char *chart_full_id = dictionary_acquired_item_name(item);
62
+
63
+ st->id = string_strdupz("chart_id");
64
+ st->name = string_strdupz("chart_name");
65
+
66
+ st->update_every = 1;
67
+ st->rrd_memory_mode = RRD_MEMORY_MODE_SAVE;
68
+
69
+ st->rrdhost = host;
70
+
71
+ st->rrddim_root_index = dictionary_create(DICT_OPTION_DONT_OVERWRITE_VALUE);
72
+
73
+ dictionary_register_insert_callback(st->rrddim_root_index, rrddim_insert_callback, NULL);
74
+}
75
+
76
+int setup_rrdhost()
77
+{
78
+ localhost = calloc(1, sizeof(RRDHOST));
79
+
80
+ localhost->rrd_update_every = 1;
81
+
82
+ localhost->tags = string_strdupz("TAG1=VALUE1 TAG2=VALUE2");
83
+
84
+ localhost->rrdlabels = rrdlabels_create();
85
+ rrdlabels_add(localhost->rrdlabels, "key1", "value1", RRDLABEL_SRC_CONFIG);
86
+ rrdlabels_add(localhost->rrdlabels, "key2", "value2", RRDLABEL_SRC_CONFIG);
87
+
88
+ localhost->rrdset_root_index = dictionary_create(DICT_OPTION_DONT_OVERWRITE_VALUE);
89
+ dictionary_register_insert_callback(localhost->rrdset_root_index, rrdset_insert_callback, NULL);
90
+ RRDSET *st = dictionary_set_advanced(localhost->rrdset_root_index, "chart_id", -1, NULL, sizeof(RRDSET), NULL);
91
+
92
+ st->rrddim_root_index = dictionary_create(DICT_OPTION_DONT_OVERWRITE_VALUE);
93
+ dictionary_register_insert_callback(st->rrddim_root_index, rrddim_insert_callback, NULL);
94
+ st->dimensions = dictionary_set_advanced(st->rrddim_root_index, "dimension_id", -1, NULL, sizeof(RRDDIM), st);
95
96
return 0;
97
}
98
99
int teardown_rrdhost()
100
{
79
- RRDDIM *rd = localhost->rrdset_root->dimensions;
80
- string_freez(rd->name);
101
+ RRDSET *st;
102
+ rrdset_foreach_read(st, localhost);
103
+ break;
104
+ rrdset_foreach_done(st);
105
+
106
+ RRDDIM *rd;
107
+ rrddim_foreach_read(rd, st);
108
+ break;
109
+ rrddim_foreach_done(rd);
110
+
111
string_freez(rd->id);
112
+ string_freez(rd->name);
113
free(rd->tiers[0]);
83
- free(rd);
114
85
- RRDSET *st = localhost->rrdset_root;
115
+ string_freez(st->id);
116
string_freez(st->name);
87
- free(st);
117
+ dictionary_destroy(st->rrddim_root_index);
118
119
rrdlabels_destroy(localhost->rrdlabels);
120
121
string_freez(localhost->tags);
122
+ dictionary_destroy(localhost->rrdset_root_index);
123
free(localhost);
124
125
return 0;
exporting/tests/netdata_doubles.c
+7
-10
@@ -177,14 +177,6 @@ const char *rrd_memory_mode_name(RRD_MEMORY_MODE id)
177
return RRD_MEMORY_MODE_NONE_NAME;
178
}
179
180
-int foreach_host_variable_callback(RRDHOST *host, int (*callback)(RRDVAR *rv, void *data), void *data)
181
-{
182
- (void)host;
183
- (void)callback;
184
- (void)data;
185
- return 0;
186
-}
187
-
180
void rrdset_update_heterogeneous_flag(RRDSET *st)
181
{
182
(void)st;
@@ -247,13 +239,18 @@ void rrdcalc_update_rrdlabels(RRDSET *st)
239
(void)st;
240
}
241
250
-void rrdpush_sender_send_this_host_variable_now(RRDHOST *host, RRDVAR *rv)
242
+void rrdpush_sender_send_this_host_variable_now(RRDHOST *host, const RRDVAR_ACQUIRED *rva)
243
{
244
(void)host;
253
- (void)rv;
245
+ (void)rva;
246
}
247
248
void db_execute(const char *cmd)
249
{
250
(void)cmd;
251
}
252
+
253
+DICTIONARY *rrdfamily_rrdvars_dict(const RRDFAMILY_ACQUIRED *rfa) {
254
+ (void)rfa;
255
+ return NULL;
256
+}
exporting/tests/test_exporting_engine.c
+142
-29
@@ -257,7 +257,10 @@ static void test_rrdset_is_exportable(void **state)
257
{
258
struct engine *engine = *state;
259
struct instance *instance = engine->instance_root;
260
- RRDSET *st = localhost->rrdset_root;
260
+ RRDSET *st;
261
+ rrdset_foreach_read(st, localhost);
262
+ break;
263
+ rrdset_foreach_done(st);
264
265
assert_ptr_equal(st->exporting_flags, NULL);
266
@@ -271,7 +274,10 @@ static void test_false_rrdset_is_exportable(void **state)
274
{
275
struct engine *engine = *state;
276
struct instance *instance = engine->instance_root;
274
- RRDSET *st = localhost->rrdset_root;
277
+ RRDSET *st;
278
+ rrdset_foreach_read(st, localhost);
279
+ break;
280
+ rrdset_foreach_done(st);
281
282
simple_pattern_free(instance->config.charts_pattern);
283
instance->config.charts_pattern = simple_pattern_create("!*", NULL, SIMPLE_PATTERN_EXACT);
@@ -288,7 +294,17 @@ static void test_exporting_calculate_value_from_stored_data(void **state)
294
{
295
struct engine *engine = *state;
296
struct instance *instance = engine->instance_root;
291
- RRDDIM *rd = localhost->rrdset_root->dimensions;
297
+
298
+ RRDSET *st;
299
+ rrdset_foreach_read(st, localhost);
300
+ break;
301
+ rrdset_foreach_done(st);
302
+
303
+ RRDDIM *rd;
304
+ rrddim_foreach_read(rd, st);
305
+ break;
306
+ rrddim_foreach_done(rd);
307
+
308
time_t timestamp;
309
310
instance->after = 3;
@@ -348,7 +364,11 @@ static void test_prepare_buffers(void **state)
364
expect_value(__mock_start_host_formatting, host, localhost);
365
will_return(__mock_start_host_formatting, 0);
366
351
- RRDSET *st = localhost->rrdset_root;
367
+ RRDSET *st;
368
+ rrdset_foreach_read(st, localhost);
369
+ break;
370
+ rrdset_foreach_done(st);
371
+
372
expect_function_call(__wrap_rrdset_is_exportable);
373
expect_value(__wrap_rrdset_is_exportable, instance, instance);
374
expect_value(__wrap_rrdset_is_exportable, st, st);
@@ -359,7 +379,10 @@ static void test_prepare_buffers(void **state)
379
expect_value(__mock_start_chart_formatting, st, st);
380
will_return(__mock_start_chart_formatting, 0);
381
362
- RRDDIM *rd = localhost->rrdset_root->dimensions;
382
+ RRDDIM *rd;
383
+ rrddim_foreach_read(rd, st);
384
+ break;
385
+ rrddim_foreach_done(rd);
386
expect_function_call(__mock_metric_formatting);
387
expect_value(__mock_metric_formatting, instance, instance);
388
expect_value(__mock_metric_formatting, rd, rd);
@@ -412,7 +435,15 @@ static void test_format_dimension_collected_graphite_plaintext(void **state)
435
{
436
struct engine *engine = *state;
437
415
- RRDDIM *rd = localhost->rrdset_root->dimensions;
438
+ RRDSET *st;
439
+ rrdset_foreach_read(st, localhost);
440
+ break;
441
+ rrdset_foreach_done(st);
442
+
443
+ RRDDIM *rd;
444
+ rrddim_foreach_read(rd, st);
445
+ break;
446
+ rrddim_foreach_done(rd);
447
assert_int_equal(format_dimension_collected_graphite_plaintext(engine->instance_root, rd), 0);
448
assert_string_equal(
449
buffer_tostring(engine->instance_root->buffer),
@@ -426,7 +457,15 @@ static void test_format_dimension_stored_graphite_plaintext(void **state)
457
expect_function_call(__wrap_exporting_calculate_value_from_stored_data);
458
will_return(__wrap_exporting_calculate_value_from_stored_data, pack_storage_number(27, SN_DEFAULT_FLAGS));
459
429
- RRDDIM *rd = localhost->rrdset_root->dimensions;
460
+ RRDSET *st;
461
+ rrdset_foreach_read(st, localhost);
462
+ break;
463
+ rrdset_foreach_done(st);
464
+
465
+ RRDDIM *rd;
466
+ rrddim_foreach_read(rd, st);
467
+ break;
468
+ rrddim_foreach_done(rd);
469
assert_int_equal(format_dimension_stored_graphite_plaintext(engine->instance_root, rd), 0);
470
assert_string_equal(
471
buffer_tostring(engine->instance_root->buffer),
@@ -437,7 +476,15 @@ static void test_format_dimension_collected_json_plaintext(void **state)
476
{
477
struct engine *engine = *state;
478
440
- RRDDIM *rd = localhost->rrdset_root->dimensions;
479
+ RRDSET *st;
480
+ rrdset_foreach_read(st, localhost);
481
+ break;
482
+ rrdset_foreach_done(st);
483
+
484
+ RRDDIM *rd;
485
+ rrddim_foreach_read(rd, st);
486
+ break;
487
+ rrddim_foreach_done(rd);
488
assert_int_equal(format_dimension_collected_json_plaintext(engine->instance_root, rd), 0);
489
assert_string_equal(
490
buffer_tostring(engine->instance_root->buffer),
@@ -454,7 +501,15 @@ static void test_format_dimension_stored_json_plaintext(void **state)
501
expect_function_call(__wrap_exporting_calculate_value_from_stored_data);
502
will_return(__wrap_exporting_calculate_value_from_stored_data, pack_storage_number(27, SN_DEFAULT_FLAGS));
503
457
- RRDDIM *rd = localhost->rrdset_root->dimensions;
504
+ RRDSET *st;
505
+ rrdset_foreach_read(st, localhost);
506
+ break;
507
+ rrdset_foreach_done(st);
508
+
509
+ RRDDIM *rd;
510
+ rrddim_foreach_read(rd, st);
511
+ break;
512
+ rrddim_foreach_done(rd);
513
assert_int_equal(format_dimension_stored_json_plaintext(engine->instance_root, rd), 0);
514
assert_string_equal(
515
buffer_tostring(engine->instance_root->buffer),
@@ -468,7 +523,15 @@ static void test_format_dimension_collected_opentsdb_telnet(void **state)
523
{
524
struct engine *engine = *state;
525
471
- RRDDIM *rd = localhost->rrdset_root->dimensions;
526
+ RRDSET *st;
527
+ rrdset_foreach_read(st, localhost);
528
+ break;
529
+ rrdset_foreach_done(st);
530
+
531
+ RRDDIM *rd;
532
+ rrddim_foreach_read(rd, st);
533
+ break;
534
+ rrddim_foreach_done(rd);
535
assert_int_equal(format_dimension_collected_opentsdb_telnet(engine->instance_root, rd), 0);
536
assert_string_equal(
537
buffer_tostring(engine->instance_root->buffer),
@@ -482,7 +545,15 @@ static void test_format_dimension_stored_opentsdb_telnet(void **state)
545
expect_function_call(__wrap_exporting_calculate_value_from_stored_data);
546
will_return(__wrap_exporting_calculate_value_from_stored_data, pack_storage_number(27, SN_DEFAULT_FLAGS));
547
485
- RRDDIM *rd = localhost->rrdset_root->dimensions;
548
+ RRDSET *st;
549
+ rrdset_foreach_read(st, localhost);
550
+ break;
551
+ rrdset_foreach_done(st);
552
+
553
+ RRDDIM *rd;
554
+ rrddim_foreach_read(rd, st);
555
+ break;
556
+ rrddim_foreach_done(rd);
557
assert_int_equal(format_dimension_stored_opentsdb_telnet(engine->instance_root, rd), 0);
558
assert_string_equal(
559
buffer_tostring(engine->instance_root->buffer),
@@ -493,7 +564,15 @@ static void test_format_dimension_collected_opentsdb_http(void **state)
564
{
565
struct engine *engine = *state;
566
496
- RRDDIM *rd = localhost->rrdset_root->dimensions;
567
+ RRDSET *st;
568
+ rrdset_foreach_read(st, localhost);
569
+ break;
570
+ rrdset_foreach_done(st);
571
+
572
+ RRDDIM *rd;
573
+ rrddim_foreach_read(rd, st);
574
+ break;
575
+ rrddim_foreach_done(rd);
576
assert_int_equal(format_dimension_collected_opentsdb_http(engine->instance_root, rd), 0);
577
assert_string_equal(
578
buffer_tostring(engine->instance_root->buffer),
@@ -510,7 +589,15 @@ static void test_format_dimension_stored_opentsdb_http(void **state)
589
expect_function_call(__wrap_exporting_calculate_value_from_stored_data);
590
will_return(__wrap_exporting_calculate_value_from_stored_data, pack_storage_number(27, SN_DEFAULT_FLAGS));
591
513
- RRDDIM *rd = localhost->rrdset_root->dimensions;
592
+ RRDSET *st;
593
+ rrdset_foreach_read(st, localhost);
594
+ break;
595
+ rrdset_foreach_done(st);
596
+
597
+ RRDDIM *rd;
598
+ rrddim_foreach_read(rd, st);
599
+ break;
600
+ rrddim_foreach_done(rd);
601
assert_int_equal(format_dimension_stored_opentsdb_http(engine->instance_root, rd), 0);
602
assert_string_equal(
603
buffer_tostring(engine->instance_root->buffer),
@@ -986,21 +1073,26 @@ static void test_can_send_rrdset(void **state)
1073
{
1074
(void)*state;
1075
989
- assert_int_equal(can_send_rrdset(prometheus_exporter_instance, localhost->rrdset_root, NULL), 1);
1076
+ RRDSET *st;
1077
+ rrdset_foreach_read(st, localhost);
1078
+ break;
1079
+ rrdset_foreach_done(st);
1080
+
1081
+ assert_int_equal(can_send_rrdset(prometheus_exporter_instance, st, NULL), 1);
1082
991
- rrdset_flag_set(localhost->rrdset_root, RRDSET_FLAG_EXPORTING_IGNORE);
992
- assert_int_equal(can_send_rrdset(prometheus_exporter_instance, localhost->rrdset_root, NULL), 0);
993
- rrdset_flag_clear(localhost->rrdset_root, RRDSET_FLAG_EXPORTING_IGNORE);
1083
+ rrdset_flag_set(st, RRDSET_FLAG_EXPORTING_IGNORE);
1084
+ assert_int_equal(can_send_rrdset(prometheus_exporter_instance, st, NULL), 0);
1085
+ rrdset_flag_clear(st, RRDSET_FLAG_EXPORTING_IGNORE);
1086
1087
// TODO: test with a denying simple pattern
1088
997
- rrdset_flag_set(localhost->rrdset_root, RRDSET_FLAG_OBSOLETE);
998
- assert_int_equal(can_send_rrdset(prometheus_exporter_instance, localhost->rrdset_root, NULL), 0);
999
- rrdset_flag_clear(localhost->rrdset_root, RRDSET_FLAG_OBSOLETE);
1089
+ rrdset_flag_set(st, RRDSET_FLAG_OBSOLETE);
1090
+ assert_int_equal(can_send_rrdset(prometheus_exporter_instance, st, NULL), 0);
1091
+ rrdset_flag_clear(st, RRDSET_FLAG_OBSOLETE);
1092
1001
- localhost->rrdset_root->rrd_memory_mode = RRD_MEMORY_MODE_NONE;
1093
+ st->rrd_memory_mode = RRD_MEMORY_MODE_NONE;
1094
prometheus_exporter_instance->config.options |= EXPORTING_SOURCE_DATA_AVERAGE;
1003
- assert_int_equal(can_send_rrdset(prometheus_exporter_instance, localhost->rrdset_root, NULL), 0);
1095
+ assert_int_equal(can_send_rrdset(prometheus_exporter_instance, st, NULL), 0);
1096
}
1097
1098
static void test_prometheus_name_copy(void **state)
@@ -1055,9 +1147,14 @@ static void rrd_stats_api_v1_charts_allmetrics_prometheus(void **state)
1147
1148
BUFFER *buffer = buffer_create(0);
1149
1150
+ RRDSET *st;
1151
+ rrdset_foreach_read(st, localhost);
1152
+ break;
1153
+ rrdset_foreach_done(st);
1154
+
1155
localhost->hostname = string_strdupz("test_hostname");
1059
- localhost->rrdset_root->family = string_strdupz("test_family");
1060
- localhost->rrdset_root->context = string_strdupz("test_context");
1156
+ st->family = string_strdupz("test_family");
1157
+ st->context = string_strdupz("test_context");
1158
1159
expect_function_call(__wrap_now_realtime_sec);
1160
will_return(__wrap_now_realtime_sec, 2);
@@ -1104,8 +1201,8 @@ static void rrd_stats_api_v1_charts_allmetrics_prometheus(void **state)
1201
"netdata_info{instance=\"test_hostname\",application=\"\",version=\"\",key1=\"value1\",key2=\"value2\"} 1\n"
1202
"test_prefix_test_context{chart=\"chart_id\",family=\"test_family\",dimension=\"dimension_id\",instance=\"test_hostname\"} 690565856.0000000\n");
1203
1107
- free(localhost->rrdset_root->context);
1108
- free(localhost->rrdset_root->family);
1204
+ free(st->context);
1205
+ free(st->family);
1206
free(localhost->hostname);
1207
buffer_free(buffer);
1208
}
@@ -1249,7 +1346,15 @@ static void test_format_dimension_prometheus_remote_write(void **state)
1346
simple_connector_data->connector_specific_data = (void *)connector_specific_data;
1347
connector_specific_data->write_request = (void *)0xff;
1348
1252
- RRDDIM *rd = localhost->rrdset_root->dimensions;
1349
+ RRDSET *st;
1350
+ rrdset_foreach_read(st, localhost);
1351
+ break;
1352
+ rrdset_foreach_done(st);
1353
+
1354
+ RRDDIM *rd;
1355
+ rrddim_foreach_read(rd, st);
1356
+ break;
1357
+ rrddim_foreach_done(rd);
1358
1359
expect_function_call(__wrap_exporting_calculate_value_from_stored_data);
1360
will_return(__wrap_exporting_calculate_value_from_stored_data, pack_storage_number(27, SN_DEFAULT_FLAGS));
@@ -1428,7 +1533,11 @@ static void test_aws_kinesis_connector_worker(void **state)
1533
expect_value(__wrap_rrdhost_is_exportable, host, localhost);
1534
will_return(__wrap_rrdhost_is_exportable, 1);
1535
1431
- RRDSET *st = localhost->rrdset_root;
1536
+ RRDSET *st;
1537
+ rrdset_foreach_read(st, localhost);
1538
+ break;
1539
+ rrdset_foreach_done(st);
1540
+
1541
expect_function_call(__wrap_rrdset_is_exportable);
1542
expect_value(__wrap_rrdset_is_exportable, instance, instance);
1543
expect_value(__wrap_rrdset_is_exportable, st, st);
@@ -1563,7 +1672,11 @@ static void test_pubsub_connector_worker(void **state)
1672
expect_value(__wrap_rrdhost_is_exportable, host, localhost);
1673
will_return(__wrap_rrdhost_is_exportable, 1);
1674
1566
- RRDSET *st = localhost->rrdset_root;
1675
+ RRDSET *st;
1676
+ rrdset_foreach_read(st, localhost);
1677
+ break;
1678
+ rrdset_foreach_done(st);
1679
+
1680
expect_function_call(__wrap_rrdset_is_exportable);
1681
expect_value(__wrap_rrdset_is_exportable, instance, instance);
1682
expect_value(__wrap_rrdset_is_exportable, st, st);