summary refs log tree commit diff
path: root/tests/test_distributor.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_distributor.py')
-rw-r--r--tests/test_distributor.py74
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")