1- import pytest
1+ import decimal
2+ from unittest .mock import MagicMock , patch
23
3- from unittest . mock import MagicMock
4+ import pytest
45
56from opentelemetry .trace .propagation import get_current_span
67from opentelemetry .propagators .textmap import DefaultSetter
@@ -139,11 +140,47 @@ def test_inject_continue_trace(sentry_init):
139140 "HTTP_BAGGAGE" : baggage ,
140141 }
141142
143+ expected_baggage = baggage + ",sentry-sample_rand=0.002849"
144+
145+ with patch (
146+ "sentry_sdk.tracing_utils.Random.uniform" ,
147+ return_value = decimal .Decimal ("0.002849" ),
148+ ):
149+ with sentry_sdk .continue_trace (incoming_headers ):
150+ with sentry_sdk .start_span (name = "foo" ) as span :
151+ SentryPropagator ().inject (carrier , setter = setter )
152+ assert carrier ["sentry-trace" ] == f"{ trace_id } -{ span .span_id } -1"
153+ assert carrier ["baggage" ] == SortedBaggage (expected_baggage )
154+
155+
156+ def test_inject_continue_trace_incoming_sample_rand (sentry_init ):
157+ sentry_init (traces_sample_rate = 1.0 )
158+
159+ carrier = {}
160+ setter = DefaultSetter ()
161+
162+ trace_id = "771a43a4192642f0b136d5159a501700"
163+ sentry_trace = "771a43a4192642f0b136d5159a501700-1234567890abcdef-1"
164+ baggage = (
165+ "sentry-trace_id=771a43a4192642f0b136d5159a501700,"
166+ "sentry-public_key=frontendpublickey,"
167+ "sentry-sample_rate=0.01337,"
168+ "sentry-sampled=true,"
169+ "sentry-release=myfrontend,"
170+ "sentry-environment=bird,"
171+ "sentry-transaction=bar,"
172+ "sentry-sample_rand=0.002849"
173+ )
174+ incoming_headers = {
175+ "HTTP_SENTRY_TRACE" : sentry_trace ,
176+ "HTTP_BAGGAGE" : baggage ,
177+ }
178+
142179 with sentry_sdk .continue_trace (incoming_headers ):
143180 with sentry_sdk .start_span (name = "foo" ) as span :
144181 SentryPropagator ().inject (carrier , setter = setter )
145- assert ( carrier ["sentry-trace" ]) == f"{ trace_id } -{ span .span_id } -1"
146- assert ( carrier ["baggage" ]) == SortedBaggage (baggage )
182+ assert carrier ["sentry-trace" ] == f"{ trace_id } -{ span .span_id } -1"
183+ assert carrier ["baggage" ] == SortedBaggage (baggage )
147184
148185
149186def test_inject_head_sdk (sentry_init ):
@@ -152,9 +189,23 @@ def test_inject_head_sdk(sentry_init):
152189 carrier = {}
153190 setter = DefaultSetter ()
154191
155- with sentry_sdk .start_span (name = "foo" ) as span :
156- SentryPropagator ().inject (carrier , setter = setter )
157- assert (carrier ["sentry-trace" ]) == f"{ span .trace_id } -{ span .span_id } -1"
158- assert (carrier ["baggage" ]) == SortedBaggage (
159- f"sentry-transaction=foo,sentry-release=release,sentry-environment=production,sentry-trace_id={ span .trace_id } ,sentry-sample_rate=1.0,sentry-sampled=true" # noqa: E231
160- )
192+ expected_baggage = (
193+ "sentry-transaction=foo,"
194+ "sentry-release=release,"
195+ "sentry-environment=production,"
196+ "sentry-trace_id={trace_id},"
197+ "sentry-sample_rate=1.0,"
198+ "sentry-sampled=true,"
199+ "sentry-sample_rand=0.123456"
200+ )
201+
202+ with patch (
203+ "sentry_sdk.tracing_utils.Random.uniform" ,
204+ return_value = decimal .Decimal ("0.123456" ),
205+ ):
206+ with sentry_sdk .start_span (name = "foo" ) as span :
207+ SentryPropagator ().inject (carrier , setter = setter )
208+ assert carrier ["sentry-trace" ] == f"{ span .trace_id } -{ span .span_id } -1"
209+ assert carrier ["baggage" ] == SortedBaggage (
210+ expected_baggage .format (trace_id = span .trace_id )
211+ )
0 commit comments