|
3 | 3 | from sentry.eventstore.base import Filter |
4 | 4 | from sentry.eventstore.models import Event |
5 | 5 | from sentry.eventstore.snuba.backend import SnubaEventStorage |
6 | | -from sentry.issues.grouptype import ( |
7 | | - PerformanceRenderBlockingAssetSpanGroupType, |
8 | | - PerformanceSlowDBQueryGroupType, |
9 | | -) |
10 | | -from sentry.issues.query import apply_performance_conditions |
| 6 | +from sentry.issues.grouptype import PerformanceNPlusOneGroupType |
11 | 7 | from sentry.testutils import SnubaTestCase, TestCase |
| 8 | +from sentry.testutils.cases import PerformanceIssueTestCase |
12 | 9 | from sentry.testutils.helpers.datetime import before_now, iso_format |
13 | 10 | from sentry.testutils.silo import region_silo_test |
14 | 11 | from sentry.utils import snuba |
15 | 12 | from sentry.utils.samples import load_data |
16 | 13 |
|
17 | 14 |
|
18 | 15 | @region_silo_test(stable=True) |
19 | | -class SnubaEventStorageTest(TestCase, SnubaTestCase): |
| 16 | +class SnubaEventStorageTest(TestCase, SnubaTestCase, PerformanceIssueTestCase): |
20 | 17 | def setUp(self): |
21 | 18 | super().setUp() |
22 | 19 | self.min_ago = iso_format(before_now(minutes=1)) |
@@ -66,23 +63,27 @@ def setUp(self): |
66 | 63 | self.transaction_event = self.store_event(data=event_data, project_id=self.project1.id) |
67 | 64 |
|
68 | 65 | event_data_2 = load_data( |
69 | | - platform="transaction", |
70 | | - fingerprint=[f"{PerformanceRenderBlockingAssetSpanGroupType.type_id}-group3"], |
| 66 | + platform="transaction-n-plus-one", |
| 67 | + fingerprint=[f"{PerformanceNPlusOneGroupType.type_id}-group3"], |
71 | 68 | ) |
72 | 69 | event_data_2["timestamp"] = iso_format(before_now(seconds=30)) |
73 | 70 | event_data_2["start_timestamp"] = iso_format(before_now(seconds=31)) |
74 | 71 | event_data_2["event_id"] = "e" * 32 |
75 | 72 |
|
76 | | - self.transaction_event_2 = self.store_event(data=event_data_2, project_id=self.project2.id) |
| 73 | + self.transaction_event_2 = self.create_performance_issue( |
| 74 | + event_data=event_data_2, project_id=self.project2.id |
| 75 | + ) |
77 | 76 |
|
78 | 77 | event_data_3 = load_data( |
79 | | - "transaction", fingerprint=[f"{PerformanceSlowDBQueryGroupType.type_id}-group3"] |
| 78 | + "transaction-n-plus-one", fingerprint=[f"{PerformanceNPlusOneGroupType.type_id}-group3"] |
80 | 79 | ) |
81 | 80 | event_data_3["timestamp"] = iso_format(before_now(seconds=30)) |
82 | 81 | event_data_3["start_timestamp"] = iso_format(before_now(seconds=31)) |
83 | 82 | event_data_3["event_id"] = "f" * 32 |
84 | 83 |
|
85 | | - self.transaction_event_3 = self.store_event(data=event_data_3, project_id=self.project2.id) |
| 84 | + self.transaction_event_3 = self.create_performance_issue( |
| 85 | + event_data=event_data_3, project_id=self.project2.id |
| 86 | + ) |
86 | 87 |
|
87 | 88 | """ |
88 | 89 | event_data_4 = load_data("transaction") |
@@ -182,23 +183,23 @@ def test_get_event_by_id_cached(self): |
182 | 183 | with mock.patch("sentry.eventstore.snuba.backend.Event") as mock_event: |
183 | 184 | dummy_event = Event( |
184 | 185 | project_id=self.project2.id, |
185 | | - event_id="f" * 32, |
186 | | - data={"something": "hi", "timestamp": self.min_ago}, |
| 186 | + event_id="1" * 32, |
| 187 | + data={"something": "hi", "timestamp": self.min_ago, "type": "error"}, |
187 | 188 | ) |
188 | 189 | mock_event.return_value = dummy_event |
189 | | - event = self.eventstore.get_event_by_id(self.project2.id, "f" * 32) |
| 190 | + event = self.eventstore.get_event_by_id(self.project2.id, "1" * 32) |
190 | 191 | # Result of query should be None |
191 | 192 | assert event is None |
192 | 193 |
|
193 | 194 | # Now we store the event properly, so it will exist in Snuba. |
194 | 195 | self.store_event( |
195 | | - data={"event_id": "f" * 32, "timestamp": self.min_ago}, |
| 196 | + data={"event_id": "1" * 32, "timestamp": self.min_ago, "type": "error"}, |
196 | 197 | project_id=self.project2.id, |
197 | 198 | ) |
198 | 199 |
|
199 | 200 | # Make sure that the negative cache isn't causing the event to not show up |
200 | | - event = self.eventstore.get_event_by_id(self.project2.id, "f" * 32) |
201 | | - assert event.event_id == "f" * 32 |
| 201 | + event = self.eventstore.get_event_by_id(self.project2.id, "1" * 32) |
| 202 | + assert event.event_id == "1" * 32 |
202 | 203 | assert event.project_id == self.project2.id |
203 | 204 | assert event.group_id == event.group.id |
204 | 205 |
|
@@ -299,19 +300,23 @@ def test_adjacent_event_ids_same_timestamp(self): |
299 | 300 | assert next_event is None |
300 | 301 |
|
301 | 302 | def test_transaction_get_next_prev_event_id(self): |
302 | | - group = self.transaction_event_2.groups[0] |
| 303 | + group = self.transaction_event_2.group |
303 | 304 | _filter = Filter( |
304 | 305 | project_ids=[self.project2.id], |
305 | | - conditions=apply_performance_conditions([], group), |
| 306 | + group_ids=[group.id], |
| 307 | + ) |
| 308 | + event = self.eventstore.get_event_by_id( |
| 309 | + self.project2.id, self.transaction_event_3.event_id, group_id=group.id |
306 | 310 | ) |
307 | | - event = self.eventstore.get_event_by_id(self.project2.id, "f" * 32) |
308 | 311 | prev_event, next_event = self.eventstore.get_adjacent_event_ids(event, filter=_filter) |
309 | 312 |
|
310 | | - assert prev_event == (str(self.project2.id), "e" * 32) |
| 313 | + assert prev_event == (str(self.project2.id), self.transaction_event_2.event_id) |
311 | 314 | assert next_event is None |
312 | 315 |
|
313 | | - event = self.eventstore.get_event_by_id(self.project2.id, "e" * 32) |
| 316 | + event = self.eventstore.get_event_by_id( |
| 317 | + self.project2.id, self.transaction_event_2.event_id, group_id=group.id |
| 318 | + ) |
314 | 319 | prev_event, next_event = self.eventstore.get_adjacent_event_ids(event, filter=_filter) |
315 | 320 |
|
316 | 321 | assert prev_event is None |
317 | | - assert next_event == (str(self.project2.id), "f" * 32) |
| 322 | + assert next_event == (str(self.project2.id), self.transaction_event_3.event_id) |
0 commit comments