from __future__ import absolute_import import os import sys from hashlib import md5 import six import pytest pytest_plugins = ["sentry.utils.pytest"] sys.path.insert(0, os.path.join(os.path.dirname(__file__), "src")) def pytest_configure(config): import warnings # XXX(dcramer): Kombu throws a warning due to transaction.commit_manually # being used warnings.filterwarnings("error", "", Warning, r"^(?!(|kombu|raven|sentry))") # always install plugins for the tests install_sentry_plugins() # add custom test markers config.addinivalue_line( "markers", "sentry_store_integration: mark test as using the sentry store endpoint and therefore using legacy code", ) config.addinivalue_line( "markers", "relay_store_integration: mark test as using the relay store endpoint" ) config.addinivalue_line("markers", "obsolete: mark test as obsolete and soon to be removed") def install_sentry_plugins(): # Sentry's pytest plugin explicitly doesn't load plugins, so let's load all of them # and ignore the fact that we're not *just* testing our own # Note: We could manually register/configure INSTALLED_APPS by traversing our entry points # or package directories, but this is easier assuming Sentry doesn't change APIs. # Note: Order of operations matters here. from sentry.runner.importer import install_plugin_apps from django.conf import settings install_plugin_apps("sentry.apps", settings) from sentry.runner.initializer import register_plugins register_plugins(settings, raise_on_plugin_load_failure=True) settings.ASANA_CLIENT_ID = "abc" settings.ASANA_CLIENT_SECRET = "123" settings.BITBUCKET_CONSUMER_KEY = "abc" settings.BITBUCKET_CONSUMER_SECRET = "123" settings.GITHUB_APP_ID = "abc" settings.GITHUB_API_SECRET = "123" # this isn't the real secret settings.SENTRY_OPTIONS["github.integration-hook-secret"] = "b3002c3e321d4b7880360d397db2ccfd" def pytest_collection_modifyitems(config, items): for item in items: total_groups = int(os.environ.get("TOTAL_TEST_GROUPS", 1)) # TODO(joshuarli): six 1.12.0 adds ensure_binary: six.ensure_binary(item.location[0]) group_num = ( int(md5(six.text_type(item.location[0]).encode("utf-8")).hexdigest(), 16) % total_groups ) marker = "group_%s" % group_num config.addinivalue_line("markers", marker) item.add_marker(getattr(pytest.mark, marker))