Skip to content

Commit 46f8edb

Browse files
committed
update tests
1 parent 4801ea4 commit 46f8edb

File tree

3 files changed

+70
-33
lines changed

3 files changed

+70
-33
lines changed

tests/sentry/event_manager/grouping/test_seer_grouping.py

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
from sentry.testutils.helpers.eventprocessing import save_new_event
1111
from sentry.testutils.helpers.features import with_feature
1212
from sentry.testutils.pytest.mocking import capture_results
13-
from sentry.utils.circuit_breaker import with_circuit_breaker
1413
from sentry.utils.types import NonNone
1514

1615

@@ -152,23 +151,6 @@ def test_obeys_seer_similarity_flags(self):
152151
assert get_seer_similar_issues_return_values[0][1] == existing_event.group
153152
assert new_event.group_id == existing_event.group_id
154153

155-
@patch("sentry.event_manager.should_call_seer_for_grouping", return_value=True)
156-
@patch("sentry.event_manager.with_circuit_breaker", wraps=with_circuit_breaker)
157-
@patch("sentry.event_manager.get_seer_similar_issues", return_value=({}, None))
158-
def test_obeys_circult_breaker(
159-
self, mock_get_seer_similar_issues: MagicMock, mock_with_circuit_breaker: MagicMock, _
160-
):
161-
with patch("sentry.utils.circuit_breaker._should_call_callback", return_value=True):
162-
save_new_event({"message": "Dogs are great!"}, self.project)
163-
assert mock_with_circuit_breaker.call_count == 1
164-
assert mock_get_seer_similar_issues.call_count == 1
165-
166-
with patch("sentry.utils.circuit_breaker._should_call_callback", return_value=False):
167-
save_new_event({"message": "Adopt don't shop"}, self.project)
168-
169-
assert mock_with_circuit_breaker.call_count == 2 # increased
170-
assert mock_get_seer_similar_issues.call_count == 1 # didn't increase
171-
172154
@patch("sentry.event_manager.should_call_seer_for_grouping", return_value=True)
173155
@patch("sentry.event_manager.get_seer_similar_issues", return_value=({}, None))
174156
def test_calls_seer_if_no_group_found(self, mock_get_seer_similar_issues: MagicMock, _):

tests/sentry/grouping/ingest/test_seer.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,18 @@ def test_obeys_project_ratelimit(self):
137137
is expected_result
138138
)
139139

140+
@with_feature("projects:similarity-embeddings-grouping")
141+
def test_obeys_circuit_breaker(self):
142+
for request_allowed, expected_result in [(True, True), (False, False)]:
143+
with patch(
144+
"sentry.grouping.ingest.seer.seer_similarity_circuit_breaker.should_allow_request",
145+
return_value=request_allowed,
146+
):
147+
assert (
148+
should_call_seer_for_grouping(self.event, self.primary_hashes)
149+
is expected_result
150+
)
151+
140152
@with_feature("projects:similarity-embeddings-grouping")
141153
def test_obeys_customized_fingerprint_check(self):
142154
default_fingerprint_event = Event(

tests/sentry/seer/similarity/test_similar_issues.py

Lines changed: 58 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -96,9 +96,17 @@ def test_no_groups_found(self, mock_seer_request: MagicMock, mock_metrics_incr:
9696
tags={"response_status": 200, "outcome": "no_similar_groups"},
9797
)
9898

99+
@mock.patch(
100+
"sentry.seer.similarity.similar_issues.seer_similarity_circuit_breaker.record_error"
101+
)
99102
@mock.patch("sentry.seer.similarity.similar_issues.metrics.incr")
100103
@mock.patch("sentry.seer.similarity.similar_issues.seer_grouping_connection_pool.urlopen")
101-
def test_bad_response_data(self, mock_seer_request: MagicMock, mock_metrics_incr: MagicMock):
104+
def test_bad_response_data(
105+
self,
106+
mock_seer_request: MagicMock,
107+
mock_metrics_incr: MagicMock,
108+
mock_record_circuit_breaker_error: MagicMock,
109+
):
102110
cases: list[tuple[Any, str]] = [
103111
(None, "AttributeError"),
104112
([], "AttributeError"),
@@ -139,14 +147,22 @@ def test_bad_response_data(self, mock_seer_request: MagicMock, mock_metrics_incr
139147
sample_rate=SIMILARITY_REQUEST_METRIC_SAMPLE_RATE,
140148
tags={"response_status": 200, "outcome": "error", "error": expected_error},
141149
)
150+
assert mock_record_circuit_breaker_error.call_count == 0
142151

143152
mock_metrics_incr.reset_mock()
144153

154+
@mock.patch(
155+
"sentry.seer.similarity.similar_issues.seer_similarity_circuit_breaker.record_error"
156+
)
145157
@mock.patch("sentry.seer.similarity.similar_issues.metrics.incr")
146158
@mock.patch("sentry.seer.similarity.similar_issues.logger")
147159
@mock.patch("sentry.seer.similarity.similar_issues.seer_grouping_connection_pool.urlopen")
148160
def test_redirect(
149-
self, mock_seer_request: MagicMock, mock_logger: MagicMock, mock_metrics_incr: MagicMock
161+
self,
162+
mock_seer_request: MagicMock,
163+
mock_logger: MagicMock,
164+
mock_metrics_incr: MagicMock,
165+
mock_record_circuit_breaker_error: MagicMock,
150166
):
151167
mock_seer_request.return_value = HTTPResponse(
152168
status=308, headers={"location": "/new/and/improved/endpoint/"}
@@ -161,12 +177,20 @@ def test_redirect(
161177
sample_rate=SIMILARITY_REQUEST_METRIC_SAMPLE_RATE,
162178
tags={"response_status": 308, "outcome": "error", "error": "Redirect"},
163179
)
180+
assert mock_record_circuit_breaker_error.call_count == 0
164181

182+
@mock.patch(
183+
"sentry.seer.similarity.similar_issues.seer_similarity_circuit_breaker.record_error"
184+
)
165185
@mock.patch("sentry.seer.similarity.similar_issues.metrics.incr")
166186
@mock.patch("sentry.seer.similarity.similar_issues.logger")
167187
@mock.patch("sentry.seer.similarity.similar_issues.seer_grouping_connection_pool.urlopen")
168188
def test_request_error(
169-
self, mock_seer_request: MagicMock, mock_logger: MagicMock, mock_metrics_incr: MagicMock
189+
self,
190+
mock_seer_request: MagicMock,
191+
mock_logger: MagicMock,
192+
mock_metrics_incr: MagicMock,
193+
mock_record_circuit_breaker_error: MagicMock,
170194
):
171195
for request_error, expected_error_tag in [
172196
(TimeoutError, "TimeoutError"),
@@ -192,25 +216,44 @@ def test_request_error(
192216
sample_rate=SIMILARITY_REQUEST_METRIC_SAMPLE_RATE,
193217
tags={"outcome": "error", "error": expected_error_tag},
194218
)
219+
assert mock_record_circuit_breaker_error.call_count == 1
220+
221+
mock_logger.warning.reset_mock()
222+
mock_metrics_incr.reset_mock()
223+
mock_record_circuit_breaker_error.reset_mock()
195224

225+
@mock.patch(
226+
"sentry.seer.similarity.similar_issues.seer_similarity_circuit_breaker.record_error"
227+
)
196228
@mock.patch("sentry.seer.similarity.similar_issues.metrics.incr")
197229
@mock.patch("sentry.seer.similarity.similar_issues.logger")
198230
@mock.patch("sentry.seer.similarity.similar_issues.seer_grouping_connection_pool.urlopen")
199231
def test_error_status(
200-
self, mock_seer_request: MagicMock, mock_logger: MagicMock, mock_metrics_incr: MagicMock
232+
self,
233+
mock_seer_request: MagicMock,
234+
mock_logger: MagicMock,
235+
mock_metrics_incr: MagicMock,
236+
mock_record_circuit_breaker_error: MagicMock,
201237
):
202-
mock_seer_request.return_value = HTTPResponse("No soup for you", status=403)
238+
for response, status, counts_for_circuit_breaker in [
239+
("No soup for you", 403, False),
240+
("No soup, period", 500, True),
241+
]:
242+
mock_seer_request.return_value = HTTPResponse(response, status=status)
203243

204-
assert get_similarity_data_from_seer(self.request_params) == []
205-
mock_logger.error.assert_called_with(
206-
f"Received 403 when calling Seer endpoint {SEER_SIMILAR_ISSUES_URL}.",
207-
extra={"response_data": "No soup for you"},
208-
)
209-
mock_metrics_incr.assert_any_call(
210-
"seer.similar_issues_request",
211-
sample_rate=SIMILARITY_REQUEST_METRIC_SAMPLE_RATE,
212-
tags={"response_status": 403, "outcome": "error", "error": "RequestError"},
213-
)
244+
assert get_similarity_data_from_seer(self.request_params) == []
245+
mock_logger.error.assert_called_with(
246+
f"Received {status} when calling Seer endpoint {SEER_SIMILAR_ISSUES_URL}.",
247+
extra={"response_data": response},
248+
)
249+
mock_metrics_incr.assert_any_call(
250+
"seer.similar_issues_request",
251+
sample_rate=SIMILARITY_REQUEST_METRIC_SAMPLE_RATE,
252+
tags={"response_status": status, "outcome": "error", "error": "RequestError"},
253+
)
254+
assert mock_record_circuit_breaker_error.call_count == (
255+
1 if counts_for_circuit_breaker else 0
256+
)
214257

215258
@mock.patch("sentry.seer.similarity.similar_issues.seer_grouping_connection_pool.urlopen")
216259
def test_returns_sorted_results(self, mock_seer_request: MagicMock):

0 commit comments

Comments
 (0)