Skip to content
This repository has been archived by the owner on Apr 26, 2024. It is now read-only.

Commit

Permalink
Fix errors in Synapse logs from unit tests. (#10939)
Browse files Browse the repository at this point in the history
Fix some harmless errors from background processes (mostly
due to awaiting Mock objects) that occurred in the Synapse
logs during unit tests.
  • Loading branch information
clokep authored Sep 30, 2021
1 parent 44dee1f commit 7d84d25
Show file tree
Hide file tree
Showing 5 changed files with 35 additions and 26 deletions.
1 change: 1 addition & 0 deletions changelog.d/10939.misc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Fix logged errors in unit tests.
40 changes: 19 additions & 21 deletions tests/appservice/test_scheduler.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
from synapse.logging.context import make_deferred_yieldable

from tests import unittest
from tests.test_utils import make_awaitable
from tests.test_utils import simple_async_mock

from ..utils import MockClock

Expand All @@ -49,11 +49,10 @@ def test_single_service_up_txn_sent(self):
txn = Mock(id=txn_id, service=service, events=events)

# mock methods
self.store.get_appservice_state = Mock(
return_value=defer.succeed(ApplicationServiceState.UP)
)
txn.send = Mock(return_value=make_awaitable(True))
self.store.create_appservice_txn = Mock(return_value=defer.succeed(txn))
self.store.get_appservice_state = simple_async_mock(ApplicationServiceState.UP)
txn.send = simple_async_mock(True)
txn.complete = simple_async_mock(True)
self.store.create_appservice_txn = simple_async_mock(txn)

# actual call
self.successResultOf(defer.ensureDeferred(self.txnctrl.send(service, events)))
Expand All @@ -71,10 +70,10 @@ def test_single_service_down(self):
events = [Mock(), Mock()]

txn = Mock(id="idhere", service=service, events=events)
self.store.get_appservice_state = Mock(
return_value=defer.succeed(ApplicationServiceState.DOWN)
self.store.get_appservice_state = simple_async_mock(
ApplicationServiceState.DOWN
)
self.store.create_appservice_txn = Mock(return_value=defer.succeed(txn))
self.store.create_appservice_txn = simple_async_mock(txn)

# actual call
self.successResultOf(defer.ensureDeferred(self.txnctrl.send(service, events)))
Expand All @@ -94,12 +93,10 @@ def test_single_service_up_txn_not_sent(self):
txn = Mock(id=txn_id, service=service, events=events)

# mock methods
self.store.get_appservice_state = Mock(
return_value=defer.succeed(ApplicationServiceState.UP)
)
self.store.set_appservice_state = Mock(return_value=defer.succeed(True))
txn.send = Mock(return_value=make_awaitable(False)) # fails to send
self.store.create_appservice_txn = Mock(return_value=defer.succeed(txn))
self.store.get_appservice_state = simple_async_mock(ApplicationServiceState.UP)
self.store.set_appservice_state = simple_async_mock(True)
txn.send = simple_async_mock(False) # fails to send
self.store.create_appservice_txn = simple_async_mock(txn)

# actual call
self.successResultOf(defer.ensureDeferred(self.txnctrl.send(service, events)))
Expand All @@ -122,7 +119,7 @@ def setUp(self):
self.as_api = Mock()
self.store = Mock()
self.service = Mock()
self.callback = Mock()
self.callback = simple_async_mock()
self.recoverer = _Recoverer(
clock=self.clock,
as_api=self.as_api,
Expand All @@ -144,8 +141,8 @@ def take_txn(*args, **kwargs):
self.recoverer.recover()
# shouldn't have called anything prior to waiting for exp backoff
self.assertEquals(0, self.store.get_oldest_unsent_txn.call_count)
txn.send = Mock(return_value=make_awaitable(True))
txn.complete.return_value = make_awaitable(None)
txn.send = simple_async_mock(True)
txn.complete = simple_async_mock(None)
# wait for exp backoff
self.clock.advance_time(2)
self.assertEquals(1, txn.send.call_count)
Expand All @@ -170,8 +167,8 @@ def take_txn(*args, **kwargs):

self.recoverer.recover()
self.assertEquals(0, self.store.get_oldest_unsent_txn.call_count)
txn.send = Mock(return_value=make_awaitable(False))
txn.complete.return_value = make_awaitable(None)
txn.send = simple_async_mock(False)
txn.complete = simple_async_mock(None)
self.clock.advance_time(2)
self.assertEquals(1, txn.send.call_count)
self.assertEquals(0, txn.complete.call_count)
Expand All @@ -184,7 +181,7 @@ def take_txn(*args, **kwargs):
self.assertEquals(3, txn.send.call_count)
self.assertEquals(0, txn.complete.call_count)
self.assertEquals(0, self.callback.call_count)
txn.send = Mock(return_value=make_awaitable(True)) # successfully send the txn
txn.send = simple_async_mock(True) # successfully send the txn
pop_txn = True # returns the txn the first time, then no more.
self.clock.advance_time(16)
self.assertEquals(1, txn.send.call_count) # new mock reset call count
Expand All @@ -195,6 +192,7 @@ def take_txn(*args, **kwargs):
class ApplicationServiceSchedulerQueuerTestCase(unittest.TestCase):
def setUp(self):
self.txn_ctrl = Mock()
self.txn_ctrl.send = simple_async_mock()
self.queuer = _ServiceQueuer(self.txn_ctrl, MockClock())

def test_send_single_event_no_queue(self):
Expand Down
7 changes: 6 additions & 1 deletion tests/events/test_presence_router.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
from synapse.types import JsonDict, StreamToken, create_requester

from tests.handlers.test_sync import generate_sync_config
from tests.test_utils import simple_async_mock
from tests.unittest import FederatingHomeserverTestCase, TestCase, override_config


Expand Down Expand Up @@ -133,8 +134,12 @@ class PresenceRouterTestCase(FederatingHomeserverTestCase):
]

def make_homeserver(self, reactor, clock):
# Mock out the calls over federation.
fed_transport_client = Mock(spec=["send_transaction"])
fed_transport_client.send_transaction = simple_async_mock({})

hs = self.setup_test_homeserver(
federation_transport_client=Mock(spec=["send_transaction"]),
federation_transport_client=fed_transport_client,
)
# Load the modules into the homeserver
module_api = hs.get_module_api()
Expand Down
6 changes: 3 additions & 3 deletions tests/federation/test_federation_sender.py
Original file line number Diff line number Diff line change
Expand Up @@ -336,7 +336,7 @@ def test_unreachable_server(self):
recovery
"""
mock_send_txn = self.hs.get_federation_transport_client().send_transaction
mock_send_txn.side_effect = lambda t, cb: defer.fail("fail")
mock_send_txn.side_effect = lambda t, cb: defer.fail(AssertionError("fail"))

# create devices
u1 = self.register_user("user", "pass")
Expand Down Expand Up @@ -376,7 +376,7 @@ def test_prune_outbound_device_pokes1(self):
This case tests the behaviour when the server has never been reachable.
"""
mock_send_txn = self.hs.get_federation_transport_client().send_transaction
mock_send_txn.side_effect = lambda t, cb: defer.fail("fail")
mock_send_txn.side_effect = lambda t, cb: defer.fail(AssertionError("fail"))

# create devices
u1 = self.register_user("user", "pass")
Expand Down Expand Up @@ -429,7 +429,7 @@ def test_prune_outbound_device_pokes2(self):

# now the server goes offline
mock_send_txn = self.hs.get_federation_transport_client().send_transaction
mock_send_txn.side_effect = lambda t, cb: defer.fail("fail")
mock_send_txn.side_effect = lambda t, cb: defer.fail(AssertionError("fail"))

self.login("user", "pass", device_id="D2")
self.login("user", "pass", device_id="D3")
Expand Down
7 changes: 6 additions & 1 deletion tests/module_api/test_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@

from tests.events.test_presence_router import send_presence_update, sync_presence
from tests.replication._base import BaseMultiWorkerStreamTestCase
from tests.test_utils import simple_async_mock
from tests.test_utils.event_injection import inject_member_event
from tests.unittest import HomeserverTestCase, override_config
from tests.utils import USE_POSTGRES_FOR_TESTS
Expand All @@ -46,8 +47,12 @@ def prepare(self, reactor, clock, homeserver):
self.auth_handler = homeserver.get_auth_handler()

def make_homeserver(self, reactor, clock):
# Mock out the calls over federation.
fed_transport_client = Mock(spec=["send_transaction"])
fed_transport_client.send_transaction = simple_async_mock({})

return self.setup_test_homeserver(
federation_transport_client=Mock(spec=["send_transaction"]),
federation_transport_client=fed_transport_client,
)

def test_can_register_user(self):
Expand Down

0 comments on commit 7d84d25

Please sign in to comment.