Skip to content

Commit 90b2ce5

Browse files
committed
use sessions in the transport tests
1 parent 96c232d commit 90b2ce5

1 file changed

Lines changed: 67 additions & 43 deletions

File tree

‎tests/test_transport.py‎

Lines changed: 67 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
add_breadcrumb,
3232
capture_message,
3333
isolation_scope,
34-
new_scope,
3534
)
3635
from sentry_sdk._compat import PY37, PY38
3736
from sentry_sdk.envelope import Envelope, Item, PayloadRef, parse_json
@@ -514,40 +513,45 @@ def record_lost_event(reason, data_category=None, item=None):
514513

515514
capturing_server.respond_with(
516515
code=response_code,
517-
headers={"X-Sentry-Rate-Limits": "4711:attachment:organization"},
516+
headers={"X-Sentry-Rate-Limits": "4711:session:organization"},
518517
)
519518

520-
with new_scope() as scope:
521-
scope.add_attachment(bytes=b"Hello", filename="hello.txt")
522-
client.capture_event({"type": "error"}, scope=scope)
519+
session_envelope = Envelope()
520+
session_envelope.add_item(
521+
Item(payload=PayloadRef(json={"sid": "123"}), type="session")
522+
)
523+
client.transport.capture_envelope(session_envelope)
523524
client.flush()
524525

525526
assert len(capturing_server.captured) == 1
526527
assert capturing_server.captured[0].path == "/api/132/envelope/"
527528
capturing_server.clear_captured()
528529

529-
assert set(client.transport._disabled_until) == set(["attachment"])
530+
assert set(client.transport._disabled_until) == set(["session"])
530531

531-
with new_scope() as scope:
532-
scope.add_attachment(bytes=b"Hello", filename="hello.txt")
533-
client.capture_event({"type": "error"}, scope=scope)
534-
with new_scope() as scope:
535-
scope.add_attachment(bytes=b"Hello", filename="hello.txt")
536-
client.capture_event({"type": "error"}, scope=scope)
532+
session_envelope = Envelope()
533+
session_envelope.add_item(
534+
Item(payload=PayloadRef(json={"sid": "456"}), type="session")
535+
)
536+
client.transport.capture_envelope(session_envelope)
537+
session_envelope = Envelope()
538+
session_envelope.add_item(
539+
Item(payload=PayloadRef(json={"sid": "789"}), type="session")
540+
)
541+
client.transport.capture_envelope(session_envelope)
537542
client.flush()
538543

539-
# events go through but attachments are dropped
540-
assert len(capturing_server.captured) == 2
544+
assert not capturing_server.captured
541545

542-
client.capture_event({"type": "error"})
546+
client.capture_event({"type": "event"})
543547
client.flush()
544548

545-
assert len(capturing_server.captured) == 3
546-
assert capturing_server.captured[2].path == "/api/132/envelope/"
549+
assert len(capturing_server.captured) == 1
550+
assert capturing_server.captured[0].path == "/api/132/envelope/"
547551

548552
assert captured_outcomes == [
549-
("ratelimit_backoff", "attachment"),
550-
("ratelimit_backoff", "attachment"),
553+
("ratelimit_backoff", "session"),
554+
("ratelimit_backoff", "session"),
551555
]
552556

553557

@@ -560,7 +564,7 @@ def test_data_category_limits_reporting(
560564
capturing_server.respond_with(
561565
code=response_code,
562566
headers={
563-
"X-Sentry-Rate-Limits": "4711:error:organization, 4711:attachment:organization"
567+
"X-Sentry-Rate-Limits": "4711:session:organization, 4711:attachment:organization"
564568
},
565569
)
566570

@@ -577,69 +581,89 @@ def intercepting_fetch(*args, **kwargs):
577581
# get rid of threading making things hard to track
578582
monkeypatch.setattr(client.transport._worker, "submit", lambda x: x() or True)
579583

580-
with new_scope() as scope:
581-
scope.add_attachment(bytes=b"Hello World", filename="hello.txt")
582-
client.capture_event({"type": "error"}, scope=scope)
584+
session_envelope = Envelope()
585+
session_envelope.add_item(
586+
Item(payload=PayloadRef(json={"sid": "123"}), type="session")
587+
)
588+
client.transport.capture_envelope(session_envelope)
583589
client.flush()
584590

585591
assert len(capturing_server.captured) == 1
586592
assert capturing_server.captured[0].path == "/api/132/envelope/"
587593
capturing_server.clear_captured()
588594

589-
assert set(client.transport._disabled_until) == set(["attachment", "error"])
595+
assert set(client.transport._disabled_until) == set(["attachment", "session"])
590596

591-
with new_scope() as scope:
592-
scope.add_attachment(bytes=b"Hello World", filename="hello.txt")
593-
client.capture_event({"type": "error"}, scope=scope)
594-
with new_scope() as scope:
595-
scope.add_attachment(bytes=b"Hello World", filename="hello.txt")
596-
client.capture_event({"type": "error"}, scope=scope)
597+
session_envelope = Envelope()
598+
session_envelope.add_item(
599+
Item(payload=PayloadRef(json={"sid": "456"}), type="session")
600+
)
601+
client.transport.capture_envelope(session_envelope)
602+
session_envelope = Envelope()
603+
session_envelope.add_item(
604+
Item(payload=PayloadRef(json={"sid": "789"}), type="session")
605+
)
606+
client.transport.capture_envelope(session_envelope)
597607
capturing_server.clear_captured()
598608

599609
# flush out the events but don't flush the client reports
600610
client.flush()
601611
client.transport._last_client_report_sent = 0
602612
outcomes_enabled = True
603613

604-
client.capture_event({"type": "error"})
614+
with isolation_scope() as scope:
615+
scope.add_attachment(bytes=b"Hello World", filename="hello.txt")
616+
client.capture_event({"type": "error"}, scope=scope)
605617
client.flush()
606618

607-
# the client report is flushed alongside the event (which is also dropped
608-
# because error is rate-limited)
619+
# the error goes through (not rate-limited), attachment is dropped;
620+
# the client report piggybacks on the error envelope
609621
assert len(capturing_server.captured) == 1
610622
envelope = capturing_server.captured[0].envelope
611-
assert envelope.items[0].type == "client_report"
612-
report = parse_json(envelope.items[0].get_bytes())
623+
assert envelope.items[0].type == "event"
624+
assert envelope.items[1].type == "client_report"
625+
report = parse_json(envelope.items[1].get_bytes())
613626

614627
discarded_events = report["discarded_events"]
615628

616629
assert len(discarded_events) == 2
617630
assert {
618-
"category": "error",
631+
"category": "session",
619632
"reason": "ratelimit_backoff",
620-
"quantity": 3,
633+
"quantity": 2,
621634
} in discarded_events
622635
assert {
623636
"category": "attachment",
624637
"reason": "ratelimit_backoff",
625-
"quantity": 22,
638+
"quantity": 11,
626639
} in discarded_events
627640

628641
capturing_server.clear_captured()
629642

630-
# send more events (error is still rate-limited)
631-
client.capture_event({"type": "error"})
643+
# send a session (dropped) and a normal error (goes through)
644+
session_envelope = Envelope()
645+
session_envelope.add_item(
646+
Item(payload=PayloadRef(json={"sid": "000"}), type="session")
647+
)
648+
client.transport.capture_envelope(session_envelope)
649+
client.capture_event({"type": "error", "release": "foo"})
632650
client.flush()
633651

634-
assert len(capturing_server.captured) == 1
635-
envelope = capturing_server.captured[0].envelope
652+
assert len(capturing_server.captured) == 2
653+
654+
assert len(capturing_server.captured[0].envelope.items) == 1
655+
event = capturing_server.captured[0].envelope.items[0].get_event()
656+
assert event["type"] == "error"
657+
assert event["release"] == "foo"
658+
659+
envelope = capturing_server.captured[1].envelope
636660
assert envelope.items[0].type == "client_report"
637661
report = parse_json(envelope.items[0].get_bytes())
638662

639663
discarded_events = report["discarded_events"]
640664
assert len(discarded_events) == 1
641665
assert {
642-
"category": "error",
666+
"category": "session",
643667
"reason": "ratelimit_backoff",
644668
"quantity": 1,
645669
} in discarded_events

0 commit comments

Comments
 (0)