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