Files
hermes-webui/tests/test_issue2775_log_request.py
T

55 lines
1.6 KiB
Python

import json
from server import Handler
def test_log_request_handles_malformed_request_without_path(capsys):
"""Malformed request lines can call log_request before path is assigned."""
handler = Handler.__new__(Handler)
handler.command = None
Handler.log_request(handler, "400")
line = capsys.readouterr().out.strip()
assert line.startswith("[webui] ")
record = json.loads(line.removeprefix("[webui] "))
assert record["method"] == "-"
assert record["path"] == "-"
assert record["status"] == 400
assert record["remote"] == "-"
def test_log_request_includes_remote_address(capsys):
handler = Handler.__new__(Handler)
handler.command = "POST"
handler.path = "/api/auth/login"
handler.client_address = ("192.0.2.10", 54321)
handler.headers = {}
Handler.log_request(handler, "401")
line = capsys.readouterr().out.strip()
record = json.loads(line.removeprefix("[webui] "))
assert record["remote"] == "192.0.2.10"
assert "forwarded_for" not in record
def test_log_request_includes_first_forwarded_for_address(capsys):
class Headers:
def get(self, key):
assert key == "X-Forwarded-For"
return "203.0.113.7, 198.51.100.9"
handler = Handler.__new__(Handler)
handler.command = "POST"
handler.path = "/api/auth/login"
handler.client_address = ("192.0.2.10", 54321)
handler.headers = Headers()
Handler.log_request(handler, "401")
line = capsys.readouterr().out.strip()
record = json.loads(line.removeprefix("[webui] "))
assert record["remote"] == "192.0.2.10"
assert record["forwarded_for"] == "203.0.113.7"