diff --git a/tests/briar_wrapper/models/test_socket_listener.py b/tests/briar_wrapper/models/test_socket_listener.py new file mode 100644 index 0000000000000000000000000000000000000000..24256efbcc59b15be48dd14ac19a1e3f1ce84ca3 --- /dev/null +++ b/tests/briar_wrapper/models/test_socket_listener.py @@ -0,0 +1,163 @@ +# Copyright (c) 2020 Nico Alt +# SPDX-License-Identifier: AGPL-3.0-only +# License-Filename: LICENSE.md + +import pytest + +from briar_wrapper.models.socket_listener import SocketListener + +MODULE = "briar_wrapper.models.socket_listener.%s" + + +def test_init_websocket_thread(mocker): + thread_mock = mocker.patch(MODULE % "Thread") + + SocketListener(None) + + thread_mock.assert_called_once() + + +def test_init_watch_loop(mocker): + watch_loop_mock = mocker.patch(MODULE % "SocketListener._start_watch_loop") + + SocketListener(None) + + watch_loop_mock.assert_called_once() + + +def test_connect_lock(mocker): + lock_mock = mocker.Mock() + + manager = mocker.Mock() + manager.attach_mock(lock_mock.acquire, 'acquire_mock') + manager.attach_mock(lock_mock.release, 'release_mock') + + socket_listener = SocketListener(None) + socket_listener._signals_lock = lock_mock + + socket_listener.connect(None, None) + + expected_calls = [ + mocker.call.acquire_mock(), + mocker.call.release_mock() + ] + + assert manager.mock_calls == expected_calls + + +def test_connect_signal_added(mocker): + event_mock = mocker.MagicMock() + callback_mock = mocker.MagicMock() + + socket_listener = SocketListener(None) + socket_listener._highest_signal_id = 136 + + assert socket_listener._signals == dict() + + socket_listener.connect(event_mock, callback_mock) + + expected_signals = { + 137: { + "event": event_mock, + "callback": callback_mock + } + } + + assert socket_listener._signals == expected_signals + + +def test_connect_signal_id(mocker): + event_mock = mocker.MagicMock() + callback_mock = mocker.MagicMock() + + socket_listener = SocketListener(None) + socket_listener._highest_signal_id = 137 + + signal_id = socket_listener.connect(event_mock, callback_mock) + + assert signal_id == 137 + 1 + + +def test_disconnect_lock(mocker): + lock_mock = mocker.Mock() + + manager = mocker.Mock() + manager.attach_mock(lock_mock.acquire, 'acquire_mock') + manager.attach_mock(lock_mock.release, 'release_mock') + + socket_listener = SocketListener(None) + socket_listener._signals_lock = lock_mock + socket_listener._signals = mocker.MagicMock() + + socket_listener.disconnect(None) + + expected_calls = [ + mocker.call.acquire_mock(), + mocker.call.release_mock() + ] + + assert manager.mock_calls == expected_calls + + +def test_disconnect_signal_removed(mocker): + socket_listener = SocketListener(None) + socket_listener._signals = { + 137: { + "event": None, + "callback": None + } + } + + socket_listener.disconnect(137) + + assert socket_listener._signals == dict() + + +@pytest.mark.skip(reason="todo") +def test_start_websocket(): + pass + + +@pytest.mark.skip(reason="todo") +def test_watch_messages(): + pass + + +def test_call_signal_callbacks(mocker): + message = { + 'name': 'VeryImportantEvent' + } + callback_mock = mocker.MagicMock() + + socket_listener = SocketListener(None) + socket_listener._signals = { + 137: { + "event": 'VeryImportantEvent', + "callback": callback_mock + } + } + + socket_listener._call_signal_callbacks(message) + + callback_mock.assert_called_once_with(message) + + +def test_call_signal_callbacks_lock(mocker): + lock_mock = mocker.Mock() + + manager = mocker.Mock() + manager.attach_mock(lock_mock.acquire, 'acquire_mock') + manager.attach_mock(lock_mock.release, 'release_mock') + + socket_listener = SocketListener(None) + socket_listener._signals_lock = lock_mock + socket_listener._signals = mocker.MagicMock() + + socket_listener._call_signal_callbacks(None) + + expected_calls = [ + mocker.call.acquire_mock(), + mocker.call.release_mock() + ] + + assert manager.mock_calls == expected_calls