File tree Expand file tree Collapse file tree 2 files changed +34
-6
lines changed
opentelemetry-instrumentation-falcon/tests
opentelemetry-instrumentation-wsgi/src/opentelemetry/instrumentation/wsgi Expand file tree Collapse file tree 2 files changed +34
-6
lines changed Original file line number Diff line number Diff line change @@ -490,6 +490,26 @@ def test_custom_request_header_added_in_server_span(self):
490490 for key , _ in not_expected .items ():
491491 self .assertNotIn (key , span .attributes )
492492
493+ def test_repeated_request_header_added_in_server_span (self ):
494+ headers = [
495+ ("Custom-Test-Header-1" , "Test Value 1" ),
496+ ("Custom-Test-Header-1" , "Test Value 2" ),
497+ ]
498+ self .client ().simulate_request (
499+ method = "GET" , path = "/hello" , headers = headers
500+ )
501+ span = self .memory_exporter .get_finished_spans ()[0 ]
502+ assert span .status .is_ok
503+
504+ expected = {
505+ "http.request.header.custom_test_header_1" : (
506+ "Test Value 1,Test Value 2" ,
507+ ),
508+ }
509+
510+ self .assertEqual (span .kind , trace .SpanKind .SERVER )
511+ self .assertSpanHasAttributes (span , expected )
512+
493513 def test_custom_request_header_not_added_in_internal_span (self ):
494514 tracer = trace .get_tracer (__name__ )
495515 with tracer .start_as_current_span ("test" , kind = trace .SpanKind .SERVER ):
Original file line number Diff line number Diff line change @@ -358,12 +358,15 @@ def collect_custom_request_headers_attributes(environ):
358358 OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SANITIZE_FIELDS
359359 )
360360 )
361+ headers = {}
361362
362- headers = {
363- key [_CARRIER_KEY_PREFIX_LEN :].replace ("_" , "-" ): val
364- for key , val in environ .items ()
365- if key .startswith (_CARRIER_KEY_PREFIX )
366- }
363+ for key , val in environ .items ():
364+ if key .startswith (_CARRIER_KEY_PREFIX ):
365+ header_key = key [_CARRIER_KEY_PREFIX_LEN :].replace ("_" , "-" ).lower ()
366+ if header_key in headers :
367+ headers [header_key ] += "," + val
368+ else :
369+ headers [header_key ] = val
367370
368371 return sanitize .sanitize_header_values (
369372 headers ,
@@ -387,7 +390,12 @@ def collect_custom_response_headers_attributes(response_headers):
387390 )
388391 response_headers_dict = {}
389392 if response_headers :
390- response_headers_dict = dict (response_headers )
393+ for key , val in response_headers :
394+ key = key .lower ()
395+ if key in response_headers_dict :
396+ response_headers_dict [key ] += "," + val
397+ else :
398+ response_headers_dict [key ] = val
391399
392400 return sanitize .sanitize_header_values (
393401 response_headers_dict ,
You can’t perform that action at this time.
0 commit comments