@cryptotaxi247 / netdata-1 / commits / fce052ee7

Fix unit tests for Prometheus remote write exporting connector (#11883)

Vladimir Kobal committed Jan 10, 2022 at 15:19 UTC fce052ee7986d7c2c562093f6c44728dcb077d33
3 files changed +104 -20
exporting/prometheus/remote_write/remote_write_request.cc
+40
@@ -177,6 +177,46 @@ int pack_and_clear_write_request(void *write_request_p, char *buffer, size_t *si
177 return 0;
178 }
179
180 +/**
181 + * Writes an unpacked write request into a text buffer
182 + *
183 + * @param write_request_p the write request
184 + * @param buffer a buffer, where text is written
185 + * @param size the size of the buffer
186 + * @return Returns 0 on success, 1 on failure
187 + */
188 +int convert_write_request_to_string(
189 + const char *compressed_write_request,
190 + size_t compressed_size,
191 + char *buffer,
192 + size_t size)
193 +{
194 + size_t uncompressed_size = 0;
195 +
196 + snappy::GetUncompressedLength(compressed_write_request, compressed_size, &uncompressed_size);
197 + if (size < uncompressed_size)
198 + return 1;
199 + char *uncompressed_write_request = (char *)malloc(size);
200 +
201 + if (snappy::RawUncompress(compressed_write_request, compressed_size, uncompressed_write_request) == false) {
202 + free(uncompressed_write_request);
203 + return 1;
204 + }
205 +
206 + WriteRequest *write_request = google::protobuf::Arena::CreateMessage<WriteRequest>(&arena);
207 + if (write_request->ParseFromString(std::string(uncompressed_write_request, uncompressed_size)) == false) {
208 + free(uncompressed_write_request);
209 + return 1;
210 + }
211 +
212 + std::string text_write_request(write_request->DebugString());
213 + text_write_request.copy(buffer, size);
214 +
215 + free(uncompressed_write_request);
216 +
217 + return 0;
218 +}
219 +
220 /**
221 * Shuts down the Protobuf library
222 */
exporting/prometheus/remote_write/remote_write_request.h
+6
@@ -24,6 +24,12 @@ size_t get_write_request_size(void *write_request_p);
24
25 int pack_and_clear_write_request(void *write_request_p, char *buffer, size_t *size);
26
27 +int convert_write_request_to_string(
28 + const char *compressed_write_request,
29 + size_t compressed_size,
30 + char *buffer,
31 + size_t size);
32 +
33 void protocol_buffers_shutdown();
34
35 #ifdef __cplusplus
exporting/tests/test_exporting_engine.c
+58 -20
@@ -1309,27 +1309,65 @@ static void test_format_batch_prometheus_remote_write(void **state)
1309 assert_int_equal(format_batch_prometheus_remote_write(instance), 0);
1310
1311 BUFFER *buffer = instance->buffer;
1312 - assert_int_equal(buffer_strlen(buffer), 192);
1313 -
1314 - BUFFER *escaped_buffer = buffer_create(850);
1315 - size_t len = buffer_strlen(buffer);
1316 - char *ch = (char *)buffer_tostring(buffer);
1317 - for (; len > 0; ch++, len--)
1318 - buffer_sprintf(escaped_buffer, "\\%03o", (unsigned int)*ch);
1312 + char *write_request_string = calloc(1, 1000);
1313 + convert_write_request_to_string(buffer_tostring(buffer), buffer_strlen(buffer), write_request_string, 999);
1314 + assert_int_equal(strlen(write_request_string), 753);
1315 assert_string_equal(
1320 - buffer_tostring(escaped_buffer),
1321 - "\\37777777641\\002\\120\\012\\37777777622\\001\\012\\025\\012\\010\\137\\137\\156\\141\\155\\145\\137\\137"
1322 - "\\022\\011\\164\\145\\163\\164\\005\\015\\064\\012\\031\\012\\010\\151\\156\\163\\164\\141\\156\\143\\145\\022"
1323 - "\\015\\005\\027\\021\\017\\100\\012\\037\\012\\013\\141\\160\\160\\154\\151\\143\\141\\164\\151\\157\\156\\022"
1324 - "\\020\\005\\036\\035\\022\\034\\012\\027\\012\\007\\166\\145\\162\\163\\001\\035\\000\\014\\005\\035\\015\\016"
1325 - "\\014\\012\\026\\012\\010\\005\\020\\020\\153\\145\\171\\022\\012\\005\\012\\040\\166\\141\\154\\165\\145\\022"
1326 - "\\014\\011\\000\\005\\001\\030\\37777777760\\077\\020\\37777777713\\165\\012\\37777777611\\142\\37777777625"
1327 - "\\000\\034\\023\\012\\005\\143\\150\\141\\162\\164\\011\\075\\000\\040\\005\\014\\054\\012\\025\\012\\006\\146"
1328 - "\\141\\155\\151\\154\\171\\022\\013\\005\\123\\011\\015\\040\\012\\033\\012\\011\\144\\151\\155\\145\\156\\005"
1329 - "\\37777777607\\000\\016\\005\\032\\025\\020\\000\\012\\146\\37777777736\\000\\064\\022\\014\\011\\000\\000\\000"
1330 - "\\004\\130\\123\\37777777635\\101\\020\\37777777714\\165");
1331 -
1332 - buffer_free(escaped_buffer);
1316 + write_request_string,
1317 + "timeseries {\n"
1318 + " labels {\n"
1319 + " name: \"__name__\"\n"
1320 + " value: \"test_name\"\n"
1321 + " }\n"
1322 + " labels {\n"
1323 + " name: \"instance\"\n"
1324 + " value: \"test_instance\"\n"
1325 + " }\n"
1326 + " labels {\n"
1327 + " name: \"application\"\n"
1328 + " value: \"test_application\"\n"
1329 + " }\n"
1330 + " labels {\n"
1331 + " name: \"version\"\n"
1332 + " value: \"test_version\"\n"
1333 + " }\n"
1334 + " labels {\n"
1335 + " name: \"test_key\"\n"
1336 + " value: \"test_value\"\n"
1337 + " }\n"
1338 + " samples {\n"
1339 + " value: 1\n"
1340 + " timestamp: 15051\n"
1341 + " }\n"
1342 + "}\n"
1343 + "timeseries {\n"
1344 + " labels {\n"
1345 + " name: \"__name__\"\n"
1346 + " value: \"test_name\"\n"
1347 + " }\n"
1348 + " labels {\n"
1349 + " name: \"chart\"\n"
1350 + " value: \"test chart\"\n"
1351 + " }\n"
1352 + " labels {\n"
1353 + " name: \"family\"\n"
1354 + " value: \"test_family\"\n"
1355 + " }\n"
1356 + " labels {\n"
1357 + " name: \"dimension\"\n"
1358 + " value: \"test_dimension\"\n"
1359 + " }\n"
1360 + " labels {\n"
1361 + " name: \"instance\"\n"
1362 + " value: \"test_instance\"\n"
1363 + " }\n"
1364 + " samples {\n"
1365 + " value: 123000321\n"
1366 + " timestamp: 15052\n"
1367 + " }\n"
1368 + "}\n");
1369 + free(write_request_string);
1370 +
1371 protocol_buffers_shutdown();
1372 }
1373 #endif // ENABLE_PROMETHEUS_REMOTE_WRITE