test_message_filters.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. from sentry.ingest.inbound_filters import (
  2. _browser_extensions_filter,
  3. _legacy_browsers_filter,
  4. _localhost_filter,
  5. _web_crawlers_filter,
  6. )
  7. from sentry.models import ProjectOption
  8. from sentry.testutils import RelayStoreHelper, TransactionTestCase
  9. from sentry.utils.safe import set_path
  10. class FilterTests(RelayStoreHelper, TransactionTestCase):
  11. def _get_message(self):
  12. return {}
  13. def _set_filter_state(self, flt, state):
  14. ProjectOption.objects.set_value(project=self.project, key=f"filters:{flt.id}", value=state)
  15. def test_should_not_filter_simple_messages(self):
  16. # baseline test (so we know everything works as expected)
  17. message = self._get_message()
  18. self.post_and_retrieve_event(message)
  19. def _get_message_with_bad_ip(self):
  20. message = self._get_message()
  21. set_path(message, "user", "ip_address", value="127.0.0.1")
  22. return message
  23. def test_should_filter_local_ip_addresses_when_enabled(self):
  24. self._set_filter_state(_localhost_filter, "1")
  25. message = self._get_message_with_bad_ip()
  26. event = self.post_and_try_retrieve_event(message)
  27. assert event is None
  28. def test_should_not_filter_bad_ip_addresses_when_disabled(self):
  29. self._set_filter_state(_localhost_filter, "0")
  30. message = self._get_message_with_bad_ip()
  31. self.post_and_retrieve_event(message)
  32. def _get_message_with_bad_extension(self):
  33. message = self._get_message()
  34. set_path(message, "platform", value="javascript")
  35. set_path(
  36. message,
  37. "exception",
  38. value={"values": [{"type": "Error", "value": "http://loading.retry.widdit.com/"}]},
  39. )
  40. return message
  41. def test_should_filter_browser_extensions_when_enabled(self):
  42. self._set_filter_state(_browser_extensions_filter, "1")
  43. message = self._get_message_with_bad_extension()
  44. event = self.post_and_try_retrieve_event(message)
  45. assert event is None
  46. def test_should_not_filter_browser_extensions_when_disabled(self):
  47. self._set_filter_state(_browser_extensions_filter, "0")
  48. message = self._get_message_with_bad_extension()
  49. self.post_and_retrieve_event(message)
  50. def _get_message_from_webcrawler(self):
  51. message = self._get_message()
  52. set_path(
  53. message,
  54. "request",
  55. value={
  56. "url": "http://example.com",
  57. "method": "GET",
  58. "headers": [["User-Agent", "Mediapartners-Google"]],
  59. },
  60. )
  61. return message
  62. def test_should_filter_web_crawlers_when_enabled(self):
  63. self._set_filter_state(_web_crawlers_filter, "1")
  64. message = self._get_message_from_webcrawler()
  65. event = self.post_and_try_retrieve_event(message)
  66. assert event is None
  67. def test_should_not_filter_web_crawlers_when_disabled(self):
  68. self._set_filter_state(_web_crawlers_filter, "0")
  69. message = self._get_message_from_webcrawler()
  70. self.post_and_retrieve_event(message)
  71. def _get_message_from_legacy_browser(self):
  72. ie_5_user_agent = (
  73. "Mozilla/4.0 (compatible; MSIE 5.50; Windows NT; SiteKiosk 4.9; SiteCoach 1.0)"
  74. )
  75. message = self._get_message()
  76. set_path(message, "platform", value="javascript")
  77. set_path(
  78. message,
  79. "request",
  80. value={
  81. "url": "http://example.com",
  82. "method": "GET",
  83. "headers": [["User-Agent", ie_5_user_agent]],
  84. },
  85. )
  86. return message
  87. def test_should_filter_legacy_browsers(self):
  88. self._set_filter_state(_legacy_browsers_filter, "1")
  89. message = self._get_message_from_legacy_browser()
  90. event = self.post_and_try_retrieve_event(message)
  91. assert event is None
  92. def test_should_not_filter_legacy_browsers_when_disabled(self):
  93. self._set_filter_state(_legacy_browsers_filter, "0")
  94. message = self._get_message_from_legacy_browser()
  95. self.post_and_retrieve_event(message)