|
1 | 1 | import base64
|
| 2 | +import sys |
2 | 3 | import json
|
| 4 | +import inspect |
| 5 | +import asyncio |
3 | 6 | import os
|
4 | 7 | from unittest import mock
|
5 | 8 |
|
|
8 | 11 | from channels.testing import HttpCommunicator
|
9 | 12 | from sentry_sdk import capture_message
|
10 | 13 | from sentry_sdk.integrations.django import DjangoIntegration
|
| 14 | +from sentry_sdk.integrations.django.asgi import _asgi_middleware_mixin_factory |
11 | 15 | from tests.integrations.django.myapp.asgi import channels_application
|
12 | 16 |
|
13 | 17 | try:
|
@@ -526,3 +530,65 @@ async def test_asgi_request_body(
|
526 | 530 | assert event["request"]["data"] == expected_data
|
527 | 531 | else:
|
528 | 532 | assert "data" not in event["request"]
|
| 533 | + |
| 534 | + |
| 535 | +@pytest.mark.asyncio |
| 536 | +@pytest.mark.skipif( |
| 537 | + sys.version_info >= (3, 12), |
| 538 | + reason=( |
| 539 | + "asyncio.iscoroutinefunction has been replaced in 3.12 by inspect.iscoroutinefunction" |
| 540 | + ), |
| 541 | +) |
| 542 | +async def test_asgi_mixin_iscoroutinefunction_before_3_12(): |
| 543 | + sentry_asgi_mixin = _asgi_middleware_mixin_factory(lambda: None) |
| 544 | + |
| 545 | + async def get_response(): ... |
| 546 | + |
| 547 | + instance = sentry_asgi_mixin(get_response) |
| 548 | + assert asyncio.iscoroutinefunction(instance) |
| 549 | + |
| 550 | + |
| 551 | +@pytest.mark.skipif( |
| 552 | + sys.version_info >= (3, 12), |
| 553 | + reason=( |
| 554 | + "asyncio.iscoroutinefunction has been replaced in 3.12 by inspect.iscoroutinefunction" |
| 555 | + ), |
| 556 | +) |
| 557 | +def test_asgi_mixin_iscoroutinefunction_when_not_async_before_3_12(): |
| 558 | + sentry_asgi_mixin = _asgi_middleware_mixin_factory(lambda: None) |
| 559 | + |
| 560 | + def get_response(): ... |
| 561 | + |
| 562 | + instance = sentry_asgi_mixin(get_response) |
| 563 | + assert not asyncio.iscoroutinefunction(instance) |
| 564 | + |
| 565 | + |
| 566 | +@pytest.mark.asyncio |
| 567 | +@pytest.mark.skipif( |
| 568 | + sys.version_info < (3, 12), |
| 569 | + reason=( |
| 570 | + "asyncio.iscoroutinefunction has been replaced in 3.12 by inspect.iscoroutinefunction" |
| 571 | + ), |
| 572 | +) |
| 573 | +async def test_asgi_mixin_iscoroutinefunction_after_3_12(): |
| 574 | + sentry_asgi_mixin = _asgi_middleware_mixin_factory(lambda: None) |
| 575 | + |
| 576 | + async def get_response(): ... |
| 577 | + |
| 578 | + instance = sentry_asgi_mixin(get_response) |
| 579 | + assert inspect.iscoroutinefunction(instance) |
| 580 | + |
| 581 | + |
| 582 | +@pytest.mark.skipif( |
| 583 | + sys.version_info < (3, 12), |
| 584 | + reason=( |
| 585 | + "asyncio.iscoroutinefunction has been replaced in 3.12 by inspect.iscoroutinefunction" |
| 586 | + ), |
| 587 | +) |
| 588 | +def test_asgi_mixin_iscoroutinefunction_when_not_async_after_3_12(): |
| 589 | + sentry_asgi_mixin = _asgi_middleware_mixin_factory(lambda: None) |
| 590 | + |
| 591 | + def get_response(): ... |
| 592 | + |
| 593 | + instance = sentry_asgi_mixin(get_response) |
| 594 | + assert not inspect.iscoroutinefunction(instance) |
0 commit comments