Skip to content

Commit f45aa62

Browse files
committed
test(sentry): now test works correctly with SentrySDK 2.x; do not test 1.x version, it's deprecated
1 parent 1fbf02f commit f45aa62

File tree

2 files changed

+57
-56
lines changed

2 files changed

+57
-56
lines changed

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ starlette = ">0.0.0"
2626
uvicorn = "^0.17.0"
2727
rst_include = "^2.1.0"
2828
pytest = "^6.2"
29-
sentry-sdk = "^1.3.0"
29+
sentry-sdk = "^2.0"
3030
requests = ">0.0.0"
3131
httpx = ">=0.23.0,<0.24.0" # FastAPI/Starlette extra test deps
3232

tests/test_sentry.py

Lines changed: 56 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@
55
import pytest
66
import sentry_sdk
77
from sentry_sdk import Transport
8-
9-
from sentry_sdk.utils import capture_internal_exceptions
8+
from sentry_sdk.envelope import Envelope
109

1110

1211
@pytest.fixture
@@ -62,100 +61,102 @@ def test_transaction_is_jsonrpc_method(
6261
]) == {'test_sentry.probe.<locals>.probe', 'test_sentry.probe.<locals>.probe2'}
6362

6463

65-
class _TestTransport(Transport):
66-
def __init__(self, capture_event_callback, capture_envelope_callback):
64+
class TestTransport(Transport):
65+
def __init__(self):
6766
Transport.__init__(self)
68-
self.capture_event = capture_event_callback
69-
self.capture_envelope = capture_envelope_callback
70-
self._queue = None
71-
72-
73-
@pytest.fixture
74-
def monkeypatch_test_transport(monkeypatch):
75-
def check_event(event):
76-
def check_string_keys(map):
77-
for key, value in map.items:
78-
assert isinstance(key, str)
79-
if isinstance(value, dict):
80-
check_string_keys(value)
81-
82-
with capture_internal_exceptions():
83-
check_string_keys(event)
84-
85-
def check_envelope(envelope):
86-
with capture_internal_exceptions():
87-
# Assert error events are sent without envelope to server, for compat.
88-
# This does not apply if any item in the envelope is an attachment.
89-
if not any(x.type == "attachment" for x in envelope.items):
90-
assert not any(item.data_category == "error" for item in envelope.items)
91-
assert not any(item.get_event() is not None for item in envelope.items)
92-
93-
def inner(client):
94-
monkeypatch.setattr(
95-
client, "transport", _TestTransport(check_event, check_envelope)
96-
)
9767

98-
return inner
68+
def capture_envelope(self, _: Envelope) -> None:
69+
"""No-op capture_envelope for tests"""
70+
pass
9971

10072

10173
@pytest.fixture
102-
def sentry_init(monkeypatch_test_transport, request):
74+
def sentry_init(request):
10375
def inner(*a, **kw):
104-
hub = sentry_sdk.Hub.current
76+
kw.setdefault("transport", TestTransport())
10577
client = sentry_sdk.Client(*a, **kw)
106-
hub.bind_client(client)
107-
if "transport" not in kw:
108-
monkeypatch_test_transport(sentry_sdk.Hub.current.client)
78+
sentry_sdk.get_global_scope().set_client(client)
10979

11080
if request.node.get_closest_marker("forked"):
11181
# Do not run isolation if the test is already running in
11282
# ultimate isolation (seems to be required for celery tests that
11383
# fork)
11484
yield inner
11585
else:
116-
with sentry_sdk.Hub(None):
86+
old_client = sentry_sdk.get_global_scope().client
87+
try:
88+
sentry_sdk.get_current_scope().set_client(None)
11789
yield inner
90+
finally:
91+
sentry_sdk.get_global_scope().set_client(old_client)
11892

11993

12094
@pytest.fixture
12195
def capture_events(monkeypatch):
12296
def inner():
12397
events = []
124-
test_client = sentry_sdk.Hub.current.client
125-
old_capture_event = test_client.transport.capture_event
98+
test_client = sentry_sdk.get_client()
12699
old_capture_envelope = test_client.transport.capture_envelope
127100

128-
def append_event(event):
129-
events.append(event)
130-
return old_capture_event(event)
131-
132-
def append_envelope(envelope):
101+
def append_event(envelope):
133102
for item in envelope:
134103
if item.headers.get("type") in ("event", "transaction"):
135-
test_client.transport.capture_event(item.payload.json)
104+
events.append(item.payload.json)
136105
return old_capture_envelope(envelope)
137106

138-
monkeypatch.setattr(test_client.transport, "capture_event", append_event)
139-
monkeypatch.setattr(test_client.transport, "capture_envelope", append_envelope)
107+
monkeypatch.setattr(test_client.transport, "capture_envelope", append_event)
108+
140109
return events
141110

142111
return inner
143112

144113

114+
@pytest.fixture
115+
def capture_envelopes(monkeypatch):
116+
def inner():
117+
envelopes = []
118+
test_client = sentry_sdk.get_client()
119+
old_capture_envelope = test_client.transport.capture_envelope
120+
121+
def append_envelope(envelope):
122+
envelopes.append(envelope)
123+
return old_capture_envelope(envelope)
124+
125+
monkeypatch.setattr(test_client.transport, "capture_envelope", append_envelope)
126+
127+
return envelopes
128+
129+
return inner
130+
131+
132+
145133
@pytest.fixture
146134
def capture_exceptions(monkeypatch):
147135
def inner():
148136
errors = set()
149-
old_capture_event = sentry_sdk.Hub.capture_event
137+
old_capture_event_hub = sentry_sdk.Hub.capture_event
138+
old_capture_event_scope = sentry_sdk.Scope.capture_event
150139

151-
def capture_event(self, event, hint=None):
140+
def capture_event_hub(self, event, hint=None, scope=None):
141+
"""
142+
Can be removed when we remove push_scope and the Hub from the SDK.
143+
"""
152144
if hint:
153145
if "exc_info" in hint:
154146
error = hint["exc_info"][1]
155147
errors.add(error)
156-
return old_capture_event(self, event, hint=hint)
148+
return old_capture_event_hub(self, event, hint=hint, scope=scope)
149+
150+
def capture_event_scope(self, event, hint=None, scope=None):
151+
if hint:
152+
if "exc_info" in hint:
153+
error = hint["exc_info"][1]
154+
errors.add(error)
155+
return old_capture_event_scope(self, event, hint=hint, scope=scope)
156+
157+
monkeypatch.setattr(sentry_sdk.Hub, "capture_event", capture_event_hub)
158+
monkeypatch.setattr(sentry_sdk.Scope, "capture_event", capture_event_scope)
157159

158-
monkeypatch.setattr(sentry_sdk.Hub, "capture_event", capture_event)
159160
return errors
160161

161-
return inner
162+
return inner

0 commit comments

Comments
 (0)