mirror of
https://github.com/home-assistant/core.git
synced 2025-07-19 03:07:37 +00:00
Fix setting MQTT socket buffer size with WebsocketWrapper (#117672)
This commit is contained in:
parent
99565bef27
commit
ac3321cef1
@ -540,6 +540,14 @@ class MQTT:
|
||||
|
||||
def _increase_socket_buffer_size(self, sock: SocketType) -> None:
|
||||
"""Increase the socket buffer size."""
|
||||
if not hasattr(sock, "setsockopt") and hasattr(sock, "_socket"):
|
||||
# The WebsocketWrapper does not wrap setsockopt
|
||||
# so we need to get the underlying socket
|
||||
# Remove this once
|
||||
# https://github.com/eclipse/paho.mqtt.python/pull/843
|
||||
# is available.
|
||||
sock = sock._socket # noqa: SLF001
|
||||
|
||||
new_buffer_size = PREFERRED_BUFFER_SIZE
|
||||
while True:
|
||||
try:
|
||||
|
@ -4434,6 +4434,43 @@ async def test_server_sock_buffer_size(
|
||||
assert "Unable to increase the socket buffer size" in caplog.text
|
||||
|
||||
|
||||
@patch("homeassistant.components.mqtt.client.INITIAL_SUBSCRIBE_COOLDOWN", 0.0)
|
||||
@patch("homeassistant.components.mqtt.client.DISCOVERY_COOLDOWN", 0.0)
|
||||
@patch("homeassistant.components.mqtt.client.SUBSCRIBE_COOLDOWN", 0.0)
|
||||
async def test_server_sock_buffer_size_with_websocket(
|
||||
hass: HomeAssistant,
|
||||
mqtt_client_mock: MqttMockPahoClient,
|
||||
mqtt_mock_entry: MqttMockHAClientGenerator,
|
||||
caplog: pytest.LogCaptureFixture,
|
||||
) -> None:
|
||||
"""Test handling the socket buffer size fails."""
|
||||
mqtt_mock = await mqtt_mock_entry()
|
||||
await hass.async_block_till_done()
|
||||
assert mqtt_mock.connected is True
|
||||
|
||||
mqtt_client_mock.loop_misc.return_value = paho_mqtt.MQTT_ERR_SUCCESS
|
||||
|
||||
client, server = socket.socketpair(
|
||||
family=socket.AF_UNIX, type=socket.SOCK_STREAM, proto=0
|
||||
)
|
||||
client.setblocking(False)
|
||||
server.setblocking(False)
|
||||
|
||||
class FakeWebsocket(paho_mqtt.WebsocketWrapper):
|
||||
def _do_handshake(self, *args, **kwargs):
|
||||
pass
|
||||
|
||||
wrapped_socket = FakeWebsocket(client, "127.0.01", 1, False, "/", None)
|
||||
|
||||
with patch.object(client, "setsockopt", side_effect=OSError("foo")):
|
||||
mqtt_client_mock.on_socket_open(mqtt_client_mock, None, wrapped_socket)
|
||||
mqtt_client_mock.on_socket_register_write(
|
||||
mqtt_client_mock, None, wrapped_socket
|
||||
)
|
||||
await hass.async_block_till_done()
|
||||
assert "Unable to increase the socket buffer size" in caplog.text
|
||||
|
||||
|
||||
@patch("homeassistant.components.mqtt.client.INITIAL_SUBSCRIBE_COOLDOWN", 0.0)
|
||||
@patch("homeassistant.components.mqtt.client.DISCOVERY_COOLDOWN", 0.0)
|
||||
@patch("homeassistant.components.mqtt.client.SUBSCRIBE_COOLDOWN", 0.0)
|
||||
|
Loading…
x
Reference in New Issue
Block a user