test_exporting_engine.h 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. // SPDX-License-Identifier: GPL-3.0-or-later
  2. #ifndef TEST_EXPORTING_ENGINE_H
  3. #define TEST_EXPORTING_ENGINE_H 1
  4. #include "libnetdata/libnetdata.h"
  5. #include "exporting/exporting_engine.h"
  6. #include "exporting/graphite/graphite.h"
  7. #include "exporting/json/json.h"
  8. #include "exporting/opentsdb/opentsdb.h"
  9. #if ENABLE_PROMETHEUS_REMOTE_WRITE
  10. #include "exporting/prometheus/remote_write/remote_write.h"
  11. #endif
  12. #if HAVE_KINESIS
  13. #include "exporting/aws_kinesis/aws_kinesis.h"
  14. #endif
  15. #if ENABLE_EXPORTING_PUBSUB
  16. #include "exporting/pubsub/pubsub.h"
  17. #endif
  18. #if HAVE_MONGOC
  19. #include "exporting/mongodb/mongodb.h"
  20. #endif
  21. #include <stdarg.h>
  22. #include <stddef.h>
  23. #include <setjmp.h>
  24. #include <stdint.h>
  25. #ifndef UNIT_TESTING
  26. #include <cmocka.h>
  27. #else
  28. #undef UNIT_TESTING
  29. #include <cmocka.h>
  30. #define UNIT_TESTING
  31. #endif
  32. #define MAX_LOG_LINE 1024
  33. extern char log_line[];
  34. // -----------------------------------------------------------------------
  35. // doubles for Netdata functions
  36. const char *__wrap_strdupz(const char *s);
  37. void __wrap_info_int(const char *file, const char *function, const unsigned long line, const char *fmt, ...);
  38. int __wrap_connect_to_one_of(
  39. const char *destination,
  40. int default_port,
  41. struct timeval *timeout,
  42. size_t *reconnects_counter,
  43. char *connected_to,
  44. size_t connected_to_size);
  45. void __rrdhost_check_rdlock(RRDHOST *host, const char *file, const char *function, const unsigned long line);
  46. void __rrdset_check_rdlock(RRDSET *st, const char *file, const char *function, const unsigned long line);
  47. void __rrd_check_rdlock(const char *file, const char *function, const unsigned long line);
  48. time_t __mock_rrddim_query_oldest_time(STORAGE_METRIC_HANDLE *db_metric_handle);
  49. time_t __mock_rrddim_query_latest_time(STORAGE_METRIC_HANDLE *db_metric_handle);
  50. void __mock_rrddim_query_init(STORAGE_METRIC_HANDLE *db_metric_handle, struct rrddim_query_handle *handle, time_t start_time, time_t end_time, TIER_QUERY_FETCH tier_query_fetch_type);
  51. int __mock_rrddim_query_is_finished(struct rrddim_query_handle *handle);
  52. STORAGE_POINT __mock_rrddim_query_next_metric(struct rrddim_query_handle *handle);
  53. void __mock_rrddim_query_finalize(struct rrddim_query_handle *handle);
  54. // -----------------------------------------------------------------------
  55. // wraps for system functions
  56. void __wrap_uv_thread_create(uv_thread_t thread, void (*worker)(void *arg), void *arg);
  57. void __wrap_uv_mutex_lock(uv_mutex_t *mutex);
  58. void __wrap_uv_mutex_unlock(uv_mutex_t *mutex);
  59. void __wrap_uv_cond_signal(uv_cond_t *cond_var);
  60. void __wrap_uv_cond_wait(uv_cond_t *cond_var, uv_mutex_t *mutex);
  61. ssize_t __wrap_recv(int sockfd, void *buf, size_t len, int flags);
  62. ssize_t __wrap_send(int sockfd, const void *buf, size_t len, int flags);
  63. // -----------------------------------------------------------------------
  64. // doubles and originals for exporting engine functions
  65. struct engine *__real_read_exporting_config();
  66. struct engine *__wrap_read_exporting_config();
  67. struct engine *__mock_read_exporting_config();
  68. int __real_init_connectors(struct engine *engine);
  69. int __wrap_init_connectors(struct engine *engine);
  70. int __real_mark_scheduled_instances(struct engine *engine);
  71. int __wrap_mark_scheduled_instances(struct engine *engine);
  72. NETDATA_DOUBLE __real_exporting_calculate_value_from_stored_data(
  73. struct instance *instance,
  74. RRDDIM *rd,
  75. time_t *last_timestamp);
  76. NETDATA_DOUBLE __wrap_exporting_calculate_value_from_stored_data(
  77. struct instance *instance,
  78. RRDDIM *rd,
  79. time_t *last_timestamp);
  80. int __real_prepare_buffers(struct engine *engine);
  81. int __wrap_prepare_buffers(struct engine *engine);
  82. void __real_create_main_rusage_chart(RRDSET **st_rusage, RRDDIM **rd_user, RRDDIM **rd_system);
  83. void __wrap_create_main_rusage_chart(RRDSET **st_rusage, RRDDIM **rd_user, RRDDIM **rd_system);
  84. void __real_send_main_rusage(RRDSET *st_rusage, RRDDIM *rd_user, RRDDIM *rd_system);
  85. void __wrap_send_main_rusage(RRDSET *st_rusage, RRDDIM *rd_user, RRDDIM *rd_system);
  86. int __real_send_internal_metrics(struct instance *instance);
  87. int __wrap_send_internal_metrics(struct instance *instance);
  88. int __real_rrdhost_is_exportable(struct instance *instance, RRDHOST *host);
  89. int __wrap_rrdhost_is_exportable(struct instance *instance, RRDHOST *host);
  90. int __real_rrdset_is_exportable(struct instance *instance, RRDSET *st);
  91. int __wrap_rrdset_is_exportable(struct instance *instance, RRDSET *st);
  92. int __mock_start_batch_formatting(struct instance *instance);
  93. int __mock_start_host_formatting(struct instance *instance, RRDHOST *host);
  94. int __mock_start_chart_formatting(struct instance *instance, RRDSET *st);
  95. int __mock_metric_formatting(struct instance *instance, RRDDIM *rd);
  96. int __mock_end_chart_formatting(struct instance *instance, RRDSET *st);
  97. int __mock_variables_formatting(struct instance *instance, RRDHOST *host);
  98. int __mock_end_host_formatting(struct instance *instance, RRDHOST *host);
  99. int __mock_end_batch_formatting(struct instance *instance);
  100. int __wrap_simple_connector_end_batch(struct instance *instance);
  101. #if ENABLE_PROMETHEUS_REMOTE_WRITE
  102. void *__real_init_write_request();
  103. void *__wrap_init_write_request();
  104. void __real_add_host_info(
  105. void *write_request_p,
  106. const char *name, const char *instance, const char *application, const char *version, const int64_t timestamp);
  107. void __wrap_add_host_info(
  108. void *write_request_p,
  109. const char *name, const char *instance, const char *application, const char *version, const int64_t timestamp);
  110. void __real_add_label(void *write_request_p, char *key, char *value);
  111. void __wrap_add_label(void *write_request_p, char *key, char *value);
  112. void __real_add_metric(
  113. void *write_request_p,
  114. const char *name, const char *chart, const char *family, const char *dimension,
  115. const char *instance, const double value, const int64_t timestamp);
  116. void __wrap_add_metric(
  117. void *write_request_p,
  118. const char *name, const char *chart, const char *family, const char *dimension,
  119. const char *instance, const double value, const int64_t timestamp);
  120. #endif /* ENABLE_PROMETHEUS_REMOTE_WRITE */
  121. #if HAVE_KINESIS
  122. void __wrap_aws_sdk_init();
  123. void __wrap_kinesis_init(
  124. void *kinesis_specific_data_p, const char *region, const char *access_key_id, const char *secret_key,
  125. const long timeout);
  126. void __wrap_kinesis_put_record(
  127. void *kinesis_specific_data_p, const char *stream_name, const char *partition_key, const char *data,
  128. size_t data_len);
  129. int __wrap_kinesis_get_result(void *request_outcomes_p, char *error_message, size_t *sent_bytes, size_t *lost_bytes);
  130. #endif /* HAVE_KINESIS */
  131. #if ENABLE_EXPORTING_PUBSUB
  132. int __wrap_pubsub_init(
  133. void *pubsub_specific_data_p, char *error_message, const char *destination, const char *credentials_file,
  134. const char *project_id, const char *topic_id);
  135. int __wrap_pubsub_add_message(void *pubsub_specific_data_p, char *data);
  136. int __wrap_pubsub_publish(
  137. void *pubsub_specific_data_p, char *error_message, size_t buffered_metrics, size_t buffered_bytes);
  138. int __wrap_pubsub_get_result(
  139. void *pubsub_specific_data_p, char *error_message,
  140. size_t *sent_metrics, size_t *sent_bytes, size_t *lost_metrics, size_t *lost_bytes);
  141. #endif /* ENABLE_EXPORTING_PUBSUB */
  142. #if HAVE_MONGOC
  143. void __wrap_mongoc_init();
  144. mongoc_uri_t *__wrap_mongoc_uri_new_with_error(const char *uri_string, bson_error_t *error);
  145. int32_t __wrap_mongoc_uri_get_option_as_int32(const mongoc_uri_t *uri, const char *option, int32_t fallback);
  146. bool __wrap_mongoc_uri_set_option_as_int32(const mongoc_uri_t *uri, const char *option, int32_t value);
  147. mongoc_client_t *__wrap_mongoc_client_new_from_uri(const mongoc_uri_t *uri);
  148. bool __wrap_mongoc_client_set_appname(mongoc_client_t *client, const char *appname);
  149. mongoc_collection_t *
  150. __wrap_mongoc_client_get_collection(mongoc_client_t *client, const char *db, const char *collection);
  151. mongoc_collection_t *
  152. __real_mongoc_client_get_collection(mongoc_client_t *client, const char *db, const char *collection);
  153. void __wrap_mongoc_uri_destroy(mongoc_uri_t *uri);
  154. bool __wrap_mongoc_collection_insert_many(
  155. mongoc_collection_t *collection,
  156. const bson_t **documents,
  157. size_t n_documents,
  158. const bson_t *opts,
  159. bson_t *reply,
  160. bson_error_t *error);
  161. #endif /* HAVE_MONGOC */
  162. // -----------------------------------------------------------------------
  163. // fixtures
  164. int setup_configured_engine(void **state);
  165. int teardown_configured_engine(void **state);
  166. int setup_rrdhost();
  167. int teardown_rrdhost();
  168. int setup_initialized_engine(void **state);
  169. int teardown_initialized_engine(void **state);
  170. int setup_prometheus(void **state);
  171. int teardown_prometheus(void **state);
  172. void init_connectors_in_tests(struct engine *engine);
  173. #endif /* TEST_EXPORTING_ENGINE_H */