55import logging
66import sys
77
8+ import pytest
9+
810from scout_apm .core import objtrace
11+ from scout_apm .core .config import scout_config
912from scout_apm .core .tracked_request import TrackedRequest
1013from tests .compat import copy_context , mock
1114from tests .tools import (
1518)
1619
1720
21+ @pytest .fixture
22+ def reset_config ():
23+ """
24+ Reset scout configuration after a test
25+ """
26+ try :
27+ yield
28+ finally :
29+ # Reset Scout configuration.
30+ scout_config .reset_all ()
31+
32+
1833def test_tracked_request_repr (tracked_request ):
1934 assert repr (tracked_request ).startswith ("<TrackedRequest(" )
2035
@@ -214,7 +229,7 @@ def test_finish_log_request_info(tracked_request, caplog):
214229 assert (
215230 "scout_apm.core.tracked_request" ,
216231 logging .DEBUG ,
217- "Sending request: {}" .format (tracked_request .request_id ),
232+ "Sending request: {}. " .format (tracked_request .request_id ),
218233 ) in caplog .record_tuples
219234
220235 assert (
@@ -237,6 +252,42 @@ def test_finish_log_request_info(tracked_request, caplog):
237252 ) in caplog .record_tuples
238253
239254
255+ def test_finish_log_request_info_with_logged_payload (
256+ tracked_request , caplog , reset_config
257+ ):
258+ scout_config .set (log_payload_content = True )
259+ tracked_request .is_real_request = True
260+ tracked_request .start_span (operation = "Something" )
261+ tracked_request .stop_span ()
262+
263+ # Find the logged message.
264+ actual_message = None
265+ for module , level , message in caplog .record_tuples :
266+ if module == "scout_apm.core.tracked_request" and level == logging .DEBUG :
267+ if message .startswith (
268+ "Sending request: {}. Payload: " .format (tracked_request .request_id )
269+ ):
270+ actual_message = message
271+ break
272+ assert actual_message
273+ # Verify the counts of the spans and the request id.
274+ assert actual_message .count ("'StartRequest'" ) == 1
275+ assert actual_message .count ("'FinishRequest'" ) == 1
276+ assert actual_message .count ("'TagRequest'" ) == 1
277+ assert actual_message .count ("'StartSpan'" ) == 1
278+ assert actual_message .count ("'StopSpan'" ) == 1
279+ if objtrace .is_extension :
280+ assert actual_message .count ("'TagSpan'" ) == 3
281+ total_requests = 8
282+ else :
283+ assert actual_message .count ("'TagSpan'" ) == 0
284+ total_requests = 5
285+ # Verify each request id in the payload is the tracked request's.
286+ assert actual_message .count ("'request_id'" ) == total_requests
287+ # The actual request id is also included in the log message after Sending request:
288+ assert actual_message .count (tracked_request .request_id ) == total_requests + 1
289+
290+
240291def test_finish_clears_context ():
241292 tracked_request_1 = TrackedRequest .instance ()
242293 tracked_request_1 .is_real_request = True
@@ -273,7 +324,7 @@ def test_request_only_sent_once(tracked_request, caplog):
273324 sent_log = (
274325 "scout_apm.core.tracked_request" ,
275326 logging .DEBUG ,
276- "Sending request: {}" .format (tracked_request .request_id ),
327+ "Sending request: {}. " .format (tracked_request .request_id ),
277328 )
278329 info_log = (
279330 "scout_apm.core.tracked_request" ,
0 commit comments