Browse Source

Add integration test so I don't break GET requests again

Matt Robenolt 11 years ago
parent
commit
6ff4e49c04
3 changed files with 36 additions and 3 deletions
  1. 2 0
      conftest.py
  2. 24 3
      src/sentry/testutils/cases.py
  3. 10 0
      tests/integration/tests.py

+ 2 - 0
conftest.py

@@ -68,3 +68,5 @@ def pytest_configure(config):
     settings.SENTRY_ENABLE_EXPLORE_CODE = True
     settings.SENTRY_ENABLE_EXPLORE_USERS = True
     settings.SENTRY_ENABLE_EMAIL_REPLIES = True
+
+    settings.SENTRY_ALLOW_ORIGIN = '*'

+ 24 - 3
src/sentry/testutils/cases.py

@@ -12,6 +12,7 @@ __all__ = ('TestCase', 'TransactionTestCase', 'APITestCase')
 
 import base64
 import os.path
+import urllib
 
 from django.conf import settings
 from django.contrib.auth import login
@@ -90,11 +91,14 @@ class BaseTestCase(Fixtures, Exam):
         super(BaseTestCase, self)._pre_setup()
 
     def _makeMessage(self, data):
-        return base64.b64encode(json.dumps(data))
+        return json.dumps(data)
+
+    def _makePostMessage(self, data):
+        return base64.b64encode(self._makeMessage(data))
 
     def _postWithKey(self, data, key=None):
         resp = self.client.post(reverse('sentry-api-store'), {
-            'data': self._makeMessage(data),
+            'data': self._makePostMessage(data),
             'key': settings.SENTRY_KEY,
         })
         return resp
@@ -104,7 +108,7 @@ class BaseTestCase(Fixtures, Exam):
             key = self.projectkey.public_key
             secret = self.projectkey.secret_key
 
-        message = self._makeMessage(data)
+        message = self._makePostMessage(data)
         resp = self.client.post(
             reverse('sentry-api-store'), message,
             content_type='application/octet-stream',
@@ -112,6 +116,23 @@ class BaseTestCase(Fixtures, Exam):
         )
         return resp
 
+    def _getWithReferer(self, data, key=None):
+        if key is None:
+            key = self.projectkey.public_key
+
+        message = self._makeMessage(data)
+        qs = {
+            'sentry_version': '4',
+            'sentry_client': 'raven-js/lol',
+            'sentry_key': key,
+            'sentry_data': message,
+        }
+        resp = self.client.get(
+            '%s?%s' % (reverse('sentry-api-store', args=(self.project.pk,)), urllib.urlencode(qs)),
+            HTTP_REFERER='http://lol.com/'
+        )
+        return resp
+
     _postWithSignature = _postWithHeader
     _postWithNewSignature = _postWithHeader
 

+ 10 - 0
tests/integration/tests.py

@@ -161,6 +161,16 @@ class SentryRemoteTest(TestCase):
         self.assertEquals(instance.site, 'not_a_real_site')
         self.assertEquals(instance.level, 40)
 
+    def test_correct_data_with_get(self):
+        kwargs = {'message': 'hello', 'server_name': 'not_dcramer.local', 'level': 40, 'site': 'not_a_real_site'}
+        resp = self._getWithReferer(kwargs)
+        self.assertEquals(resp.status_code, 200, resp.content)
+        instance = Event.objects.get()
+        self.assertEquals(instance.message, 'hello')
+        self.assertEquals(instance.server_name, 'not_dcramer.local')
+        self.assertEquals(instance.level, 40)
+        self.assertEquals(instance.site, 'not_a_real_site')
+
     # def test_byte_sequence(self):
     #     """
     #     invalid byte sequence for encoding "UTF8": 0xedb7af