25
25
AuthenticationError ,
26
26
SimpleUser ,
27
27
)
28
+ from starlette .exceptions import HTTPException
28
29
from starlette .middleware import Middleware
29
30
from starlette .middleware .authentication import AuthenticationMiddleware
30
31
from starlette .middleware .trustedhost import TrustedHostMiddleware
@@ -258,7 +259,7 @@ async def my_send(*args, **kwargs):
258
259
259
260
260
261
@pytest .mark .asyncio
261
- async def test_starlettrequestextractor_content_length (sentry_init ):
262
+ async def test_starletterequestextractor_content_length (sentry_init ):
262
263
scope = SCOPE .copy ()
263
264
scope ["headers" ] = [
264
265
[b"content-length" , str (len (json .dumps (BODY_JSON ))).encode ()],
@@ -270,7 +271,7 @@ async def test_starlettrequestextractor_content_length(sentry_init):
270
271
271
272
272
273
@pytest .mark .asyncio
273
- async def test_starlettrequestextractor_cookies (sentry_init ):
274
+ async def test_starletterequestextractor_cookies (sentry_init ):
274
275
starlette_request = starlette .requests .Request (SCOPE )
275
276
extractor = StarletteRequestExtractor (starlette_request )
276
277
@@ -281,7 +282,7 @@ async def test_starlettrequestextractor_cookies(sentry_init):
281
282
282
283
283
284
@pytest .mark .asyncio
284
- async def test_starlettrequestextractor_json (sentry_init ):
285
+ async def test_starletterequestextractor_json (sentry_init ):
285
286
starlette_request = starlette .requests .Request (SCOPE )
286
287
287
288
# Mocking async `_receive()` that works in Python 3.7+
@@ -295,7 +296,7 @@ async def test_starlettrequestextractor_json(sentry_init):
295
296
296
297
297
298
@pytest .mark .asyncio
298
- async def test_starlettrequestextractor_form (sentry_init ):
299
+ async def test_starletterequestextractor_form (sentry_init ):
299
300
scope = SCOPE .copy ()
300
301
scope ["headers" ] = [
301
302
[b"content-type" , b"multipart/form-data; boundary=fd721ef49ea403a6" ],
@@ -323,7 +324,7 @@ async def test_starlettrequestextractor_form(sentry_init):
323
324
324
325
325
326
@pytest .mark .asyncio
326
- async def test_starlettrequestextractor_body_consumed_twice (
327
+ async def test_starletterequestextractor_body_consumed_twice (
327
328
sentry_init , capture_events
328
329
):
329
330
"""
@@ -361,7 +362,7 @@ async def test_starlettrequestextractor_body_consumed_twice(
361
362
362
363
363
364
@pytest .mark .asyncio
364
- async def test_starlettrequestextractor_extract_request_info_too_big (sentry_init ):
365
+ async def test_starletterequestextractor_extract_request_info_too_big (sentry_init ):
365
366
sentry_init (
366
367
send_default_pii = True ,
367
368
integrations = [StarletteIntegration ()],
@@ -392,7 +393,7 @@ async def test_starlettrequestextractor_extract_request_info_too_big(sentry_init
392
393
393
394
394
395
@pytest .mark .asyncio
395
- async def test_starlettrequestextractor_extract_request_info (sentry_init ):
396
+ async def test_starletterequestextractor_extract_request_info (sentry_init ):
396
397
sentry_init (
397
398
send_default_pii = True ,
398
399
integrations = [StarletteIntegration ()],
@@ -423,7 +424,7 @@ async def test_starlettrequestextractor_extract_request_info(sentry_init):
423
424
424
425
425
426
@pytest .mark .asyncio
426
- async def test_starlettrequestextractor_extract_request_info_no_pii (sentry_init ):
427
+ async def test_starletterequestextractor_extract_request_info_no_pii (sentry_init ):
427
428
sentry_init (
428
429
send_default_pii = False ,
429
430
integrations = [StarletteIntegration ()],
@@ -1078,3 +1079,57 @@ def test_transaction_name_in_middleware(
1078
1079
assert (
1079
1080
transaction_event ["transaction_info" ]["source" ] == expected_transaction_source
1080
1081
)
1082
+
1083
+
1084
+ @pytest .mark .parametrize (
1085
+ "failed_request_status_codes,status_code,expected_error" ,
1086
+ [
1087
+ (None , 500 , True ),
1088
+ (None , 400 , False ),
1089
+ ([500 , 501 ], 500 , True ),
1090
+ ([500 , 501 ], 401 , False ),
1091
+ ([range (400 , 499 )], 401 , True ),
1092
+ ([range (400 , 499 )], 500 , False ),
1093
+ ([range (400 , 499 ), range (500 , 599 )], 300 , False ),
1094
+ ([range (400 , 499 ), range (500 , 599 )], 403 , True ),
1095
+ ([range (400 , 499 ), range (500 , 599 )], 503 , True ),
1096
+ ([range (400 , 403 ), 500 , 501 ], 401 , True ),
1097
+ ([range (400 , 403 ), 500 , 501 ], 405 , False ),
1098
+ ([range (400 , 403 ), 500 , 501 ], 501 , True ),
1099
+ ([range (400 , 403 ), 500 , 501 ], 503 , False ),
1100
+ ([None ], 500 , False ),
1101
+ ],
1102
+ )
1103
+ def test_configurable_status_codes (
1104
+ sentry_init ,
1105
+ capture_events ,
1106
+ failed_request_status_codes ,
1107
+ status_code ,
1108
+ expected_error ,
1109
+ ):
1110
+ sentry_init (
1111
+ integrations = [
1112
+ StarletteIntegration (
1113
+ failed_request_status_codes = failed_request_status_codes
1114
+ )
1115
+ ]
1116
+ )
1117
+
1118
+ events = capture_events ()
1119
+
1120
+ async def _error (request ):
1121
+ raise HTTPException (status_code )
1122
+
1123
+ app = starlette .applications .Starlette (
1124
+ routes = [
1125
+ starlette .routing .Route ("/error" , _error , methods = ["GET" ]),
1126
+ ],
1127
+ )
1128
+
1129
+ client = TestClient (app )
1130
+ client .get ("/error" )
1131
+
1132
+ if expected_error :
1133
+ assert len (events ) == 1
1134
+ else :
1135
+ assert not events
0 commit comments