From ea7c5e2600f34346dffc29650a439187f8b95fe0 Mon Sep 17 00:00:00 2001 From: Wilhelm Klopp Date: Tue, 10 Jun 2025 15:18:52 +0200 Subject: [PATCH 1/3] Output attempted address in strict mode --- mocket/mode.py | 21 +++++++++++++++++---- mocket/socket.py | 2 +- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/mocket/mode.py b/mocket/mode.py index e1da7955..06cd3731 100644 --- a/mocket/mode.py +++ b/mocket/mode.py @@ -31,7 +31,10 @@ def is_allowed(self, location: str | tuple[str, int]) -> bool: return host_allowed or location in self.STRICT_ALLOWED @staticmethod - def raise_not_allowed() -> NoReturn: + def raise_not_allowed( + address: tuple[str, int] | None = None, + data: bytes | None = None, + ) -> NoReturn: current_entries = [ (location, "\n ".join(map(str, entries))) for location, entries in Mocket._entries.items() @@ -39,7 +42,17 @@ def raise_not_allowed() -> NoReturn: formatted_entries = "\n".join( [f" {location}:\n {entries}" for location, entries in current_entries] ) - raise StrictMocketException( - "Mocket tried to use the real `socket` module while STRICT mode was active.\n" - f"Registered entries:\n{formatted_entries}" + msg = ( + "Mocket tried to use the real `socket` module while STRICT mode was active." ) + if address: + host, port = address + msg += f"\nAttempted address: {host}:{port}" + if data: + from mocket.compat import decode_from_bytes + + preview = decode_from_bytes(data).split("\r\n", 1)[0][:200] + msg += f"\nFirst request line: {preview}" + + msg += f"\nRegistered entries:\n{formatted_entries}" + raise StrictMocketException(msg) diff --git a/mocket/socket.py b/mocket/socket.py index 496c9124..cc498a5f 100644 --- a/mocket/socket.py +++ b/mocket/socket.py @@ -229,7 +229,7 @@ def recv(self, buffersize: int, flags: int | None = None) -> bytes: def true_sendall(self, data: bytes, *args: Any, **kwargs: Any) -> bytes: if not MocketMode().is_allowed(self._address): - MocketMode.raise_not_allowed() + MocketMode.raise_not_allowed(self._address, data) # try to get the response from recordings if Mocket._record_storage: From 716172a8a4f53e618fca9f202ba1db0274b77397 Mon Sep 17 00:00:00 2001 From: Wilhelm Klopp Date: Tue, 10 Jun 2025 15:41:42 +0200 Subject: [PATCH 2/3] Update test --- tests/test_mode.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/test_mode.py b/tests/test_mode.py index ea5905b0..7d4e212d 100644 --- a/tests/test_mode.py +++ b/tests/test_mode.py @@ -52,6 +52,8 @@ def test_strict_mode_error_message(): str(exc_info.value) == """ Mocket tried to use the real `socket` module while STRICT mode was active. +Attempted address: httpbin.local:80 +First request line: GET /ip HTTP/1.1 Registered entries: ('httpbin.local', 80): Entry(method='GET', schema='http', location=('httpbin.local', 80), path='/user.agent', query='') From 8b3a70672ca7801591c4a3ba0a52fcd03d67d406 Mon Sep 17 00:00:00 2001 From: Wilhelm Klopp Date: Tue, 10 Jun 2025 19:11:59 +0200 Subject: [PATCH 3/3] retry build