From d737307b0a61638aedd778ba6d27ce275fcf3aaa Mon Sep 17 00:00:00 2001 From: Nico Alt <nicoalt@posteo.org> Date: Fri, 12 Jun 2020 13:00:01 +0000 Subject: [PATCH] Add tests for SocketListener --- .../models/test_socket_listener.py | 163 ++++++++++++++++++ 1 file changed, 163 insertions(+) create mode 100644 tests/briar_wrapper/models/test_socket_listener.py 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 0000000..24256ef --- /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 -- GitLab