@@ -313,3 +313,78 @@ def test_response_header_capture(self):
313313 self .assertEqual ("Ok too" , sdk_custom_tags ["http.header.X-Capture-That" ])
314314
315315 agent .options .extra_http_headers = original_extra_http_headers
316+
317+ def test_request_header_capture (self ):
318+ original_extra_http_headers = agent .options .extra_http_headers
319+ agent .options .extra_http_headers = ["X-Capture-This-Too" , "X-Capture-That-Too" ]
320+
321+ request_headers = {
322+ "X-Capture-This-Too" : "this too" ,
323+ "X-Capture-That-Too" : "that too" ,
324+ }
325+
326+ with tracer .start_active_span ("test" ):
327+ response = self .http .request (
328+ "GET" , testenv ["pyramid_server" ] + "/" , headers = request_headers
329+ )
330+
331+ spans = self .recorder .queued_spans ()
332+ self .assertEqual (3 , len (spans ))
333+
334+ pyramid_span = spans [0 ]
335+ urllib3_span = spans [1 ]
336+ test_span = spans [2 ]
337+
338+ self .assertTrue (response )
339+ self .assertEqual (200 , response .status )
340+
341+ # Same traceId
342+ self .assertEqual (test_span .t , urllib3_span .t )
343+ self .assertEqual (urllib3_span .t , pyramid_span .t )
344+
345+ # Parent relationships
346+ self .assertEqual (urllib3_span .p , test_span .s )
347+ self .assertEqual (pyramid_span .p , urllib3_span .s )
348+
349+ # Synthetic
350+ self .assertIsNone (pyramid_span .sy )
351+ self .assertIsNone (urllib3_span .sy )
352+ self .assertIsNone (test_span .sy )
353+
354+ # Error logging
355+ self .assertIsNone (test_span .ec )
356+ self .assertIsNone (urllib3_span .ec )
357+ self .assertIsNone (pyramid_span .ec )
358+
359+ # HTTP SDK span
360+ self .assertEqual ("sdk" , pyramid_span .n )
361+
362+ self .assertTrue (pyramid_span .data ["sdk" ])
363+ self .assertEqual ('http' , pyramid_span .data ["sdk" ]["name" ])
364+ self .assertEqual ('entry' , pyramid_span .data ["sdk" ]["type" ])
365+
366+ sdk_custom_tags = pyramid_span .data ["sdk" ]["custom" ]["tags" ]
367+ self .assertEqual ('127.0.0.1:' + str (testenv ['pyramid_port' ]), sdk_custom_tags ["http.host" ])
368+ self .assertEqual ('/' , sdk_custom_tags ["http.url" ])
369+ self .assertEqual ('GET' , sdk_custom_tags ["http.method" ])
370+ self .assertEqual (200 , sdk_custom_tags ["http.status" ])
371+ self .assertNotIn ("message" , sdk_custom_tags )
372+ self .assertNotIn ("http.path_tpl" , sdk_custom_tags )
373+
374+ # urllib3
375+ self .assertEqual ("test" , test_span .data ["sdk" ]["name" ])
376+ self .assertEqual ("urllib3" , urllib3_span .n )
377+ self .assertEqual (200 , urllib3_span .data ["http" ]["status" ])
378+ self .assertEqual (testenv ["pyramid_server" ] + '/' , urllib3_span .data ["http" ]["url" ])
379+ self .assertEqual ("GET" , urllib3_span .data ["http" ]["method" ])
380+ self .assertIsNotNone (urllib3_span .stack )
381+ self .assertTrue (type (urllib3_span .stack ) is list )
382+ self .assertTrue (len (urllib3_span .stack ) > 1 )
383+
384+ # custom headers
385+ self .assertTrue (sdk_custom_tags ["http.header.X-Capture-This-Too" ])
386+ self .assertEqual ("this too" , sdk_custom_tags ["http.header.X-Capture-This-Too" ])
387+ self .assertTrue (sdk_custom_tags ["http.header.X-Capture-That-Too" ])
388+ self .assertEqual ("that too" , sdk_custom_tags ["http.header.X-Capture-That-Too" ])
389+
390+ agent .options .extra_http_headers = original_extra_http_headers
0 commit comments