diff options
Diffstat (limited to 'deluge/tests/test_alertmanager.py')
-rw-r--r-- | deluge/tests/test_alertmanager.py | 77 |
1 files changed, 70 insertions, 7 deletions
diff --git a/deluge/tests/test_alertmanager.py b/deluge/tests/test_alertmanager.py index 683b011..2d18f4b 100644 --- a/deluge/tests/test_alertmanager.py +++ b/deluge/tests/test_alertmanager.py @@ -3,21 +3,61 @@ # the additional special exception to link portions of this program with the OpenSSL library. # See LICENSE for more details. # +from dataclasses import dataclass + +import pytest -import deluge.component as component -from deluge.conftest import BaseTestCase from deluge.core.core import Core -class TestAlertManager(BaseTestCase): - def set_up(self): +class LtSessionMock: + def __init__(self): + self.alerts = [] + + def push_alerts(self, alerts): + self.alerts = alerts + + def wait_for_alert(self, timeout): + return self.alerts[0] if len(self.alerts) > 0 else None + + def pop_alerts(self): + alerts = self.alerts + self.alerts = [] + return alerts + + +@dataclass +class LtAlertMock: + type: int + name: str + message: str + + def message(self): + return self.message + + def what(self): + return self.name + + +@pytest.fixture +def mock_alert1(): + return LtAlertMock(type=1, name='mock_alert1', message='Alert 1') + + +@pytest.fixture +def mock_alert2(): + return LtAlertMock(type=2, name='mock_alert2', message='Alert 2') + + +class TestAlertManager: + @pytest.fixture(autouse=True) + def set_up(self, component): self.core = Core() self.core.config.config['lsd'] = False self.am = component.get('AlertManager') - return component.start(['AlertManager']) + self.am.session = LtSessionMock() - def tear_down(self): - return component.shutdown() + component.start(['AlertManager']) def test_register_handler(self): def handler(alert): @@ -28,6 +68,29 @@ class TestAlertManager(BaseTestCase): assert self.am.handlers['dummy1'] == [handler] assert self.am.handlers['dummy2'] == [handler] + async def test_pop_alert(self, mock_callback, mock_alert1, mock_alert2): + self.am.register_handler('mock_alert1', mock_callback) + + self.am.session.push_alerts([mock_alert1, mock_alert2]) + + await mock_callback.deferred + + mock_callback.assert_called_once_with(mock_alert1) + + async def test_pause_not_pop_alert( + self, component, mock_alert1, mock_alert2, mock_callback + ): + await component.pause(['AlertManager']) + + self.am.register_handler('mock_alert1', mock_callback) + self.am.session.push_alerts([mock_alert1, mock_alert2]) + + await mock_callback.deferred + + mock_callback.assert_not_called() + assert not self.am._event.is_set() + assert len(self.am.session.alerts) == 2 + def test_deregister_handler(self): def handler(alert): ... |