|
7 | 7 | import sentry_sdk |
8 | 8 | from sentry_sdk import capture_message |
9 | 9 | from sentry_sdk.integrations.wsgi import SentryWsgiMiddleware |
10 | | -from sentry_sdk._werkzeug import get_host |
| 10 | +from sentry_sdk._werkzeug import get_host, _get_headers |
11 | 11 |
|
12 | 12 |
|
13 | 13 | @pytest.fixture |
@@ -76,9 +76,24 @@ def next(self): |
76 | 76 | "ham", |
77 | 77 | id="ignore x-forwarded-host", |
78 | 78 | ), |
| 79 | + pytest.param( |
| 80 | + { |
| 81 | + "SERVER_NAME": "2001:0db8:85a3:0042:1000:8a2e:0370:7334", |
| 82 | + "SERVER_PORT": "8080", |
| 83 | + }, |
| 84 | + "[2001:0db8:85a3:0042:1000:8a2e:0370:7334]:8080", |
| 85 | + id="IPv6, custom port", |
| 86 | + ), |
| 87 | + pytest.param( |
| 88 | + {"SERVER_NAME": "eggs"}, |
| 89 | + "eggs", |
| 90 | + id="name, no port", |
| 91 | + ), |
79 | 92 | ), |
80 | 93 | ) |
| 94 | +# |
81 | 95 | # https://github.com/pallets/werkzeug/blob/main/tests/test_wsgi.py#L60 |
| 96 | +# |
82 | 97 | def test_get_host(environ, expect): |
83 | 98 | environ.setdefault("wsgi.url_scheme", "http") |
84 | 99 | assert get_host(environ) == expect |
@@ -106,26 +121,19 @@ def test_basic(sentry_init, crashing_app, capture_events): |
106 | 121 | } |
107 | 122 |
|
108 | 123 |
|
109 | | -def test_basic_forwarded_host(sentry_init, crashing_app, capture_events): |
110 | | - sentry_init(send_default_pii=True) |
111 | | - app = SentryWsgiMiddleware(crashing_app, use_x_forwarded_for=True) |
112 | | - client = Client(app) |
113 | | - events = capture_events() |
114 | | - |
115 | | - with pytest.raises(ZeroDivisionError): |
116 | | - client.get("/", environ_overrides={"HTTP_X_FORWARDED_HOST": "foobarbaz:80"}) |
117 | | - |
118 | | - (event,) = events |
119 | | - |
120 | | - assert event["transaction"] == "generic WSGI request" |
121 | | - |
122 | | - assert event["request"] == { |
123 | | - "env": {"SERVER_NAME": "localhost", "SERVER_PORT": "80"}, |
124 | | - "headers": {"Host": "localhost", "X-Forwarded-Host": "foobarbaz:80"}, |
125 | | - "method": "GET", |
126 | | - "query_string": "", |
127 | | - "url": "http://foobarbaz/", |
128 | | - } |
| 124 | +@pytest.mark.parametrize( |
| 125 | + ("environ", "expect"), |
| 126 | + ( |
| 127 | + pytest.param( |
| 128 | + {"CONTENT_TYPE": "text/html", "CONTENT_LENGTH": "0"}, |
| 129 | + [("Content-Length", "0"), ("Content-Type", "text/html")], |
| 130 | + id="headers", |
| 131 | + ), |
| 132 | + ), |
| 133 | +) |
| 134 | +def test_headers(environ, expect): |
| 135 | + environ.setdefault("wsgi.url_scheme", "http") |
| 136 | + assert sorted(_get_headers(environ)) == expect |
129 | 137 |
|
130 | 138 |
|
131 | 139 | @pytest.mark.parametrize("path_info", ("bark/", "/bark/")) |
|
0 commit comments