File tree 2 files changed +34
-6
lines changed
opentelemetry-instrumentation-falcon/tests
opentelemetry-instrumentation-wsgi/src/opentelemetry/instrumentation/wsgi
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):
490
490
for key , _ in not_expected .items ():
491
491
self .assertNotIn (key , span .attributes )
492
492
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
+
493
513
def test_custom_request_header_not_added_in_internal_span (self ):
494
514
tracer = trace .get_tracer (__name__ )
495
515
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):
358
358
OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SANITIZE_FIELDS
359
359
)
360
360
)
361
+ headers = {}
361
362
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
367
370
368
371
return sanitize .sanitize_header_values (
369
372
headers ,
@@ -387,7 +390,12 @@ def collect_custom_response_headers_attributes(response_headers):
387
390
)
388
391
response_headers_dict = {}
389
392
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
391
399
392
400
return sanitize .sanitize_header_values (
393
401
response_headers_dict ,
You can’t perform that action at this time.
0 commit comments