|
6 | 6 |
|
7 | 7 | import sentry_sdk |
8 | 8 | from sentry_sdk import capture_message |
9 | | -from sentry_sdk.integrations.wsgi import SentryWsgiMiddleware |
| 9 | +from sentry_sdk.integrations.wsgi import SentryWsgiMiddleware, _ScopedResponse |
10 | 10 |
|
11 | 11 |
|
12 | 12 | @pytest.fixture |
@@ -500,3 +500,50 @@ def dogpark(environ, start_response): |
500 | 500 | (event,) = events |
501 | 501 |
|
502 | 502 | assert event["contexts"]["trace"]["origin"] == "auto.dogpark.deluxe" |
| 503 | + |
| 504 | + |
| 505 | +@pytest.mark.parametrize( |
| 506 | + "has_file_wrapper, has_fileno, expect_wrapped", |
| 507 | + [ |
| 508 | + (True, True, False), # both conditions met → unwrapped |
| 509 | + (False, True, True), # no file_wrapper → wrapped |
| 510 | + (True, False, True), # no fileno → wrapped |
| 511 | + (False, False, True), # neither condition → wrapped |
| 512 | + ], |
| 513 | +) |
| 514 | +def test_file_response_wrapping( |
| 515 | + sentry_init, has_file_wrapper, has_fileno, expect_wrapped |
| 516 | +): |
| 517 | + sentry_init() |
| 518 | + |
| 519 | + response_mock = mock.MagicMock() |
| 520 | + if not has_fileno: |
| 521 | + del response_mock.fileno |
| 522 | + |
| 523 | + def app(environ, start_response): |
| 524 | + start_response("200 OK", []) |
| 525 | + return response_mock |
| 526 | + |
| 527 | + environ_extra = {} |
| 528 | + if has_file_wrapper: |
| 529 | + environ_extra["wsgi.file_wrapper"] = mock.MagicMock() |
| 530 | + |
| 531 | + middleware = SentryWsgiMiddleware(app) |
| 532 | + |
| 533 | + result = middleware( |
| 534 | + { |
| 535 | + "REQUEST_METHOD": "GET", |
| 536 | + "PATH_INFO": "/", |
| 537 | + "SERVER_NAME": "localhost", |
| 538 | + "SERVER_PORT": "80", |
| 539 | + "wsgi.url_scheme": "http", |
| 540 | + "wsgi.input": mock.MagicMock(), |
| 541 | + **environ_extra, |
| 542 | + }, |
| 543 | + lambda status, headers: None, |
| 544 | + ) |
| 545 | + |
| 546 | + if expect_wrapped: |
| 547 | + assert isinstance(result, _ScopedResponse) |
| 548 | + else: |
| 549 | + assert result is response_mock |
0 commit comments