Fix Unix remote watchdog socket leak

This commit is contained in:
Storm Dragon
2026-07-29 14:13:53 -04:00
parent 76b8f2f2cf
commit 122a6a38b3
2 changed files with 78 additions and 36 deletions
+36
View File
@@ -1,5 +1,7 @@
from unittest.mock import Mock, mock_open, patch
import pytest
from fenrirscreenreader.remoteDriver import unixDriver
@@ -27,6 +29,40 @@ def test_watchdog_keeps_serving_when_instance_registration_fails(
select_call.assert_called_once()
def test_watchdog_closes_listeners_when_unexpected_error_escapes(
mock_environment,
):
driver = unixDriver.driver()
driver.env = mock_environment
listener = Mock()
active = Mock(value=True)
with patch.object(
driver,
"_get_socket_candidates",
return_value=[("/tmp/fenrir-test.sock", False)],
), patch.object(
driver, "_bind_socket", return_value=listener
), patch.object(
driver, "_try_register_instance"
), patch(
"fenrirscreenreader.remoteDriver.unixDriver.select.select",
side_effect=RuntimeError("unexpected failure"),
), patch(
"fenrirscreenreader.remoteDriver.unixDriver.os.path.exists",
return_value=False,
), patch(
"fenrirscreenreader.remoteDriver.unixDriver.remoteInstanceRegistry.remove_instance"
) as remove_instance:
with pytest.raises(RuntimeError, match="unexpected failure"):
driver.watch_dog(active, Mock())
listener.close.assert_called_once_with()
assert driver.fenrirSocks == []
assert driver.bound_sockets == []
remove_instance.assert_called_once_with()
class FakeClientSocket:
def __init__(self, data):
self.data = data