1414
1515using namespace datadog ::tracing;
1616
17+ namespace {
18+ bool is_valid_telemetry_payload (const nlohmann::json& json) {
19+ return json.contains (" /api_version" _json_pointer) &&
20+ json.at (" api_version" ) == " v2" &&
21+ json.contains (" /seq_id" _json_pointer) &&
22+ json.contains (" /request_type" _json_pointer) &&
23+ json.contains (" /tracer_time" _json_pointer) &&
24+ json.contains (" /runtime_id" _json_pointer) &&
25+ json.contains (" /payload" _json_pointer) &&
26+ json.contains (" /application" _json_pointer) &&
27+ json.contains (" /host" _json_pointer);
28+ }
29+
30+ } // namespace
31+
1732TEST_CASE (" Tracer telemetry" , " [telemetry]" ) {
1833 const std::time_t mock_time = 1672484400 ;
1934 const Clock clock = [mock_time]() {
@@ -37,6 +52,7 @@ TEST_CASE("Tracer telemetry", "[telemetry]") {
3752 SECTION (" Without a defined integration" ) {
3853 auto app_started_message = tracer_telemetry.app_started ({});
3954 auto app_started = nlohmann::json::parse (app_started_message);
55+ REQUIRE (is_valid_telemetry_payload (app_started) == true );
4056 REQUIRE (app_started[" request_type" ] == " message-batch" );
4157 REQUIRE (app_started[" payload" ].size () == 1 );
4258
@@ -50,6 +66,7 @@ TEST_CASE("Tracer telemetry", "[telemetry]") {
5066 true , clock, logger, tracer_signature, " nginx" , " 1.25.2" };
5167 auto app_started_message = tracer_telemetry.app_started ({});
5268 auto app_started = nlohmann::json::parse (app_started_message);
69+ REQUIRE (is_valid_telemetry_payload (app_started) == true );
5370 REQUIRE (app_started[" request_type" ] == " message-batch" );
5471 REQUIRE (app_started[" payload" ].size () == 2 );
5572
@@ -68,8 +85,8 @@ TEST_CASE("Tracer telemetry", "[telemetry]") {
6885 ConfigMetadata::Origin::CODE)}};
6986
7087 auto app_started_message = tracer_telemetry.app_started (configuration);
71-
7288 auto app_started = nlohmann::json::parse (app_started_message);
89+ REQUIRE (is_valid_telemetry_payload (app_started) == true );
7390 REQUIRE (app_started[" request_type" ] == " message-batch" );
7491 REQUIRE (app_started[" payload" ].is_array ());
7592 REQUIRE (app_started[" payload" ].size () == 1 );
@@ -97,6 +114,7 @@ TEST_CASE("Tracer telemetry", "[telemetry]") {
97114 auto config_change_message = nlohmann::json::parse (
98115 tracer_telemetry.configuration_change (), nullptr , false );
99116 REQUIRE (config_change_message.is_discarded () == false );
117+ REQUIRE (is_valid_telemetry_payload (app_started) == true );
100118
101119 CHECK (config_change_message[" request_type" ] ==
102120 " app-client-configuration-change" );
@@ -115,6 +133,7 @@ TEST_CASE("Tracer telemetry", "[telemetry]") {
115133 auto config_change_message = nlohmann::json::parse (
116134 tracer_telemetry.configuration_change (), nullptr , false );
117135 REQUIRE (config_change_message.is_discarded () == false );
136+ REQUIRE (is_valid_telemetry_payload (config_change_message) == true );
118137
119138 CHECK (config_change_message[" request_type" ] ==
120139 " app-client-configuration-change" );
@@ -149,6 +168,7 @@ TEST_CASE("Tracer telemetry", "[telemetry]") {
149168 SECTION (" generates a heartbeat message" ) {
150169 auto heartbeat_message = tracer_telemetry.heartbeat_and_telemetry ();
151170 auto message_batch = nlohmann::json::parse (heartbeat_message);
171+ REQUIRE (is_valid_telemetry_payload (message_batch) == true );
152172 REQUIRE (message_batch[" payload" ].size () == 1 );
153173 auto heartbeat = message_batch[" payload" ][0 ];
154174 REQUIRE (heartbeat[" request_type" ] == " app-heartbeat" );
@@ -166,6 +186,7 @@ TEST_CASE("Tracer telemetry", "[telemetry]") {
166186 auto heartbeat_and_telemetry_message =
167187 tracer_telemetry.heartbeat_and_telemetry ();
168188 auto message_batch = nlohmann::json::parse (heartbeat_and_telemetry_message);
189+ REQUIRE (is_valid_telemetry_payload (message_batch) == true );
169190 REQUIRE (message_batch[" payload" ].size () == 2 );
170191 auto generate_metrics = message_batch[" payload" ][1 ];
171192 REQUIRE (generate_metrics[" request_type" ] == " generate-metrics" );
@@ -186,6 +207,7 @@ TEST_CASE("Tracer telemetry", "[telemetry]") {
186207 SECTION (" generates an app-closing event" ) {
187208 auto app_closing_message = tracer_telemetry.app_closing ();
188209 auto message_batch = nlohmann::json::parse (app_closing_message);
210+ REQUIRE (is_valid_telemetry_payload (message_batch) == true );
189211 REQUIRE (message_batch[" payload" ].size () == 1 );
190212 auto heartbeat = message_batch[" payload" ][0 ];
191213 REQUIRE (heartbeat[" request_type" ] == " app-closing" );
0 commit comments