Fix Unix remote watchdog socket leak
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user