1010import pytest
1111from channels .testing import HttpCommunicator
1212from sentry_sdk import capture_message
13+ from sentry_sdk .tracing import Span
1314from sentry_sdk .integrations .django import DjangoIntegration
1415from sentry_sdk .integrations .django .asgi import _asgi_middleware_mixin_factory
1516from tests .integrations .django .myapp .asgi import channels_application
2930
3031@pytest .mark .parametrize ("application" , APPS )
3132@pytest .mark .asyncio
32- @pytest .mark .forked
3333@pytest .mark .skipif (
3434 django .VERSION < (3 , 0 ), reason = "Django ASGI support shipped in 3.0"
3535)
@@ -86,7 +86,6 @@ async def test_basic(sentry_init, capture_events, application):
8686
8787@pytest .mark .parametrize ("application" , APPS )
8888@pytest .mark .asyncio
89- @pytest .mark .forked
9089@pytest .mark .skipif (
9190 django .VERSION < (3 , 1 ), reason = "async views have been introduced in Django 3.1"
9291)
@@ -119,7 +118,6 @@ async def test_async_views(sentry_init, capture_events, application):
119118@pytest .mark .parametrize ("application" , APPS )
120119@pytest .mark .parametrize ("endpoint" , ["/sync/thread_ids" , "/async/thread_ids" ])
121120@pytest .mark .asyncio
122- @pytest .mark .forked
123121@pytest .mark .skipif (
124122 django .VERSION < (3 , 1 ), reason = "async views have been introduced in Django 3.1"
125123)
@@ -165,7 +163,6 @@ async def test_active_thread_id(
165163
166164
167165@pytest .mark .asyncio
168- @pytest .mark .forked
169166@pytest .mark .skipif (
170167 django .VERSION < (3 , 1 ), reason = "async views have been introduced in Django 3.1"
171168)
@@ -208,7 +205,6 @@ async def test_async_views_concurrent_execution(sentry_init, settings):
208205
209206
210207@pytest .mark .asyncio
211- @pytest .mark .forked
212208@pytest .mark .skipif (
213209 django .VERSION < (3 , 1 ), reason = "async views have been introduced in Django 3.1"
214210)
@@ -255,12 +251,11 @@ async def test_async_middleware_that_is_function_concurrent_execution(
255251
256252
257253@pytest .mark .asyncio
258- @pytest .mark .forked
259254@pytest .mark .skipif (
260255 django .VERSION < (3 , 1 ), reason = "async views have been introduced in Django 3.1"
261256)
262257async def test_async_middleware_spans (
263- sentry_init , render_span_tree , capture_events , settings
258+ sentry_init , SpanTreeEqualUnorderedSiblings , capture_events , settings
264259):
265260 settings .MIDDLEWARE = [
266261 "django.contrib.sessions.middleware.SessionMiddleware" ,
@@ -286,26 +281,57 @@ async def test_async_middleware_spans(
286281
287282 (transaction ,) = events
288283
289- assert (
290- render_span_tree (transaction )
291- == """\
292- - op="http.server": description=null
293- - op="event.django": description="django.db.reset_queries"
294- - op="event.django": description="django.db.close_old_connections"
295- - op="middleware.django": description="django.contrib.sessions.middleware.SessionMiddleware.__acall__"
296- - op="middleware.django": description="django.contrib.auth.middleware.AuthenticationMiddleware.__acall__"
297- - op="middleware.django": description="django.middleware.csrf.CsrfViewMiddleware.__acall__"
298- - op="middleware.django": description="tests.integrations.django.myapp.settings.TestMiddleware.__acall__"
299- - op="middleware.django": description="django.middleware.csrf.CsrfViewMiddleware.process_view"
300- - op="view.render": description="simple_async_view"
301- - op="event.django": description="django.db.close_old_connections"
302- - op="event.django": description="django.core.cache.close_caches"
303- - op="event.django": description="django.core.handlers.base.reset_urlconf\" """
284+ http_server_span = Span (op = "http.server" , name = None )
285+ session_middleware_span = Span (
286+ op = "middleware.django" ,
287+ name = "django.contrib.sessions.middleware.SessionMiddleware.__acall__" ,
288+ )
289+ authentication_middleware_span = Span (
290+ op = "middleware.django" ,
291+ name = "django.contrib.auth.middleware.AuthenticationMiddleware.__acall__" ,
292+ )
293+ csrf_view_middleware_span = Span (
294+ op = "middleware.django" ,
295+ name = "django.middleware.csrf.CsrfViewMiddleware.__acall__" ,
296+ )
297+ test_middleware_span = Span (
298+ op = "middleware.django" ,
299+ name = "tests.integrations.django.myapp.settings.TestMiddleware.__acall__" ,
300+ )
301+
302+ span_tree = {
303+ http_server_span : {
304+ session_middleware_span ,
305+ Span (op = "event.django" , name = "django.db.reset_queries" ),
306+ Span (op = "event.django" , name = "django.db.close_old_connections" ),
307+ Span (op = "event.django" , name = "django.db.close_old_connections" ),
308+ Span (op = "event.django" , name = "django.core.cache.close_caches" ),
309+ Span (op = "event.django" , name = "django.core.handlers.base.reset_urlconf" ),
310+ },
311+ session_middleware_span : {authentication_middleware_span },
312+ authentication_middleware_span : {csrf_view_middleware_span },
313+ csrf_view_middleware_span : {test_middleware_span },
314+ test_middleware_span : {
315+ Span (
316+ op = "middleware.django" ,
317+ name = "django.middleware.csrf.CsrfViewMiddleware.process_view" ,
318+ ),
319+ Span (op = "view.render" , name = "simple_async_view" ),
320+ },
321+ }
322+
323+ assert transaction == SpanTreeEqualUnorderedSiblings (
324+ http_server_span ,
325+ span_tree ,
326+ check_trace_id = False ,
327+ check_op = True ,
328+ check_status = False ,
329+ check_origin = False ,
330+ check_name = True ,
304331 )
305332
306333
307334@pytest .mark .asyncio
308- @pytest .mark .forked
309335@pytest .mark .skipif (
310336 django .VERSION < (3 , 1 ), reason = "async views have been introduced in Django 3.1"
311337)
@@ -333,7 +359,6 @@ async def test_has_trace_if_performance_enabled(sentry_init, capture_events):
333359
334360
335361@pytest .mark .asyncio
336- @pytest .mark .forked
337362@pytest .mark .skipif (
338363 django .VERSION < (3 , 1 ), reason = "async views have been introduced in Django 3.1"
339364)
@@ -364,7 +389,6 @@ async def test_has_trace_if_performance_disabled(sentry_init, capture_events):
364389
365390
366391@pytest .mark .asyncio
367- @pytest .mark .forked
368392@pytest .mark .skipif (
369393 django .VERSION < (3 , 1 ), reason = "async views have been introduced in Django 3.1"
370394)
@@ -398,7 +422,6 @@ async def test_trace_from_headers_if_performance_enabled(sentry_init, capture_ev
398422
399423
400424@pytest .mark .asyncio
401- @pytest .mark .forked
402425@pytest .mark .skipif (
403426 django .VERSION < (3 , 1 ), reason = "async views have been introduced in Django 3.1"
404427)
@@ -529,7 +552,6 @@ async def test_trace_from_headers_if_performance_disabled(sentry_init, capture_e
529552 ],
530553)
531554@pytest .mark .asyncio
532- @pytest .mark .forked
533555@pytest .mark .skipif (
534556 django .VERSION < (3 , 1 ), reason = "async views have been introduced in Django 3.1"
535557)
0 commit comments