@@ -274,4 +274,74 @@ TEST_CASE("Tracer telemetry", "[telemetry]") {
274274 auto heartbeat = message_batch[" payload" ][0 ];
275275 REQUIRE (heartbeat[" request_type" ] == " app-closing" );
276276 }
277+
278+ SECTION (" logs serialization" ) {
279+ SECTION (" log level is correct" ) {
280+ struct TestCase {
281+ std::string_view name;
282+ std::string input;
283+ Optional<std::string> stacktrace;
284+ std::function<void (Telemetry&, const std::string&,
285+ const Optional<std::string>& stacktrace)>
286+ apply;
287+ std::string expected_log_level;
288+ };
289+
290+ auto test_case = GENERATE (values<TestCase>({
291+ {
292+ " warning log" ,
293+ " This is a warning log!" ,
294+ nullopt ,
295+ [](Telemetry& telemetry, const std::string& input,
296+ const Optional<std::string>&) {
297+ telemetry.log_warning (input);
298+ },
299+ " WARNING" ,
300+ },
301+ {
302+ " error log" ,
303+ " This is an error log!" ,
304+ nullopt ,
305+ [](Telemetry& telemetry, const std::string& input,
306+ const Optional<std::string>&) { telemetry.log_error (input); },
307+ " ERROR" ,
308+ },
309+ {
310+ " error log with stacktrace" ,
311+ " This is an error log with a fake stacktrace!" ,
312+ " error here\n then here\n finally here\n " ,
313+ [](Telemetry& telemetry, const std::string& input,
314+ Optional<std::string> stacktrace) {
315+ telemetry.log_error (input, *stacktrace);
316+ },
317+ " ERROR" ,
318+ },
319+ }));
320+
321+ CAPTURE (test_case.name );
322+
323+ client->clear ();
324+ test_case.apply (telemetry, test_case.input , test_case.stacktrace );
325+ trigger_heartbeat ();
326+
327+ auto message_batch = nlohmann::json::parse (client->request_body );
328+ REQUIRE (is_valid_telemetry_payload (message_batch));
329+ REQUIRE (message_batch[" payload" ].size () == 2 );
330+
331+ auto logs_message = message_batch[" payload" ][1 ];
332+ REQUIRE (logs_message[" request_type" ] == " logs" );
333+
334+ auto logs_payload = logs_message[" payload" ][" logs" ];
335+ REQUIRE (logs_payload.size () == 1 );
336+ CHECK (logs_payload[0 ][" level" ] == test_case.expected_log_level );
337+ CHECK (logs_payload[0 ][" message" ] == test_case.input );
338+ CHECK (logs_payload[0 ].contains (" tracer_time" ));
339+
340+ if (test_case.stacktrace ) {
341+ CHECK (logs_payload[0 ][" stack_trace" ] == test_case.stacktrace );
342+ } else {
343+ CHECK (logs_payload[0 ].contains (" stack_trace" ) == false );
344+ }
345+ }
346+ }
277347}
0 commit comments