Подключает sentry-sdk ^2.18 к FastAPI и Celery-воркеру: - Интеграции: StarletteIntegration, FastApiIntegration, CeleryIntegration, SqlalchemyIntegration, HttpxIntegration, LoggingIntegration - SDK инициализируется до создания FastAPI app (module-level), а также отдельно в celery_app.py для Celery-процесса - Без GLITCHTIP_DSN — SDK no-op, контейнер стартует без ошибок - profiles_sample_rate=0.0 — GlitchTip профили не поддерживает - GIT_SHA из ENV как release-тег; fallback "unknown"
59 lines
2.4 KiB
Python
59 lines
2.4 KiB
Python
"""Unit-тесты логики инициализации GlitchTip SDK.
|
||
|
||
Проверяем что init-блок в main.py / celery_app.py вызывает sentry_sdk.init()
|
||
только при непустом GLITCHTIP_DSN.
|
||
"""
|
||
|
||
from unittest.mock import patch
|
||
|
||
import sentry_sdk
|
||
|
||
|
||
def test_sdk_imports_without_error() -> None:
|
||
"""Все интеграции импортируются без ModuleNotFoundError."""
|
||
from sentry_sdk.integrations.celery import CeleryIntegration
|
||
from sentry_sdk.integrations.fastapi import FastApiIntegration
|
||
from sentry_sdk.integrations.httpx import HttpxIntegration
|
||
from sentry_sdk.integrations.logging import LoggingIntegration
|
||
from sentry_sdk.integrations.sqlalchemy import SqlalchemyIntegration
|
||
from sentry_sdk.integrations.starlette import StarletteIntegration
|
||
|
||
# Проверяем что классы инстанцируются без ошибок
|
||
assert StarletteIntegration()
|
||
assert FastApiIntegration()
|
||
assert CeleryIntegration()
|
||
assert SqlalchemyIntegration()
|
||
assert HttpxIntegration()
|
||
assert LoggingIntegration()
|
||
|
||
|
||
def test_no_sdk_init_when_dsn_empty() -> None:
|
||
"""Если GLITCHTIP_DSN пустой, sentry_sdk.init() не должен вызываться."""
|
||
with patch("sentry_sdk.init") as mock_init:
|
||
# Симулируем логику guard из main.py: if settings.glitchtip_dsn: sentry_sdk.init(...)
|
||
glitchtip_dsn = None
|
||
if glitchtip_dsn:
|
||
sentry_sdk.init(dsn=glitchtip_dsn)
|
||
mock_init.assert_not_called()
|
||
|
||
|
||
def test_sdk_init_called_when_dsn_set() -> None:
|
||
"""Если GLITCHTIP_DSN задан, sentry_sdk.init() вызывается с правильными параметрами."""
|
||
dsn = "https://key@errors.gendsgn.ru/1"
|
||
with patch("sentry_sdk.init") as mock_init:
|
||
glitchtip_dsn = dsn
|
||
if glitchtip_dsn:
|
||
sentry_sdk.init(
|
||
dsn=glitchtip_dsn,
|
||
environment="test",
|
||
release="unknown",
|
||
traces_sample_rate=0.05,
|
||
profiles_sample_rate=0.0,
|
||
send_default_pii=False,
|
||
integrations=[],
|
||
)
|
||
mock_init.assert_called_once()
|
||
call_kwargs = mock_init.call_args.kwargs
|
||
assert call_kwargs["dsn"] == dsn
|
||
assert call_kwargs["send_default_pii"] is False
|
||
assert call_kwargs["profiles_sample_rate"] == 0.0
|