test_group.py 3.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. from unittest import mock
  2. from sentry.event_manager import _pull_out_data
  3. from sentry.models import Group
  4. from sentry.testutils import SnubaTestCase, TestCase
  5. from sentry.testutils.helpers.datetime import before_now, iso_format
  6. from sentry.testutils.silo import region_silo_test
  7. from sentry.types.issues import GroupType
  8. from sentry.utils.samples import load_data
  9. @region_silo_test
  10. class GroupTestSnuba(TestCase, SnubaTestCase):
  11. def test_get_oldest_latest_for_environments(self):
  12. project = self.create_project()
  13. min_ago = iso_format(before_now(minutes=1))
  14. self.store_event(
  15. data={
  16. "event_id": "a" * 32,
  17. "environment": "production",
  18. "timestamp": min_ago,
  19. "fingerprint": ["group-1"],
  20. },
  21. project_id=project.id,
  22. )
  23. self.store_event(
  24. data={
  25. "event_id": "b" * 32,
  26. "environment": "production",
  27. "timestamp": min_ago,
  28. "fingerprint": ["group-1"],
  29. },
  30. project_id=project.id,
  31. )
  32. self.store_event(
  33. data={"event_id": "c" * 32, "timestamp": min_ago, "fingerprint": ["group-1"]},
  34. project_id=project.id,
  35. )
  36. group = Group.objects.first()
  37. assert group.get_latest_event_for_environments().event_id == "c" * 32
  38. assert group.get_latest_event_for_environments(["staging"]) is None
  39. assert group.get_latest_event_for_environments(["production"]).event_id == "b" * 32
  40. assert group.get_oldest_event_for_environments().event_id == "a" * 32
  41. assert (
  42. group.get_oldest_event_for_environments(["staging", "production"]).event_id == "a" * 32
  43. )
  44. assert group.get_oldest_event_for_environments(["staging"]) is None
  45. def test_perf_issue(self):
  46. perf_group = self.create_group(type=GroupType.PERFORMANCE_N_PLUS_ONE_DB_QUERIES.value)
  47. def hack_pull_out_data(jobs, projects):
  48. _pull_out_data(jobs, projects)
  49. for job in jobs:
  50. job["event"].groups = [perf_group]
  51. return jobs, projects
  52. event_data_1 = load_data("transaction")
  53. event_data_1["timestamp"] = iso_format(before_now(seconds=10))
  54. event_data_1["start_timestamp"] = iso_format(before_now(seconds=11))
  55. event_data_1["event_id"] = "d" * 32
  56. event_data_2 = load_data("transaction")
  57. event_data_2["timestamp"] = iso_format(before_now(seconds=20))
  58. event_data_2["start_timestamp"] = iso_format(before_now(seconds=21))
  59. event_data_2["event_id"] = "f" * 32
  60. event_data_3 = load_data("transaction")
  61. event_data_3["timestamp"] = iso_format(before_now(seconds=30))
  62. event_data_3["start_timestamp"] = iso_format(before_now(seconds=31))
  63. event_data_3["event_id"] = "f" * 32
  64. with mock.patch("sentry.event_manager._pull_out_data", hack_pull_out_data):
  65. self.transaction_event_1 = self.store_event(
  66. data=event_data_1, project_id=self.project.id
  67. )
  68. self.transaction_event_2 = self.store_event(
  69. data=event_data_2, project_id=self.project.id
  70. )
  71. self.transaction_event_3 = self.store_event(
  72. data=event_data_3, project_id=self.project.id
  73. )
  74. with self.feature("organizations:performance-issues"):
  75. assert perf_group.get_latest_event_for_environments().event_id == "d" * 32
  76. assert perf_group.get_oldest_event_for_environments().event_id == "f" * 32