diff --git a/tests/protocols/test_websocket.py b/tests/protocols/test_websocket.py index d21be54de..2bd45b713 100644 --- a/tests/protocols/test_websocket.py +++ b/tests/protocols/test_websocket.py @@ -403,7 +403,11 @@ async def connect(url): @pytest.mark.parametrize("ws_protocol_cls", WS_PROTOCOLS) @pytest.mark.parametrize("http_protocol_cls", HTTP_PROTOCOLS) @pytest.mark.parametrize("code", [None, 1000, 1001]) -@pytest.mark.parametrize("reason", [None, "test"]) +@pytest.mark.parametrize( + "reason", + [None, "test", False], + ids=["none_as_reason", "normal_reason", "without_reason"], +) async def test_app_close(ws_protocol_cls, http_protocol_cls, code, reason): async def app(scope, receive, send): while True: @@ -416,7 +420,7 @@ async def app(scope, receive, send): if code is not None: reply["code"] = code - if reason is not None: + if reason is not False: reply["reason"] = reason await send(reply) diff --git a/uvicorn/protocols/websockets/websockets_impl.py b/uvicorn/protocols/websockets/websockets_impl.py index d829f49a6..f4fa67f29 100644 --- a/uvicorn/protocols/websockets/websockets_impl.py +++ b/uvicorn/protocols/websockets/websockets_impl.py @@ -261,7 +261,7 @@ async def asgi_send(self, message): elif message_type == "websocket.close": code = message.get("code", 1000) - reason = message.get("reason", "") + reason = message.get("reason", "") or "" await self.close(code, reason) self.closed_event.set() diff --git a/uvicorn/protocols/websockets/wsproto_impl.py b/uvicorn/protocols/websockets/wsproto_impl.py index a870f1710..704d6b8cb 100644 --- a/uvicorn/protocols/websockets/wsproto_impl.py +++ b/uvicorn/protocols/websockets/wsproto_impl.py @@ -297,7 +297,7 @@ async def send(self, message): elif message_type == "websocket.close": self.close_sent = True code = message.get("code", 1000) - reason = message.get("reason", "") + reason = message.get("reason", "") or "" self.queue.put_nowait({"type": "websocket.disconnect", "code": code}) output = self.conn.send( wsproto.events.CloseConnection(code=code, reason=reason)