mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2025-08-03 05:16:05 -04:00
Prefer make_awaitable
over defer.succeed
in tests (#12505)
When configuring the return values of mocks, prefer awaitables from `make_awaitable` over `defer.succeed`. `Deferred`s are only awaitable once, so it is inappropriate for a mock to return the same `Deferred` multiple times. Also update `run_in_background` to support functions that return arbitrary awaitables. Signed-off-by: Sean Quah <seanq@element.io>
This commit is contained in:
parent
5ef673de4f
commit
78b99de7c2
14 changed files with 72 additions and 69 deletions
|
@ -14,7 +14,6 @@
|
|||
from http import HTTPStatus
|
||||
from unittest.mock import Mock
|
||||
|
||||
from twisted.internet import defer
|
||||
from twisted.test.proto_helpers import MemoryReactor
|
||||
|
||||
from synapse.handlers.presence import PresenceHandler
|
||||
|
@ -24,6 +23,7 @@ from synapse.types import UserID
|
|||
from synapse.util import Clock
|
||||
|
||||
from tests import unittest
|
||||
from tests.test_utils import make_awaitable
|
||||
|
||||
|
||||
class PresenceTestCase(unittest.HomeserverTestCase):
|
||||
|
@ -37,7 +37,7 @@ class PresenceTestCase(unittest.HomeserverTestCase):
|
|||
def make_homeserver(self, reactor: MemoryReactor, clock: Clock) -> HomeServer:
|
||||
|
||||
presence_handler = Mock(spec=PresenceHandler)
|
||||
presence_handler.set_state.return_value = defer.succeed(None)
|
||||
presence_handler.set_state.return_value = make_awaitable(None)
|
||||
|
||||
hs = self.setup_test_homeserver(
|
||||
"red",
|
||||
|
|
|
@ -22,7 +22,6 @@ from typing import Any, Dict, Iterable, List, Optional
|
|||
from unittest.mock import Mock, call
|
||||
from urllib import parse as urlparse
|
||||
|
||||
from twisted.internet import defer
|
||||
from twisted.test.proto_helpers import MemoryReactor
|
||||
|
||||
import synapse.rest.admin
|
||||
|
@ -1426,9 +1425,7 @@ class PublicRoomsTestRemoteSearchFallbackTestCase(unittest.HomeserverTestCase):
|
|||
|
||||
def test_simple(self) -> None:
|
||||
"Simple test for searching rooms over federation"
|
||||
self.federation_client.get_public_rooms.side_effect = lambda *a, **k: defer.succeed( # type: ignore[attr-defined]
|
||||
{}
|
||||
)
|
||||
self.federation_client.get_public_rooms.return_value = make_awaitable({}) # type: ignore[attr-defined]
|
||||
|
||||
search_filter = {"generic_search_term": "foobar"}
|
||||
|
||||
|
@ -1456,7 +1453,7 @@ class PublicRoomsTestRemoteSearchFallbackTestCase(unittest.HomeserverTestCase):
|
|||
# with a 404, when using search filters.
|
||||
self.federation_client.get_public_rooms.side_effect = ( # type: ignore[attr-defined]
|
||||
HttpResponseException(404, "Not Found", b""),
|
||||
defer.succeed({}),
|
||||
make_awaitable({}),
|
||||
)
|
||||
|
||||
search_filter = {"generic_search_term": "foobar"}
|
||||
|
|
|
@ -22,6 +22,7 @@ from synapse.rest.client.transactions import CLEANUP_PERIOD_MS, HttpTransactionC
|
|||
from synapse.util import Clock
|
||||
|
||||
from tests import unittest
|
||||
from tests.test_utils import make_awaitable
|
||||
from tests.utils import MockClock
|
||||
|
||||
|
||||
|
@ -38,7 +39,7 @@ class HttpTransactionCacheTestCase(unittest.TestCase):
|
|||
|
||||
@defer.inlineCallbacks
|
||||
def test_executes_given_function(self):
|
||||
cb = Mock(return_value=defer.succeed(self.mock_http_response))
|
||||
cb = Mock(return_value=make_awaitable(self.mock_http_response))
|
||||
res = yield self.cache.fetch_or_execute(
|
||||
self.mock_key, cb, "some_arg", keyword="arg"
|
||||
)
|
||||
|
@ -47,7 +48,7 @@ class HttpTransactionCacheTestCase(unittest.TestCase):
|
|||
|
||||
@defer.inlineCallbacks
|
||||
def test_deduplicates_based_on_key(self):
|
||||
cb = Mock(return_value=defer.succeed(self.mock_http_response))
|
||||
cb = Mock(return_value=make_awaitable(self.mock_http_response))
|
||||
for i in range(3): # invoke multiple times
|
||||
res = yield self.cache.fetch_or_execute(
|
||||
self.mock_key, cb, "some_arg", keyword="arg", changing_args=i
|
||||
|
@ -130,7 +131,7 @@ class HttpTransactionCacheTestCase(unittest.TestCase):
|
|||
|
||||
@defer.inlineCallbacks
|
||||
def test_cleans_up(self):
|
||||
cb = Mock(return_value=defer.succeed(self.mock_http_response))
|
||||
cb = Mock(return_value=make_awaitable(self.mock_http_response))
|
||||
yield self.cache.fetch_or_execute(self.mock_key, cb, "an arg")
|
||||
# should NOT have cleaned up yet
|
||||
self.clock.advance_time_msec(CLEANUP_PERIOD_MS / 2)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue