Skip to content
Snippets Groups Projects
test_distributor.py 2.15 KiB
Newer Older
  • Learn to ignore specific revisions
  • Patrick Cloke's avatar
    Patrick Cloke committed
    # This file is licensed under the Affero General Public License (AGPL) version 3.
    #
    
    # Copyright 2014-2016 OpenMarket Ltd
    
    Patrick Cloke's avatar
    Patrick Cloke committed
    # Copyright (C) 2023 New Vector, Ltd
    #
    # This program is free software: you can redistribute it and/or modify
    # it under the terms of the GNU Affero General Public License as
    # published by the Free Software Foundation, either version 3 of the
    # License, or (at your option) any later version.
    #
    # See the GNU Affero General Public License for more details:
    # <https://www.gnu.org/licenses/agpl-3.0.html>.
    #
    # Originally licensed under the Apache License, Version 2.0:
    # <http://www.apache.org/licenses/LICENSE-2.0>.
    #
    # [This file includes modifications made by New Vector Limited]
    
    from unittest.mock import Mock, patch
    
    matrix.org's avatar
    matrix.org committed
    
    from synapse.util.distributor import Distributor
    
    
    Amber Brown's avatar
    Amber Brown committed
    from . import unittest
    
    
    matrix.org's avatar
    matrix.org committed
    
    class DistributorTestCase(unittest.TestCase):
    
        def setUp(self) -> None:
    
    matrix.org's avatar
    matrix.org committed
            self.dist = Distributor()
    
    
        def test_signal_dispatch(self) -> None:
    
    matrix.org's avatar
    matrix.org committed
            self.dist.declare("alert")
    
            observer = Mock()
            self.dist.observe("alert", observer)
    
    
            self.dist.fire("alert", 1, 2, 3)
    
    matrix.org's avatar
    matrix.org committed
            observer.assert_called_with(1, 2, 3)
    
    
        def test_signal_catch(self) -> None:
    
    matrix.org's avatar
    matrix.org committed
            self.dist.declare("alarm")
    
    
            observers = [Mock() for i in (1, 2)]
    
    matrix.org's avatar
    matrix.org committed
            for o in observers:
                self.dist.observe("alarm", o)
    
            observers[0].side_effect = Exception("Awoogah!")
    
    
    black's avatar
    black committed
            with patch("synapse.util.distributor.logger", spec=["warning"]) as mock_logger:
    
                observers[0].assert_called_once_with("Go")
                observers[1].assert_called_once_with("Go")
    
                self.assertEqual(mock_logger.warning.call_count, 1)
    
    black's avatar
    black committed
                self.assertIsInstance(mock_logger.warning.call_args[0][0], str)
    
        def test_signal_prereg(self) -> None:
    
    matrix.org's avatar
    matrix.org committed
            observer = Mock()
            self.dist.observe("flare", observer)
    
            self.dist.declare("flare")
    
    matrix.org's avatar
    matrix.org committed
    
            observer.assert_called_with(4, 5)
    
    
        def test_signal_undeclared(self) -> None:
            def code() -> None:
    
    matrix.org's avatar
    matrix.org committed
                self.dist.fire("notification")
    
    black's avatar
    black committed