@@ -1642,6 +1642,90 @@ def test_rest_framework_basic(
16421642 assert event ["request" ]["headers" ]["Content-Type" ] == ct
16431643
16441644
1645+ @pytest .mark .parametrize ("span_streaming" , [True , False ])
1646+ def test_rest_framework_authentication_span (
1647+ sentry_init ,
1648+ client ,
1649+ capture_events ,
1650+ capture_items ,
1651+ render_span_tree ,
1652+ span_streaming ,
1653+ ):
1654+ pytest .importorskip ("rest_framework" )
1655+ sentry_init (
1656+ integrations = [
1657+ DjangoIntegration (middleware_spans = False , signals_spans = False ),
1658+ ],
1659+ traces_sample_rate = 1.0 ,
1660+ trace_lifecycle = "stream" if span_streaming else "static" ,
1661+ )
1662+ if span_streaming :
1663+ items = capture_items ("span" )
1664+
1665+ client .get (reverse ("rest_authenticated_hello" ))
1666+
1667+ sentry_sdk .flush ()
1668+ spans = [item .payload for item in items if item .type == "span" ]
1669+
1670+ assert (
1671+ render_span_tree (spans )
1672+ == """\
1673+ - sentry.op="http.server": name="/rest-authenticated-hello"
1674+ - sentry.op="view.authenticate": name="authenticate"\
1675+ """
1676+ )
1677+ else :
1678+ events = capture_events ()
1679+
1680+ client .get (reverse ("rest_authenticated_hello" ))
1681+
1682+ (transaction ,) = events
1683+
1684+ assert (
1685+ render_span_tree (transaction ["spans" ], transaction ["contexts" ]["trace" ])
1686+ == """\
1687+ - op="http.server": description=null
1688+ - op="view.authenticate": description="authenticate"\
1689+ """
1690+ )
1691+
1692+
1693+ @pytest .mark .parametrize ("span_streaming" , [True , False ])
1694+ def test_rest_framework_authentication_span_without_authenticators (
1695+ sentry_init ,
1696+ client ,
1697+ capture_events ,
1698+ capture_items ,
1699+ span_streaming ,
1700+ ):
1701+ pytest .importorskip ("rest_framework" )
1702+ sentry_init (
1703+ integrations = [
1704+ DjangoIntegration (middleware_spans = False , signals_spans = False ),
1705+ ],
1706+ traces_sample_rate = 1.0 ,
1707+ trace_lifecycle = "stream" if span_streaming else "static" ,
1708+ )
1709+ if span_streaming :
1710+ items = capture_items ("span" )
1711+
1712+ client .get (reverse ("rest_unauthenticated_hello" ))
1713+
1714+ sentry_sdk .flush ()
1715+ spans = [item .payload for item in items if item .type == "span" ]
1716+
1717+ # only the root span
1718+ assert len (spans ) == 1
1719+ else :
1720+ events = capture_events ()
1721+
1722+ client .get (reverse ("rest_unauthenticated_hello" ))
1723+
1724+ (transaction ,) = events
1725+
1726+ assert transaction ["spans" ] == []
1727+
1728+
16451729@pytest .mark .parametrize (
16461730 "endpoint" , ["rest_permission_denied_exc" , "permission_denied_exc" ]
16471731)
0 commit comments