summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVladimir Kobal <vlad@prokk.net>2022-01-10 15:19:55 +0200
committerGitHub <noreply@github.com>2022-01-10 15:19:55 +0200
commitfce052ee7986d7c2c562093f6c44728dcb077d33 (patch)
tree40bb4a2c5b642431d40d4ca73c8a35ad936a3698
parent3ba9dc6cf0905115f8e5046bd4e50bb866c15ded (diff)
Fix unit tests for Prometheus remote write exporting connector (#11883)
-rw-r--r--exporting/prometheus/remote_write/remote_write_request.cc40
-rw-r--r--exporting/prometheus/remote_write/remote_write_request.h6
-rw-r--r--exporting/tests/test_exporting_engine.c78
3 files changed, 104 insertions, 20 deletions
diff --git a/exporting/prometheus/remote_write/remote_write_request.cc b/exporting/prometheus/remote_write/remote_write_request.cc
index 48d19efd62..cfd61271e6 100644
--- a/exporting/prometheus/remote_write/remote_write_request.cc
+++ b/exporting/prometheus/remote_write/remote_write_request.cc
@@ -178,6 +178,46 @@ int pack_and_clear_write_request(void *write_request_p, char *buffer, size_t *si
}
/**
+ * Writes an unpacked write request into a text buffer
+ *
+ * @param write_request_p the write request
+ * @param buffer a buffer, where text is written
+ * @param size the size of the buffer
+ * @return Returns 0 on success, 1 on failure
+ */
+int convert_write_request_to_string(
+ const char *compressed_write_request,
+ size_t compressed_size,
+ char *buffer,
+ size_t size)
+{
+ size_t uncompressed_size = 0;
+
+ snappy::GetUncompressedLength(compressed_write_request, compressed_size, &uncompressed_size);
+ if (size < uncompressed_size)
+ return 1;
+ char *uncompressed_write_request = (char *)malloc(size);
+
+ if (snappy::RawUncompress(compressed_write_request, compressed_size, uncompressed_write_request) == false) {
+ free(uncompressed_write_request);
+ return 1;
+ }
+
+ WriteRequest *write_request = google::protobuf::Arena::CreateMessage<WriteRequest>(&arena);
+ if (write_request->ParseFromString(std::string(uncompressed_write_request, uncompressed_size)) == false) {
+ free(uncompressed_write_request);
+ return 1;
+ }
+
+ std::string text_write_request(write_request->DebugString());
+ text_write_request.copy(buffer, size);
+
+ free(uncompressed_write_request);
+
+ return 0;
+}
+
+/**
* Shuts down the Protobuf library
*/
void protocol_buffers_shutdown()
diff --git a/exporting/prometheus/remote_write/remote_write_request.h b/exporting/prometheus/remote_write/remote_write_request.h
index e1dfacaf86..5f242b9418 100644
--- a/exporting/prometheus/remote_write/remote_write_request.h
+++ b/exporting/prometheus/remote_write/remote_write_request.h
@@ -24,6 +24,12 @@ size_t get_write_request_size(void *write_request_p);
int pack_and_clear_write_request(void *write_request_p, char *buffer, size_t *size);
+int convert_write_request_to_string(
+ const char *compressed_write_request,
+ size_t compressed_size,
+ char *buffer,
+ size_t size);
+
void protocol_buffers_shutdown();
#ifdef __cplusplus
diff --git a/exporting/tests/test_exporting_engine.c b/exporting/tests/test_exporting_engine.c
index 7188c6eeeb..fb08ff43b5 100644
--- a/exporting/tests/test_exporting_engine.c
+++ b/exporting/tests/test_exporting_engine.c
@@ -1309,27 +1309,65 @@ static void test_format_batch_prometheus_remote_write(void **state)
assert_int_equal(format_batch_prometheus_remote_write(instance), 0);
BUFFER *buffer = instance->buffer;
- assert_int_equal(buffer_strlen(buffer), 192);
-
- BUFFER *escaped_buffer = buffer_create(850);
- size_t len = buffer_strlen(buffer);
- char *ch = (char *)buffer_tostring(buffer);
- for (; len > 0; ch++, len--)
- buffer_sprintf(escaped_buffer, "\\%03o", (unsigned int)*ch);
+ char *write_request_string = calloc(1, 1000);
+ convert_write_request_to_string(buffer_tostring(buffer), buffer_strlen(buffer), write_request_string, 999);
+ assert_int_equal(strlen(write_request_string), 753);
assert_string_equal(
- buffer_tostring(escaped_buffer),
- "\\37777777641\\002\\120\\012\\37777777622\\001\\012\\025\\012\\010\\137\\137\\156\\141\\155\\145\\137\\137"
- "\\022\\011\\164\\145\\163\\164\\005\\015\\064\\012\\031\\012\\010\\151\\156\\163\\164\\141\\156\\143\\145\\022"
- "\\015\\005\\027\\021\\017\\100\\012\\037\\012\\013\\141\\160\\160\\154\\151\\143\\141\\164\\151\\157\\156\\022"
- "\\020\\005\\036\\035\\022\\034\\012\\027\\012\\007\\166\\145\\162\\163\\001\\035\\000\\014\\005\\035\\015\\016"
- "\\014\\012\\026\\012\\010\\005\\020\\020\\153\\145\\171\\022\\012\\005\\012\\040\\166\\141\\154\\165\\145\\022"
- "\\014\\011\\000\\005\\001\\030\\37777777760\\077\\020\\37777777713\\165\\012\\37777777611\\142\\37777777625"
- "\\000\\034\\023\\012\\005\\143\\150\\141\\162\\164\\011\\075\\000\\040\\005\\014\\054\\012\\025\\012\\006\\146"
- "\\141\\155\\151\\154\\171\\022\\013\\005\\123\\011\\015\\040\\012\\033\\012\\011\\144\\151\\155\\145\\156\\005"
- "\\37777777607\\000\\016\\005\\032\\025\\020\\000\\012\\146\\37777777736\\000\\064\\022\\014\\011\\000\\000\\000"
- "\\004\\130\\123\\37777777635\\101\\020\\37777777714\\165");
-
- buffer_free(escaped_buffer);
+ write_request_string,
+ "timeseries {\n"
+ " labels {\n"
+ " name: \"__name__\"\n"
+ " value: \"test_name\"\n"
+ " }\n"
+ " labels {\n"
+ " name: \"instance\"\n"
+ " value: \"test_instance\"\n"
+ " }\n"
+ " labels {\n"
+ " name: \"application\"\n"
+ " value: \"test_application\"\n"
+ " }\n"
+ " labels {\n"
+ " name: \"version\"\n"
+ " value: \"test_version\"\n"
+ " }\n"
+ " labels {\n"
+ " name: \"test_key\"\n"
+ " value: \"test_value\"\n"
+ " }\n"
+ " samples {\n"
+ " value: 1\n"
+ " timestamp: 15051\n"
+ " }\n"
+ "}\n"
+ "timeseries {\n"
+ " labels {\n"
+ " name: \"__name__\"\n"
+ " value: \"test_name\"\n"
+ " }\n"
+ " labels {\n"
+ " name: \"chart\"\n"
+ " value: \"test chart\"\n"
+ " }\n"
+ " labels {\n"
+ " name: \"family\"\n"
+ " value: \"test_family\"\n"
+ " }\n"
+ " labels {\n"
+ " name: \"dimension\"\n"
+ " value: \"test_dimension\"\n"
+ " }\n"
+ " labels {\n"
+ " name: \"instance\"\n"
+ " value: \"test_instance\"\n"
+ " }\n"
+ " samples {\n"
+ " value: 123000321\n"
+ " timestamp: 15052\n"
+ " }\n"
+ "}\n");
+ free(write_request_string);
+
protocol_buffers_shutdown();
}
#endif // ENABLE_PROMETHEUS_REMOTE_WRITE