Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
65 changes: 65 additions & 0 deletions tests/tracing/test_sample_rand.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,38 @@ def test_deterministic_sampled(sentry_init, capture_events, sample_rate, sample_
assert len(events) == int(sample_rand < sample_rate)


@pytest.mark.parametrize("sample_rand", (0.0, 0.25, 0.5, 0.75))
@pytest.mark.parametrize("sample_rate", (0.0, 0.25, 0.5, 0.75, 1.0))
def test_deterministic_sampled_span_streaming(
sentry_init, capture_items, sample_rate, sample_rand
):
"""
Test that sample_rand is generated on new traces, that it is used to
make the sampling decision, and that it is included in the segment's
baggage.
"""
sentry_init(
traces_sample_rate=sample_rate,
trace_lifecycle="stream",
)
items = capture_items("span")

with mock.patch(
"sentry_sdk.tracing_utils.Random.randrange",
return_value=int(sample_rand * 1000000),
):
with sentry_sdk.traces.start_span(name="span") as span:
assert (
span._get_baggage().sentry_items["sample_rand"] == f"{sample_rand:.6f}" # noqa: E231
)

sentry_sdk.flush()

# Span captured if sample_rand < sample_rate, indicating that
# sample_rand is used to make the sampling decision.
assert len(items) == int(sample_rand < sample_rate)


@pytest.mark.parametrize("sample_rand", (0.0, 0.25, 0.5, 0.75))
@pytest.mark.parametrize("sample_rate", (0.0, 0.25, 0.5, 0.75, 1.0))
def test_transaction_uses_incoming_sample_rand(
Expand All @@ -54,3 +86,36 @@ def test_transaction_uses_incoming_sample_rand(
# Transaction event captured if sample_rand < sample_rate, indicating that
# sample_rand is used to make the sampling decision.
assert len(events) == int(sample_rand < sample_rate)


@pytest.mark.parametrize("sample_rand", (0.0, 0.25, 0.5, 0.75))
@pytest.mark.parametrize("sample_rate", (0.0, 0.25, 0.5, 0.75, 1.0))
def test_segment_uses_incoming_sample_rand_span_streaming(
sentry_init, capture_items, sample_rate, sample_rand
):
"""
Test that the segment uses the sample_rand value from the incoming baggage.
"""
sentry_init(
traces_sample_rate=sample_rate,
trace_lifecycle="stream",
)
items = capture_items("span")

sentry_sdk.traces.continue_trace(
{
"sentry-trace": "0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331",
"baggage": f"sentry-sample_rand={sample_rand:.6f}",
}
)
Comment thread
sentrivana marked this conversation as resolved.

with sentry_sdk.traces.start_span(name="span") as span:
assert (
span._get_baggage().sentry_items["sample_rand"] == f"{sample_rand:.6f}" # noqa: E231
)

sentry_sdk.flush()

# Span captured if sample_rand < sample_rate, indicating that
# sample_rand is used to make the sampling decision.
assert len(items) == int(sample_rand < sample_rate)
Loading