@@ -179,6 +179,8 @@ defmodule Sentry.OpenTelemetry.PropagatorTest do
179179
180180 describe "baggage propagation" do
181181 test "injects baggage from context" do
182+ put_test_config ( dsn: "http://public:secret@localhost:9000/1" )
183+
182184 trace_id = 0x1234567890ABCDEF1234567890ABCDEF
183185 span_id = 0x1234567890ABCDEF
184186 trace_flags = 1
@@ -210,6 +212,8 @@ defmodule Sentry.OpenTelemetry.PropagatorTest do
210212 end
211213
212214 test "does not inject baggage when not in context" do
215+ put_test_config ( dsn: "http://public:secret@localhost:9000/1" )
216+
213217 trace_id = 0x1234567890ABCDEF1234567890ABCDEF
214218 span_id = 0x1234567890ABCDEF
215219 trace_flags = 1
@@ -269,5 +273,95 @@ defmodule Sentry.OpenTelemetry.PropagatorTest do
269273 end
270274 end
271275 end
276+
277+ describe "strict trace continuation integration" do
278+ test "org IDs match: trace is continued end-to-end" do
279+ put_test_config ( dsn: "https://key@o99.ingest.sentry.io/123" , strict_trace_continuation: false )
280+
281+ sentry_trace = "1234567890abcdef1234567890abcdef-1234567890abcdef-1"
282+ baggage = "sentry-org_id=99,sentry-public_key=key"
283+
284+ getter = fn
285+ "sentry-trace" , _ -> sentry_trace
286+ "baggage" , _ -> baggage
287+ _ , _ -> :undefined
288+ end
289+
290+ ctx = Propagator . extract ( :otel_ctx . new ( ) , % { } , nil , getter , [ ] )
291+
292+ assert Tracer . current_span_ctx ( ctx ) != :undefined
293+ end
294+
295+ test "org ID mismatch: trace is NOT continued and a fresh context is returned" do
296+ put_test_config ( dsn: "https://key@o99.ingest.sentry.io/123" , strict_trace_continuation: false )
297+
298+ sentry_trace = "1234567890abcdef1234567890abcdef-1234567890abcdef-1"
299+ baggage = "sentry-org_id=42,sentry-public_key=key"
300+
301+ getter = fn
302+ "sentry-trace" , _ -> sentry_trace
303+ "baggage" , _ -> baggage
304+ _ , _ -> :undefined
305+ end
306+
307+ ctx = Propagator . extract ( :otel_ctx . new ( ) , % { } , nil , getter , [ ] )
308+
309+ assert Tracer . current_span_ctx ( ctx ) == :undefined
310+ end
311+
312+ test "strict=true, baggage missing org ID: trace is NOT continued" do
313+ put_test_config ( dsn: "https://key@o99.ingest.sentry.io/123" , strict_trace_continuation: true )
314+
315+ sentry_trace = "1234567890abcdef1234567890abcdef-1234567890abcdef-1"
316+ baggage = "sentry-public_key=key"
317+
318+ getter = fn
319+ "sentry-trace" , _ -> sentry_trace
320+ "baggage" , _ -> baggage
321+ _ , _ -> :undefined
322+ end
323+
324+ ctx = Propagator . extract ( :otel_ctx . new ( ) , % { } , nil , getter , [ ] )
325+
326+ assert Tracer . current_span_ctx ( ctx ) == :undefined
327+ end
328+
329+ test "inject adds sentry-org_id to outgoing baggage when SDK org is configured" do
330+ put_test_config ( dsn: "https://key@o99.ingest.sentry.io/123" )
331+
332+ Tracer . with_span "test_span" do
333+ baggage_value = "sentry-trace_id=abc,sentry-public_key=key"
334+
335+ ctx =
336+ :otel_ctx . get_current ( )
337+ |> :otel_ctx . set_value ( :"sentry-baggage" , baggage_value )
338+
339+ setter = fn key , value , carrier -> Map . put ( carrier , key , value ) end
340+ carrier = Propagator . inject ( ctx , % { } , setter , [ ] )
341+
342+ assert String . contains? ( Map . get ( carrier , "baggage" , "" ) , "sentry-org_id=99" )
343+ end
344+ end
345+
346+ test "inject does not duplicate sentry-org_id when already present in baggage" do
347+ put_test_config ( dsn: "https://key@o99.ingest.sentry.io/123" )
348+
349+ Tracer . with_span "test_span" do
350+ baggage_value = "sentry-trace_id=abc,sentry-org_id=99"
351+
352+ ctx =
353+ :otel_ctx . get_current ( )
354+ |> :otel_ctx . set_value ( :"sentry-baggage" , baggage_value )
355+
356+ setter = fn key , value , carrier -> Map . put ( carrier , key , value ) end
357+ carrier = Propagator . inject ( ctx , % { } , setter , [ ] )
358+
359+ injected_baggage = Map . get ( carrier , "baggage" , "" )
360+
361+ assert String . contains? ( injected_baggage , "sentry-org_id=99" )
362+ assert length ( String . split ( injected_baggage , "sentry-org_id=" ) ) == 2
363+ end
364+ end
365+ end
272366 end
273367end
0 commit comments