Skip to content

Commit c34a71e

Browse files
test(transport): Test new client report features
- Add test for `record_lost_event` method's new `quantity` parameter - Add test for `record_lost_event` when passed a transaction item
1 parent f84413d commit c34a71e

File tree

1 file changed

+70
-0
lines changed

1 file changed

+70
-0
lines changed

Diff for: tests/test_transport.py

+70
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,20 @@ def inner(**kwargs):
8686
return inner
8787

8888

89+
def mock_transaction_envelope(span_count):
90+
# type: (int) -> Envelope
91+
event = defaultdict(
92+
mock.MagicMock,
93+
type="transaction",
94+
spans=[mock.MagicMock() for _ in range(span_count)],
95+
)
96+
97+
envelope = Envelope()
98+
envelope.add_transaction(event)
99+
100+
return envelope
101+
102+
89103
@pytest.mark.forked
90104
@pytest.mark.parametrize("debug", (True, False))
91105
@pytest.mark.parametrize("client_flush_method", ["close", "flush"])
@@ -628,3 +642,59 @@ class TestCustomHubClass(sentry_sdk.Hub):
628642

629643
with pytest.deprecated_call():
630644
assert transport.hub_cls is TestCustomHubClass
645+
646+
647+
@pytest.mark.parametrize("quantity", (1, 2, 10))
648+
def test_record_lost_event_quantity(capturing_server, make_client, quantity):
649+
client = make_client()
650+
transport = client.transport
651+
652+
transport.record_lost_event(reason="test", data_category="span", quantity=quantity)
653+
client.flush()
654+
655+
(captured,) = capturing_server.captured # Should only be one envelope
656+
envelope = captured.envelope
657+
(item,) = envelope.items # Envelope should only have one item
658+
659+
assert item.type == "client_report"
660+
661+
report = parse_json(item.get_bytes())
662+
663+
assert report["discarded_events"] == [
664+
{"category": "span", "reason": "test", "quantity": quantity}
665+
]
666+
667+
668+
@pytest.mark.parametrize("span_count", (0, 1, 2, 10))
669+
def test_record_lost_event_transaction_item(capturing_server, make_client, span_count):
670+
client = make_client()
671+
transport = client.transport
672+
673+
envelope = mock_transaction_envelope(span_count)
674+
(transaction_item,) = envelope.items
675+
676+
transport.record_lost_event(reason="test", item=transaction_item)
677+
client.flush()
678+
679+
(captured,) = capturing_server.captured # Should only be one envelope
680+
envelope = captured.envelope
681+
(item,) = envelope.items # Envelope should only have one item
682+
683+
assert item.type == "client_report"
684+
685+
report = parse_json(item.get_bytes())
686+
discarded_events = report["discarded_events"]
687+
688+
assert len(discarded_events) == 2
689+
690+
assert {
691+
"category": "transaction",
692+
"reason": "test",
693+
"quantity": 1,
694+
} in discarded_events
695+
696+
assert {
697+
"category": "span",
698+
"reason": "test",
699+
"quantity": span_count + 1,
700+
} in discarded_events

0 commit comments

Comments
 (0)