@@ -875,7 +875,9 @@ async def handler(request):
875875
876876
877877@pytest .mark .asyncio
878- async def test_outgoing_trace_headers (sentry_init , aiohttp_raw_server , aiohttp_client ):
878+ async def test_outgoing_trace_headers_adds_missing_unsigned_propagation_headers (
879+ sentry_init , aiohttp_raw_server , aiohttp_client
880+ ):
879881 sentry_init (
880882 integrations = [AioHttpIntegration ()],
881883 traces_sample_rate = 1.0 ,
@@ -903,10 +905,11 @@ async def handler(request):
903905 parent_span_id = request_span .span_id ,
904906 sampled = 1 ,
905907 )
908+ assert resp .request_info .headers ["baggage" ].count ("sentry-trace_id=" ) == 1
906909
907910
908911@pytest .mark .asyncio
909- async def test_outgoing_trace_headers_append_to_baggage (
912+ async def test_outgoing_trace_headers_appends_baggage_but_preserves_sentry_trace (
910913 sentry_init , aiohttp_raw_server , aiohttp_client
911914):
912915 sentry_init (
@@ -927,12 +930,94 @@ async def handler(request):
927930 trace_id = "0123456789012345678901234567890" ,
928931 ):
929932 client = await aiohttp_client (raw_server )
930- resp = await client .get ("/" , headers = {"bagGage" : "custom=value" })
933+ resp = await client .get (
934+ "/" ,
935+ headers = {
936+ "bagGage" : "custom=value" ,
937+ "Sentry-Trace" : "existing-trace" ,
938+ },
939+ )
931940
932941 assert (
933942 resp .request_info .headers ["baggage" ]
934943 == "custom=value,sentry-trace_id=0123456789012345678901234567890,sentry-sample_rand=0.500000,sentry-environment=production,sentry-release=d08ebdb9309e1b004c6f52202de58a09c2268e42,sentry-transaction=/interactions/other-dogs/new-dog,sentry-sample_rate=1.0,sentry-sampled=true"
935944 )
945+ # existing `sentry-trace`: leave as-is.
946+ assert resp .request_info .headers ["sentry-trace" ] == "existing-trace"
947+
948+
949+ @pytest .mark .asyncio
950+ async def test_outgoing_trace_headers_preserves_signed_propagation_headers (
951+ sentry_init , aiohttp_raw_server , aiohttp_client
952+ ):
953+ sentry_init (
954+ integrations = [AioHttpIntegration ()],
955+ traces_sample_rate = 1.0 ,
956+ )
957+
958+ async def handler (request ):
959+ return web .Response (text = "OK" )
960+
961+ raw_server = await aiohttp_raw_server (handler )
962+ # both propagation headers are named in `SignedHeaders`.
963+ authorization = (
964+ "AWS4-HMAC-SHA256 "
965+ "Credential=test/20260804/eu-west-1/secretsmanager/aws4_request, "
966+ "SignedHeaders=baggage;host;sentry-trace, "
967+ "Signature=sixtyseven"
968+ )
969+
970+ with start_transaction (name = "test" , sampled = True ):
971+ client = await aiohttp_client (raw_server )
972+ resp = await client .get (
973+ "/" ,
974+ headers = {
975+ "baggage" : "vendor=value" ,
976+ "sentry-trace" : "existing-trace" ,
977+ "Authorization" : authorization ,
978+ },
979+ )
980+
981+ headers = resp .request_info .headers
982+ # signed `baggage`: leave as-is.
983+ assert headers ["baggage" ] == "vendor=value"
984+ # signed `sentry-trace`: leave as-is.
985+ assert headers ["sentry-trace" ] == "existing-trace"
986+
987+
988+ @pytest .mark .asyncio
989+ async def test_outgoing_trace_headers_preserves_query_signed_baggage (
990+ sentry_init , aiohttp_raw_server , aiohttp_client
991+ ):
992+ sentry_init (
993+ integrations = [AioHttpIntegration ()],
994+ traces_sample_rate = 1.0 ,
995+ )
996+
997+ async def handler (request ):
998+ return web .Response (text = "OK" )
999+
1000+ raw_server = await aiohttp_raw_server (handler )
1001+ path = (
1002+ "/"
1003+ "?X-Amz-Algorithm=AWS4-HMAC-SHA256"
1004+ "&X-Amz-Credential="
1005+ "test%2F20260804%2Feu-west-1%2Fs3%2Faws4_request"
1006+ "&X-Amz-Date=20260804T120000Z"
1007+ "&X-Amz-Expires=60"
1008+ "&X-Amz-SignedHeaders=baggage%3Bhost"
1009+ "&X-Amz-Signature=sixtyseven"
1010+ )
1011+
1012+ with start_transaction (name = "test" , sampled = True ):
1013+ client = await aiohttp_client (raw_server )
1014+ resp = await client .get (path , headers = {"baggage" : "vendor=value" })
1015+
1016+ headers = resp .request_info .headers
1017+ # query-signed `baggage`: leave as-is.
1018+ assert headers ["baggage" ] == "vendor=value"
1019+ # unsigned `sentry-trace`: add it.
1020+ assert "sentry-trace" in headers
9361021
9371022
9381023@pytest .mark .asyncio
0 commit comments