@cryptotaxi247 / netdata-1 / commits / a1758307f

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);