async def test_exception(app, client, sentry_calls, sentry_url): app.config['SENTRY_DSN'] = sentry_url sanic_sentry.SanicSentry(app) @app.route('/test') def simple(request): raise Exception response = await client.get('/test') assert response.status == 500 await asyncio.sleep(0.01) assert len(sentry_calls) == 1 assert sentry_calls[0][0] == 'api/1/store/' assert sentry_calls[0][1] == 'application/octet-stream' assert sentry_calls[0][2]['level'] == 40 assert sentry_calls[0][2]['tags'] == {} assert sentry_calls[0][2]['project'] == '1' assert sentry_calls[0][2]['repos'] == {} assert set(sentry_calls[0][2]['extra'].keys()) == { 'sys.argv', 'pathname', 'filename', 'stack_info', 'lineno', 'thread', 'threadName', 'processName', 'process', 'asctime' } assert len(sentry_calls[0][2]['breadcrumbs']['values']) == 1 assert sentry_calls[0][2]['breadcrumbs']['values'][0]['data'] == {} assert 'python' in sentry_calls[0][2]['modules']
async def test_simple(app, client, sentry_url, sentry_calls): app.config['SENTRY_DSN'] = sentry_url sanic_sentry.SanicSentry(app) @app.route('/test') def simple(request): return sanic.response.text('text') response = await client.get('/test') assert response.status == 200 response_text = await response.text() assert response_text == 'text' await asyncio.sleep(0.01) assert len(sentry_calls) == 0
async def test_websocket(app, websocket_client, sentry_calls, sentry_url): app.config['SENTRY_DSN'] = sentry_url sanic_sentry.SanicSentry(app) @app.websocket('/test') async def simple(request, ws): await ws.send('text') ws_conn = await websocket_client.ws_connect('/test') msg = await ws_conn.receive() assert msg.data == 'text' await ws_conn.close() await asyncio.sleep(0.01) assert len(sentry_calls) == 0
async def test_websocket_exception(app, websocket_client, sentry_calls, sentry_url): app.config['SENTRY_DSN'] = sentry_url sanic_sentry.SanicSentry(app) @app.websocket('/test') async def simple(request, ws): raise Exception ws_conn = await websocket_client.ws_connect('/test') msg = await ws_conn.receive() assert msg.type.value == 258 await ws_conn.close() await asyncio.sleep(0.01) assert len(sentry_calls) == 1
async def test_warning_not_sent(app, client, sentry_calls, sentry_url): app.config['SENTRY_DSN'] = sentry_url sanic_sentry.SanicSentry(app) @app.route('/test') def simple(request): logging.getLogger('sanic').warning('SOMETHING bad happen') return sanic.response.text('text') response = await client.get('/test') assert response.status == 200 response_text = await response.text() assert response_text == 'text' await asyncio.sleep(0.01) assert len(sentry_calls) == 0
async def test_exception_in_error_handler(app, client, sentry_calls, sentry_url): app.config['SENTRY_DSN'] = sentry_url sanic_sentry.SanicSentry(app) class CustomException(Exception): pass @app.route('/test') def simple(request): raise CustomException @app.exception(CustomException) def handle_custom(request, exception): raise Exception response = await client.get('/test') assert response.status == 500 await asyncio.sleep(0.01) assert len(sentry_calls) == 1
async def test_warning(app, client, sentry_calls, sentry_url): app.config['SENTRY_DSN'] = sentry_url app.config['SENTRY_LEVEL'] = logging.WARNING sanic_sentry.SanicSentry(app) @app.route('/test') def simple(request): try: from sanic.log import logger except ImportError: logger = logging.getLogger('sanic') logger.warning('SOMETHING bad happen') return sanic.response.text('text') response = await client.get('/test') assert response.status == 200 response_text = await response.text() assert response_text == 'text' await asyncio.sleep(0.01) assert len(sentry_calls) == 1 assert sentry_calls[0][2]['level'] == 30