synapse/tests/test_distributor.py

68 lines
2.1 KiB
Python
Raw Normal View History

2016-01-07 07:26:29 +03:00
# Copyright 2014-2016 OpenMarket Ltd
# Copyright 2018 New Vector Ltd
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
2021-04-09 20:44:38 +03:00
from unittest.mock import Mock, patch
2014-08-12 18:10:52 +04:00
from synapse.util.distributor import Distributor
2018-07-09 09:09:20 +03:00
from . import unittest
2014-08-12 18:10:52 +04:00
class DistributorTestCase(unittest.TestCase):
def setUp(self) -> None:
2014-08-12 18:10:52 +04:00
self.dist = Distributor()
def test_signal_dispatch(self) -> None:
2014-08-12 18:10:52 +04:00
self.dist.declare("alert")
observer = Mock()
self.dist.observe("alert", observer)
self.dist.fire("alert", 1, 2, 3)
2014-08-12 18:10:52 +04:00
observer.assert_called_with(1, 2, 3)
def test_signal_catch(self) -> None:
2014-08-12 18:10:52 +04:00
self.dist.declare("alarm")
observers = [Mock() for i in (1, 2)]
2014-08-12 18:10:52 +04:00
for o in observers:
self.dist.observe("alarm", o)
observers[0].side_effect = Exception("Awoogah!")
2018-08-10 16:54:09 +03:00
with patch("synapse.util.distributor.logger", spec=["warning"]) as mock_logger:
self.dist.fire("alarm", "Go")
2014-08-12 18:10:52 +04:00
observers[0].assert_called_once_with("Go")
observers[1].assert_called_once_with("Go")
2014-08-12 18:10:52 +04:00
self.assertEqual(mock_logger.warning.call_count, 1)
2018-08-10 16:54:09 +03:00
self.assertIsInstance(mock_logger.warning.call_args[0][0], str)
2014-08-12 18:10:52 +04:00
def test_signal_prereg(self) -> None:
2014-08-12 18:10:52 +04:00
observer = Mock()
self.dist.observe("flare", observer)
self.dist.declare("flare")
self.dist.fire("flare", 4, 5)
2014-08-12 18:10:52 +04:00
observer.assert_called_with(4, 5)
def test_signal_undeclared(self) -> None:
def code() -> None:
2014-08-12 18:10:52 +04:00
self.dist.fire("notification")
2018-08-10 16:54:09 +03:00
self.assertRaises(KeyError, code)