From 7f6b1b4d19ac19f62dc5525198bb3d047d21ae7e Mon Sep 17 00:00:00 2001 From: Jacob Champion Date: Tue, 25 Nov 2025 10:07:29 -0800 Subject: [PATCH] WIP: truncate long JSON responses in logs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reported-by: Álvaro Herrera Discussion: https://postgr.es/m/202511251218.zfs4nu2qnh2m%40alvherre.pgsql --- .../modules/oauth_validator/t/oauth_server.py | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/test/modules/oauth_validator/t/oauth_server.py b/src/test/modules/oauth_validator/t/oauth_server.py index 0f8836aadf3..c70783ecbe4 100755 --- a/src/test/modules/oauth_validator/t/oauth_server.py +++ b/src/test/modules/oauth_validator/t/oauth_server.py @@ -257,13 +257,33 @@ class OAuthHandler(http.server.BaseHTTPRequestHandler): return token + def _log_response(self, js: JsonObject) -> None: + """ + Trims the response JSON, if necessary, and logs it for later debugging. + """ + # At the moment the biggest problem for tests is the _pad_ member, which + # is a megabyte in size, so truncate that to something more reasonable. + if "_pad_" in js: + pad = js["_pad_"] + + # Don't modify the original dict. + js = dict(js) + js["_pad_"] = pad[:64] + f"[...truncated from {len(pad)} bytes]" + + resp = json.dumps(js).encode("ascii") + self.log_message("sending JSON response: %s", resp) + + # If you've tripped this assertion, please truncate the new addition as + # above, or else come up with a new strategy. + assert len(resp) < 1024, "_log_response must be adjusted for new JSON" + def _send_json(self, js: JsonObject) -> None: """ Sends the provided JSON dict as an application/json response. self._response_code can be modified to send JSON error responses. """ resp = json.dumps(js).encode("ascii") - self.log_message("sending JSON response: %s", resp) + self._log_response(js) self.send_response(self._response_code) self.send_header("Content-Type", self._content_type) -- 2.34.1