tests.py 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. from __future__ import absolute_import, print_function
  2. from io import BytesIO
  3. from uuid import uuid4
  4. from sentry.models.eventattachment import EventAttachment
  5. from sentry.testutils import TransactionTestCase, RelayStoreHelper
  6. from sentry.testutils.helpers.datetime import iso_format, before_now
  7. class SentryRemoteTest(RelayStoreHelper, TransactionTestCase):
  8. # used to be test_ungzipped_data
  9. def test_simple_data(self):
  10. event_data = {"message": "hello", "timestamp": iso_format(before_now(seconds=1))}
  11. event = self.post_and_retrieve_event(event_data)
  12. assert event.message == "hello"
  13. def test_csp(self):
  14. event_data = {
  15. "csp-report": {
  16. "document-uri": "https://example.com/foo/bar",
  17. "referrer": "https://www.google.com/",
  18. "violated-directive": "default-src self",
  19. "original-policy": "default-src self; report-uri /csp-hotline.php",
  20. "blocked-uri": "http://evilhackerscripts.com",
  21. }
  22. }
  23. event = self.post_and_retrieve_security_report(event_data)
  24. assert event.message == "Blocked 'default-src' from 'evilhackerscripts.com'"
  25. def test_hpkp(self):
  26. event_data = {
  27. "date-time": "2014-04-06T13:00:50Z",
  28. "hostname": "www.example.com",
  29. "port": 443,
  30. "effective-expiration-date": "2014-05-01T12:40:50Z",
  31. "include-subdomains": False,
  32. "served-certificate-chain": [
  33. "-----BEGIN CERTIFICATE-----\n MIIEBDCCAuygBQUAMEIxCzAJBgNVBAYTAlVT\n -----END CERTIFICATE-----"
  34. ],
  35. "validated-certificate-chain": [
  36. "-----BEGIN CERTIFICATE-----\n MIIEBDCCAuygAwIBAgIDCzAJBgNVBAYTAlVT\n -----END CERTIFICATE-----"
  37. ],
  38. "known-pins": [
  39. 'pin-sha256="d6qzRu9zOECb90Uez27xWltNsj0e1Md7GkYYkVoZWmM="',
  40. 'pin-sha256="E9CZ9INDbd+2eRQozYqqbQ2yXLVKB9+xcprMF+44U1g="',
  41. ],
  42. }
  43. event = self.post_and_retrieve_security_report(event_data)
  44. assert event.message == "Public key pinning validation failed for 'www.example.com'"
  45. assert event.group.title == "Public key pinning validation failed for 'www.example.com'"
  46. def test_expect_ct(self):
  47. event_data = {
  48. "expect-ct-report": {
  49. "date-time": "2014-04-06T13:00:50Z",
  50. "hostname": "www.example.com",
  51. "port": 443,
  52. "effective-expiration-date": "2014-05-01T12:40:50Z",
  53. "served-certificate-chain": [
  54. "-----BEGIN CERTIFICATE-----\nABC\n-----END CERTIFICATE-----"
  55. ],
  56. "validated-certificate-chain": [
  57. "-----BEGIN CERTIFICATE-----\nCDE\n-----END CERTIFICATE-----"
  58. ],
  59. "scts": [
  60. {
  61. "version": 1,
  62. "status": "invalid",
  63. "source": "embedded",
  64. "serialized_sct": "ABCD==",
  65. }
  66. ],
  67. }
  68. }
  69. event = self.post_and_retrieve_security_report(event_data)
  70. assert event.message == "Expect-CT failed for 'www.example.com'"
  71. assert event.group.title == "Expect-CT failed for 'www.example.com'"
  72. def test_expect_staple(self):
  73. event_data = {
  74. "expect-staple-report": {
  75. "date-time": "2014-04-06T13:00:50Z",
  76. "hostname": "www.example.com",
  77. "port": 443,
  78. "response-status": "ERROR_RESPONSE",
  79. "cert-status": "REVOKED",
  80. "effective-expiration-date": "2014-05-01T12:40:50Z",
  81. "served-certificate-chain": [
  82. "-----BEGIN CERTIFICATE-----\nABC\n-----END CERTIFICATE-----"
  83. ],
  84. "validated-certificate-chain": [
  85. "-----BEGIN CERTIFICATE-----\nCDE\n-----END CERTIFICATE-----"
  86. ],
  87. }
  88. }
  89. event = self.post_and_retrieve_security_report(event_data)
  90. assert event.message == "Expect-Staple failed for 'www.example.com'"
  91. assert event.group.title == "Expect-Staple failed for 'www.example.com'"
  92. def test_standalone_attachment(self):
  93. event_id = uuid4().hex
  94. # First, ingest the attachment and ensure it is saved
  95. files = {"some_file": ("hello.txt", BytesIO(b"Hello World!"))}
  96. self.post_and_retrieve_attachment(event_id, files)
  97. # Next, ingest an error event
  98. event = self.post_and_retrieve_event({"event_id": event_id, "message": "my error"})
  99. assert event.event_id == event_id
  100. assert event.group_id
  101. # Finally, fetch the updated attachment and compare the group id
  102. attachment = EventAttachment.objects.get(project_id=self.project.id, event_id=event_id)
  103. assert attachment.group_id == event.group_id