@@ -110,6 +110,69 @@ def test_error_event_linked_without_performance_span_streaming(
110110 assert event ["transaction_info" ] == {"source" : "custom segment source" }
111111
112112
113+ @pytest .mark .parametrize ("sample_rate" , [0.0 , 1.0 ])
114+ def test_span_streaming_clears_transaction_name (
115+ sentry_init , capture_events , sample_rate
116+ ):
117+ sentry_init (traces_sample_rate = sample_rate , trace_lifecycle = "stream" )
118+ events = capture_events ()
119+ scope = sentry_sdk .get_current_scope ()
120+
121+ with sentry_sdk .traces .start_span (
122+ name = "streamed segment" ,
123+ attributes = {"sentry.segment.name.source" : "component" },
124+ ):
125+ assert scope ._transaction == "streamed segment"
126+ assert scope ._transaction_info == {"source" : "component" }
127+
128+ assert scope ._transaction is None
129+ assert scope ._transaction_info == {}
130+
131+ sentry_sdk .capture_message ("after streamed segment" )
132+
133+ (event ,) = events
134+ assert "transaction" not in event
135+
136+
137+ @pytest .mark .parametrize ("sample_rate" , [0.0 , 1.0 ])
138+ def test_span_streaming_restores_transaction_name (
139+ sentry_init , capture_events , sample_rate
140+ ):
141+ sentry_init (traces_sample_rate = sample_rate , trace_lifecycle = "stream" )
142+ events = capture_events ()
143+ scope = sentry_sdk .get_current_scope ()
144+ scope .set_transaction_name ("previous transaction" , source = "route" )
145+
146+ with sentry_sdk .traces .start_span (name = "streamed segment" ):
147+ assert scope ._transaction == "streamed segment"
148+ assert scope ._transaction_info == ({"source" : "custom" } if sample_rate else {})
149+
150+ assert scope ._transaction == "previous transaction"
151+ assert scope ._transaction_info == {"source" : "route" }
152+
153+ sentry_sdk .capture_message ("after streamed segment" )
154+
155+ (event ,) = events
156+ assert event ["transaction" ] == "previous transaction"
157+ assert event ["transaction_info" ] == {"source" : "route" }
158+
159+
160+ @pytest .mark .parametrize ("sample_rate" , [0.0 , 1.0 ])
161+ def test_span_streaming_keeps_name_changed_during_child_span (sentry_init , sample_rate ):
162+ sentry_init (traces_sample_rate = sample_rate , trace_lifecycle = "stream" )
163+ scope = sentry_sdk .get_current_scope ()
164+
165+ with sentry_sdk .traces .start_span (name = "streamed segment" ):
166+ with sentry_sdk .traces .start_span (name = "child" ):
167+ scope .set_transaction_name ("renamed segment" , source = "component" )
168+
169+ assert scope ._transaction == "renamed segment"
170+ assert scope ._transaction_info == {"source" : "component" }
171+
172+ assert scope ._transaction is None
173+ assert scope ._transaction_info == {}
174+
175+
113176@pytest .mark .parametrize ("parent_sampled" , [True , False , None ])
114177@pytest .mark .parametrize ("sample_rate" , [0.0 , 1.0 ])
115178def test_continue_trace (sentry_init , capture_envelopes , parent_sampled , sample_rate ):
0 commit comments