diff options
Diffstat (limited to 'tests/test_distributor.py')
-rw-r--r-- | tests/test_distributor.py | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/tests/test_distributor.py b/tests/test_distributor.py new file mode 100644 index 0000000000..36cbf6c52d --- /dev/null +++ b/tests/test_distributor.py @@ -0,0 +1,74 @@ +import unittest + +from twisted.internet import defer + +from mock import Mock, patch + +from synapse.util.distributor import Distributor + + +class DistributorTestCase(unittest.TestCase): + + def setUp(self): + self.dist = Distributor() + + def test_signal_dispatch(self): + self.dist.declare("alert") + + observer = Mock() + self.dist.observe("alert", observer) + + d = self.dist.fire("alert", 1, 2, 3) + + self.assertTrue(d.called) + observer.assert_called_with(1, 2, 3) + + def test_signal_dispatch_deferred(self): + self.dist.declare("whine") + + d_inner = defer.Deferred() + def observer(): + return d_inner + self.dist.observe("whine", observer) + + d_outer = self.dist.fire("whine") + + self.assertFalse(d_outer.called) + + d_inner.callback(None) + self.assertTrue(d_outer.called) + + def test_signal_catch(self): + self.dist.declare("alarm") + + observers = [Mock() for i in 1, 2] + for o in observers: + self.dist.observe("alarm", o) + + observers[0].side_effect = Exception("Awoogah!") + + with patch("synapse.util.distributor.logger", + spec=["warning"] + ) as mock_logger: + d = self.dist.fire("alarm", "Go") + self.assertTrue(d.called) + + observers[0].assert_called_once("Go") + observers[1].assert_called_once("Go") + + self.assertEquals(mock_logger.warning.call_count, 1) + self.assertIsInstance(mock_logger.warning.call_args[0][0], + str) + + def test_signal_prereg(self): + observer = Mock() + self.dist.observe("flare", observer) + + self.dist.declare("flare") + self.dist.fire("flare", 4, 5) + + observer.assert_called_with(4, 5) + + def test_signal_undeclared(self): + with self.assertRaises(KeyError): + self.dist.fire("notification") |