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

Commit 7d84d25

Browse files
authored
Fix errors in Synapse logs from unit tests. (#10939)
Fix some harmless errors from background processes (mostly due to awaiting Mock objects) that occurred in the Synapse logs during unit tests.
1 parent 44dee1f commit 7d84d25

File tree

5 files changed

+35
-26
lines changed

5 files changed

+35
-26
lines changed

changelog.d/10939.misc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Fix logged errors in unit tests.

tests/appservice/test_scheduler.py

Lines changed: 19 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
from synapse.logging.context import make_deferred_yieldable
2525

2626
from tests import unittest
27-
from tests.test_utils import make_awaitable
27+
from tests.test_utils import simple_async_mock
2828

2929
from ..utils import MockClock
3030

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

5151
# mock methods
52-
self.store.get_appservice_state = Mock(
53-
return_value=defer.succeed(ApplicationServiceState.UP)
54-
)
55-
txn.send = Mock(return_value=make_awaitable(True))
56-
self.store.create_appservice_txn = Mock(return_value=defer.succeed(txn))
52+
self.store.get_appservice_state = simple_async_mock(ApplicationServiceState.UP)
53+
txn.send = simple_async_mock(True)
54+
txn.complete = simple_async_mock(True)
55+
self.store.create_appservice_txn = simple_async_mock(txn)
5756

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

7372
txn = Mock(id="idhere", service=service, events=events)
74-
self.store.get_appservice_state = Mock(
75-
return_value=defer.succeed(ApplicationServiceState.DOWN)
73+
self.store.get_appservice_state = simple_async_mock(
74+
ApplicationServiceState.DOWN
7675
)
77-
self.store.create_appservice_txn = Mock(return_value=defer.succeed(txn))
76+
self.store.create_appservice_txn = simple_async_mock(txn)
7877

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

9695
# mock methods
97-
self.store.get_appservice_state = Mock(
98-
return_value=defer.succeed(ApplicationServiceState.UP)
99-
)
100-
self.store.set_appservice_state = Mock(return_value=defer.succeed(True))
101-
txn.send = Mock(return_value=make_awaitable(False)) # fails to send
102-
self.store.create_appservice_txn = Mock(return_value=defer.succeed(txn))
96+
self.store.get_appservice_state = simple_async_mock(ApplicationServiceState.UP)
97+
self.store.set_appservice_state = simple_async_mock(True)
98+
txn.send = simple_async_mock(False) # fails to send
99+
self.store.create_appservice_txn = simple_async_mock(txn)
103100

104101
# actual call
105102
self.successResultOf(defer.ensureDeferred(self.txnctrl.send(service, events)))
@@ -122,7 +119,7 @@ def setUp(self):
122119
self.as_api = Mock()
123120
self.store = Mock()
124121
self.service = Mock()
125-
self.callback = Mock()
122+
self.callback = simple_async_mock()
126123
self.recoverer = _Recoverer(
127124
clock=self.clock,
128125
as_api=self.as_api,
@@ -144,8 +141,8 @@ def take_txn(*args, **kwargs):
144141
self.recoverer.recover()
145142
# shouldn't have called anything prior to waiting for exp backoff
146143
self.assertEquals(0, self.store.get_oldest_unsent_txn.call_count)
147-
txn.send = Mock(return_value=make_awaitable(True))
148-
txn.complete.return_value = make_awaitable(None)
144+
txn.send = simple_async_mock(True)
145+
txn.complete = simple_async_mock(None)
149146
# wait for exp backoff
150147
self.clock.advance_time(2)
151148
self.assertEquals(1, txn.send.call_count)
@@ -170,8 +167,8 @@ def take_txn(*args, **kwargs):
170167

171168
self.recoverer.recover()
172169
self.assertEquals(0, self.store.get_oldest_unsent_txn.call_count)
173-
txn.send = Mock(return_value=make_awaitable(False))
174-
txn.complete.return_value = make_awaitable(None)
170+
txn.send = simple_async_mock(False)
171+
txn.complete = simple_async_mock(None)
175172
self.clock.advance_time(2)
176173
self.assertEquals(1, txn.send.call_count)
177174
self.assertEquals(0, txn.complete.call_count)
@@ -184,7 +181,7 @@ def take_txn(*args, **kwargs):
184181
self.assertEquals(3, txn.send.call_count)
185182
self.assertEquals(0, txn.complete.call_count)
186183
self.assertEquals(0, self.callback.call_count)
187-
txn.send = Mock(return_value=make_awaitable(True)) # successfully send the txn
184+
txn.send = simple_async_mock(True) # successfully send the txn
188185
pop_txn = True # returns the txn the first time, then no more.
189186
self.clock.advance_time(16)
190187
self.assertEquals(1, txn.send.call_count) # new mock reset call count
@@ -195,6 +192,7 @@ def take_txn(*args, **kwargs):
195192
class ApplicationServiceSchedulerQueuerTestCase(unittest.TestCase):
196193
def setUp(self):
197194
self.txn_ctrl = Mock()
195+
self.txn_ctrl.send = simple_async_mock()
198196
self.queuer = _ServiceQueuer(self.txn_ctrl, MockClock())
199197

200198
def test_send_single_event_no_queue(self):

tests/events/test_presence_router.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
from synapse.types import JsonDict, StreamToken, create_requester
2727

2828
from tests.handlers.test_sync import generate_sync_config
29+
from tests.test_utils import simple_async_mock
2930
from tests.unittest import FederatingHomeserverTestCase, TestCase, override_config
3031

3132

@@ -133,8 +134,12 @@ class PresenceRouterTestCase(FederatingHomeserverTestCase):
133134
]
134135

135136
def make_homeserver(self, reactor, clock):
137+
# Mock out the calls over federation.
138+
fed_transport_client = Mock(spec=["send_transaction"])
139+
fed_transport_client.send_transaction = simple_async_mock({})
140+
136141
hs = self.setup_test_homeserver(
137-
federation_transport_client=Mock(spec=["send_transaction"]),
142+
federation_transport_client=fed_transport_client,
138143
)
139144
# Load the modules into the homeserver
140145
module_api = hs.get_module_api()

tests/federation/test_federation_sender.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -336,7 +336,7 @@ def test_unreachable_server(self):
336336
recovery
337337
"""
338338
mock_send_txn = self.hs.get_federation_transport_client().send_transaction
339-
mock_send_txn.side_effect = lambda t, cb: defer.fail("fail")
339+
mock_send_txn.side_effect = lambda t, cb: defer.fail(AssertionError("fail"))
340340

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

381381
# create devices
382382
u1 = self.register_user("user", "pass")
@@ -429,7 +429,7 @@ def test_prune_outbound_device_pokes2(self):
429429

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

434434
self.login("user", "pass", device_id="D2")
435435
self.login("user", "pass", device_id="D3")

tests/module_api/test_api.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525

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

4849
def make_homeserver(self, reactor, clock):
50+
# Mock out the calls over federation.
51+
fed_transport_client = Mock(spec=["send_transaction"])
52+
fed_transport_client.send_transaction = simple_async_mock({})
53+
4954
return self.setup_test_homeserver(
50-
federation_transport_client=Mock(spec=["send_transaction"]),
55+
federation_transport_client=fed_transport_client,
5156
)
5257

5358
def test_can_register_user(self):

0 commit comments

Comments
 (0)