diff --git a/swh/deposit/gunicorn_config.py b/swh/deposit/gunicorn_config.py new file mode 100644 --- /dev/null +++ b/swh/deposit/gunicorn_config.py @@ -0,0 +1,14 @@ +# Copyright (C) 2019 The Software Heritage developers +# See the AUTHORS file at the top-level directory of this distribution +# License: GNU General Public License version 3, or any later version +# See top-level LICENSE file for more information + +from sentry_sdk.integrations.django import DjangoIntegration + +from swh.core.api.gunicorn_config import * # noqa +from swh.core.api.gunicorn_config import post_fork as _post_fork + + +def post_fork(server, worker): # type: ignore + _post_fork(server, worker, + flask=False, sentry_integrations=[DjangoIntegration()]) diff --git a/swh/deposit/tests/test_gunicorn_config.py b/swh/deposit/tests/test_gunicorn_config.py new file mode 100644 --- /dev/null +++ b/swh/deposit/tests/test_gunicorn_config.py @@ -0,0 +1,47 @@ +# Copyright (C) 2019 The Software Heritage developers +# See the AUTHORS file at the top-level directory of this distribution +# License: GNU General Public License version 3, or any later version +# See top-level LICENSE file for more information + +import os +from unittest.mock import patch + +import swh.deposit.gunicorn_config as gunicorn_config + + +def test_post_fork_default(): + with patch('sentry_sdk.init') as sentry_sdk_init: + gunicorn_config.post_fork(None, None) + + sentry_sdk_init.assert_not_called() + + +def test_post_fork_with_dsn_env(): + django_integration = object() # unique object to check for equality + with patch('swh.deposit.gunicorn_config.DjangoIntegration', + new=lambda: django_integration): + with patch('sentry_sdk.init') as sentry_sdk_init: + with patch.dict(os.environ, {'SWH_SENTRY_DSN': 'test_dsn'}): + gunicorn_config.post_fork(None, None) + + sentry_sdk_init.assert_called_once_with( + dsn='test_dsn', + integrations=[django_integration], + debug=False, + ) + + +def test_post_fork_debug(): + django_integration = object() # unique object to check for equality + with patch('swh.deposit.gunicorn_config.DjangoIntegration', + new=lambda: django_integration): + with patch('sentry_sdk.init') as sentry_sdk_init: + with patch.dict(os.environ, {'SWH_SENTRY_DSN': 'test_dsn', + 'SWH_SENTRY_DEBUG': '1'}): + gunicorn_config.post_fork(None, None) + + sentry_sdk_init.assert_called_once_with( + dsn='test_dsn', + integrations=[django_integration], + debug=True, + )