Browse Source

Add pytest configuration as util for reusability

David Cramer 10 years ago
parent
commit
66cdb5cd31
2 changed files with 121 additions and 112 deletions
  1. 5 112
      conftest.py
  2. 116 0
      src/sentry/utils/pytest.py

+ 5 - 112
conftest.py

@@ -1,117 +1,10 @@
-from django.conf import settings
-import mock
+from __future__ import absolute_import
+
 import sys
-import os
 import os.path
 
 sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'src'))
 
-
-def pytest_configure(config):
-    import warnings
-    warnings.filterwarnings('error', '', Warning, r'(sentry|raven)')
-
-    if not settings.configured:
-        os.environ['DJANGO_SETTINGS_MODULE'] = 'sentry.conf.server'
-
-    os.environ['RECAPTCHA_TESTING'] = 'True'
-
-    test_db = os.environ.get('DB', 'sqlite')
-    if test_db == 'mysql':
-        settings.DATABASES['default'].update({
-            'ENGINE': 'django.db.backends.mysql',
-            'NAME': 'sentry',
-            'USER': 'root',
-        })
-    elif test_db == 'postgres':
-        settings.DATABASES['default'].update({
-            'ENGINE': 'django.db.backends.postgresql_psycopg2',
-            'USER': 'postgres',
-            'NAME': 'sentry',
-        })
-    elif test_db == 'sqlite':
-        settings.DATABASES['default'].update({
-            'ENGINE': 'django.db.backends.sqlite3',
-            'NAME': ':memory:',
-        })
-
-    # http://djangosnippets.org/snippets/646/
-    class InvalidVarException(object):
-        def __mod__(self, missing):
-            try:
-                missing_str = unicode(missing)
-            except:
-                missing_str = 'Failed to create string representation'
-            raise Exception('Unknown template variable %r %s' % (missing, missing_str))
-
-        def __contains__(self, search):
-            if search == '%s':
-                return True
-            return False
-
-    settings.TEMPLATE_DEBUG = True
-    # settings.TEMPLATE_STRING_IF_INVALID = InvalidVarException()
-
-    # Disable static compiling in tests
-    settings.STATIC_BUNDLES = {}
-
-    # override a few things with our test specifics
-    settings.INSTALLED_APPS = tuple(settings.INSTALLED_APPS) + (
-        'tests',
-    )
-    # Need a predictable key for tests that involve checking signatures
-    settings.SENTRY_PUBLIC = False
-
-    # This speeds up the tests considerably, pbkdf2 is by design, slow.
-    settings.PASSWORD_HASHERS = [
-        'django.contrib.auth.hashers.MD5PasswordHasher',
-    ]
-
-    # Replace real sudo middleware with our mock sudo middleware
-    # to assert that the user is always in sudo mode
-    middleware = list(settings.MIDDLEWARE_CLASSES)
-    sudo = middleware.index('sentry.middleware.sudo.SudoMiddleware')
-    middleware[sudo] = 'tests.middleware.SudoMiddleware'
-    settings.MIDDLEWARE_CLASSES = tuple(middleware)
-
-    # enable draft features
-    settings.SENTRY_ENABLE_EXPLORE_CODE = True
-    settings.SENTRY_ENABLE_EXPLORE_USERS = True
-    settings.SENTRY_ENABLE_EMAIL_REPLIES = True
-
-    settings.SENTRY_REDIS_OPTIONS = {'hosts': {0: {'db': 9}}}
-
-    settings.SENTRY_ALLOW_ORIGIN = '*'
-
-    settings.SENTRY_TSDB = 'sentry.tsdb.inmemory.InMemoryTSDB'
-    settings.SENTRY_TSDB_OPTIONS = {}
-
-    settings.RECAPTCHA_PUBLIC_KEY = 'a' * 40
-    settings.RECAPTCHA_PRIVATE_KEY = 'b' * 40
-
-    settings.CELERY_ALWAYS_EAGER = False
-
-    settings.CACHES = {
-        'default': {
-            'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
-        }
-    }
-
-    # Disable South in tests as it is sending incorrect create signals
-    settings.SOUTH_TESTS_MIGRATE = False
-
-    # django mail uses socket.getfqdn which doesn't play nice if our
-    # networking isn't stable
-    patcher = mock.patch('socket.getfqdn', return_value='localhost')
-    patcher.start()
-
-    from sentry.utils.runner import initialize_receivers
-    initialize_receivers()
-
-    from sentry.testutils.cases import flush_redis
-    flush_redis()
-
-
-def pytest_runtest_teardown(item):
-    from sentry.app import tsdb
-    tsdb.flush()
+pytest_plugins = [
+    'sentry.utils.pytest'
+]

+ 116 - 0
src/sentry/utils/pytest.py

@@ -0,0 +1,116 @@
+from __future__ import absolute_import
+
+import mock
+import os
+
+from django.conf import settings
+
+
+def pytest_configure(config):
+    import warnings
+    warnings.filterwarnings('error', '', Warning, r'(sentry|raven)')
+
+    if not settings.configured:
+        os.environ['DJANGO_SETTINGS_MODULE'] = 'sentry.conf.server'
+
+    os.environ['RECAPTCHA_TESTING'] = 'True'
+
+    test_db = os.environ.get('DB', 'sqlite')
+    if test_db == 'mysql':
+        settings.DATABASES['default'].update({
+            'ENGINE': 'django.db.backends.mysql',
+            'NAME': 'sentry',
+            'USER': 'root',
+        })
+    elif test_db == 'postgres':
+        settings.DATABASES['default'].update({
+            'ENGINE': 'django.db.backends.postgresql_psycopg2',
+            'USER': 'postgres',
+            'NAME': 'sentry',
+        })
+    elif test_db == 'sqlite':
+        settings.DATABASES['default'].update({
+            'ENGINE': 'django.db.backends.sqlite3',
+            'NAME': ':memory:',
+        })
+
+    # http://djangosnippets.org/snippets/646/
+    class InvalidVarException(object):
+        def __mod__(self, missing):
+            try:
+                missing_str = unicode(missing)
+            except:
+                missing_str = 'Failed to create string representation'
+            raise Exception('Unknown template variable %r %s' % (missing, missing_str))
+
+        def __contains__(self, search):
+            if search == '%s':
+                return True
+            return False
+
+    settings.TEMPLATE_DEBUG = True
+    # settings.TEMPLATE_STRING_IF_INVALID = InvalidVarException()
+
+    # Disable static compiling in tests
+    settings.STATIC_BUNDLES = {}
+
+    # override a few things with our test specifics
+    settings.INSTALLED_APPS = tuple(settings.INSTALLED_APPS) + (
+        'tests',
+    )
+    # Need a predictable key for tests that involve checking signatures
+    settings.SENTRY_PUBLIC = False
+
+    # This speeds up the tests considerably, pbkdf2 is by design, slow.
+    settings.PASSWORD_HASHERS = [
+        'django.contrib.auth.hashers.MD5PasswordHasher',
+    ]
+
+    # Replace real sudo middleware with our mock sudo middleware
+    # to assert that the user is always in sudo mode
+    middleware = list(settings.MIDDLEWARE_CLASSES)
+    sudo = middleware.index('sentry.middleware.sudo.SudoMiddleware')
+    middleware[sudo] = 'tests.middleware.SudoMiddleware'
+    settings.MIDDLEWARE_CLASSES = tuple(middleware)
+
+    # enable draft features
+    settings.SENTRY_ENABLE_EXPLORE_CODE = True
+    settings.SENTRY_ENABLE_EXPLORE_USERS = True
+    settings.SENTRY_ENABLE_EMAIL_REPLIES = True
+
+    settings.SENTRY_REDIS_OPTIONS = {'hosts': {0: {'db': 9}}}
+
+    settings.SENTRY_ALLOW_ORIGIN = '*'
+
+    settings.SENTRY_TSDB = 'sentry.tsdb.inmemory.InMemoryTSDB'
+    settings.SENTRY_TSDB_OPTIONS = {}
+
+    settings.RECAPTCHA_PUBLIC_KEY = 'a' * 40
+    settings.RECAPTCHA_PRIVATE_KEY = 'b' * 40
+
+    settings.CELERY_ALWAYS_EAGER = False
+
+    settings.CACHES = {
+        'default': {
+            'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
+        }
+    }
+
+    # Disable South in tests as it is sending incorrect create signals
+    settings.SOUTH_TESTS_MIGRATE = False
+
+    # django mail uses socket.getfqdn which doesn't play nice if our
+    # networking isn't stable
+    patcher = mock.patch('socket.getfqdn', return_value='localhost')
+    patcher.start()
+
+    from sentry.utils.runner import initialize_receivers
+    initialize_receivers()
+
+    from sentry.testutils.cases import flush_redis
+    flush_redis()
+
+
+def pytest_runtest_teardown(item):
+    from sentry.app import tsdb
+    tsdb.flush()