168 """Sensitive request headers appear as [REDACTED] in log output; others are not redacted."""
171 old_redact = _ud.HTTP_REDACT_HEADERS
172 old_levels = _ud.DEBUG_LEVELS.copy()
174 def _capture(line, level, record=None):
178 _ud.HTTP_REDACT_HEADERS = frozenset([
"authorization",
"cookie"])
179 _ud.DEBUG_LEVELS[
"_REDACT_TEST_"] = 9
182 async def mock_app(scope, receive, send):
183 await send({
"type":
"http.response.start",
"status": 200,
"headers": []})
184 await send({
"type":
"http.response.body",
"body": b
""})
186 async def mock_send(message):
192 (b
"authorization", b
"Bearer secret-token"),
193 (b
"content-type", b
"application/json"),
196 middleware = DiagnosticsMiddleware(mock_app, domain=
"_REDACT_TEST_")
197 await middleware(scope,
None, mock_send)
203 _ud.HTTP_REDACT_HEADERS = old_redact
204 _ud.DEBUG_LEVELS.clear()
205 _ud.DEBUG_LEVELS.update(old_levels)
207 auth_lines = [l
for l
in logged
if "authorization" in l.lower()]
209 f
"Expected authorization header in log output; got: {logged!r}"
211 for line
in auth_lines:
212 assert "[REDACTED]" in line, (
213 f
"Authorization header must be [REDACTED], got: {line!r}"
215 ct_lines = [l
for l
in logged
if "content-type" in l.lower()]
216 for line
in ct_lines:
217 assert "[REDACTED]" not in line, (
218 f
"content-type header must NOT be redacted, got: {line!r}"
227 """Elapsed milliseconds appear in the completion log line for HTTP requests."""
230 old_levels = _ud.DEBUG_LEVELS.copy()
232 def _capture(line, level, record=None):
236 _ud.DEBUG_LEVELS[
"_ELAPSED_TEST_"] = 9
239 async def mock_app(scope, receive, send):
240 await send({
"type":
"http.response.start",
"status": 200,
"headers": []})
241 await send({
"type":
"http.response.body",
"body": b
""})
243 async def mock_send(message):
246 middleware = DiagnosticsMiddleware(mock_app, domain=
"_ELAPSED_TEST_")
253 _ud.DEBUG_LEVELS.clear()
254 _ud.DEBUG_LEVELS.update(old_levels)
256 ms_lines = [l
for l
in logged
if "ms" in l]
258 f
"Expected elapsed time in milliseconds in log output, got: {logged!r}"