Skip to content

Commit 40158f6

Browse files
committed
chore: add strict trace continuation tests for baggage propagation
1 parent 85b0a4a commit 40158f6

1 file changed

Lines changed: 94 additions & 0 deletions

File tree

test/sentry/opentelemetry/propagator_test.exs

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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
273367
end

0 commit comments

Comments
 (0)