Skip to content

Commit f51f54b

Browse files
committed
Remove MockClock() usage
1 parent af6dbad commit f51f54b

10 files changed

Lines changed: 54 additions & 48 deletions

File tree

synapse/app/phone_stats_home.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,15 +33,17 @@
3333
run_as_background_process,
3434
)
3535
from synapse.types import JsonDict
36-
from synapse.util.constants import ONE_HOUR_SECONDS, ONE_MINUTE_SECONDS
36+
from synapse.util.constants import (
37+
MILLISECONDS_PER_SECOND,
38+
ONE_HOUR_SECONDS,
39+
ONE_MINUTE_SECONDS,
40+
)
3741

3842
if TYPE_CHECKING:
3943
from synapse.server import HomeServer
4044

4145
logger = logging.getLogger("synapse.app.homeserver")
4246

43-
MILLISECONDS_PER_SECOND = 1000
44-
4547
INITIAL_DELAY_BEFORE_FIRST_PHONE_HOME_SECONDS = 5 * ONE_MINUTE_SECONDS
4648
"""
4749
We wait 5 minutes to send the first set of stats as the server can be quite busy the

synapse/util/constants.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,5 @@
1818
# readability and catching bugs.
1919
ONE_MINUTE_SECONDS = 60
2020
ONE_HOUR_SECONDS = 60 * ONE_MINUTE_SECONDS
21+
22+
MILLISECONDS_PER_SECOND = 1000

tests/appservice/test_scheduler.py

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
# [This file includes modifications made by New Vector Limited]
1919
#
2020
#
21-
from typing import List, Optional, Sequence, Tuple, cast
21+
from typing import List, Optional, Sequence, Tuple
2222
from unittest.mock import AsyncMock, Mock
2323

2424
from typing_extensions import TypeAlias
@@ -44,13 +44,12 @@
4444
from synapse.util.clock import Clock
4545

4646
from tests import unittest
47-
48-
from ..utils import MockClock
47+
from tests.server import get_clock
4948

5049

5150
class ApplicationServiceSchedulerTransactionCtrlTestCase(unittest.TestCase):
5251
def setUp(self) -> None:
53-
self.clock = MockClock()
52+
self.reactor, self.clock = get_clock()
5453
self.store = Mock()
5554
self.as_api = Mock()
5655

@@ -170,14 +169,14 @@ def test_single_service_up_txn_not_sent(self) -> None:
170169

171170
class ApplicationServiceSchedulerRecovererTestCase(unittest.TestCase):
172171
def setUp(self) -> None:
173-
self.clock = MockClock()
172+
self.reactor, self.clock = get_clock()
174173
self.as_api = Mock()
175174
self.store = Mock()
176175
self.service = Mock()
177176
self.callback = AsyncMock()
178177
self.recoverer = _Recoverer(
179178
server_name="test_server",
180-
clock=cast(Clock, self.clock),
179+
clock=self.clock,
181180
as_api=self.as_api,
182181
store=self.store,
183182
service=self.service,
@@ -202,7 +201,7 @@ def take_txn(
202201
txn.send = AsyncMock(return_value=True)
203202
txn.complete = AsyncMock(return_value=None)
204203
# wait for exp backoff
205-
self.clock.advance_time(2)
204+
self.reactor.advance(2)
206205
self.assertEqual(1, txn.send.call_count)
207206
self.assertEqual(1, txn.complete.call_count)
208207
# 2 because it needs to get None to know there are no more txns
@@ -229,21 +228,21 @@ def take_txn(
229228
self.assertEqual(0, self.store.get_oldest_unsent_txn.call_count)
230229
txn.send = AsyncMock(return_value=False)
231230
txn.complete = AsyncMock(return_value=None)
232-
self.clock.advance_time(2)
231+
self.reactor.advance(2)
233232
self.assertEqual(1, txn.send.call_count)
234233
self.assertEqual(0, txn.complete.call_count)
235234
self.assertEqual(0, self.callback.call_count)
236-
self.clock.advance_time(4)
235+
self.reactor.advance(4)
237236
self.assertEqual(2, txn.send.call_count)
238237
self.assertEqual(0, txn.complete.call_count)
239238
self.assertEqual(0, self.callback.call_count)
240-
self.clock.advance_time(8)
239+
self.reactor.advance(8)
241240
self.assertEqual(3, txn.send.call_count)
242241
self.assertEqual(0, txn.complete.call_count)
243242
self.assertEqual(0, self.callback.call_count)
244243
txn.send = AsyncMock(return_value=True) # successfully send the txn
245244
pop_txn = True # returns the txn the first time, then no more.
246-
self.clock.advance_time(16)
245+
self.reactor.advance(16)
247246
self.assertEqual(1, txn.send.call_count) # new mock reset call count
248247
self.assertEqual(1, txn.complete.call_count)
249248
self.callback.assert_called_once_with(self.recoverer)
@@ -268,7 +267,7 @@ def take_txn(
268267
self.assertEqual(0, self.store.get_oldest_unsent_txn.call_count)
269268
txn.send = AsyncMock(return_value=False)
270269
txn.complete = AsyncMock(return_value=None)
271-
self.clock.advance_time(2)
270+
self.reactor.advance(2)
272271
self.assertEqual(1, txn.send.call_count)
273272
self.assertEqual(0, txn.complete.call_count)
274273
self.assertEqual(0, self.callback.call_count)

tests/handlers/test_appservice.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,9 @@
4949
from synapse.util.stringutils import random_string
5050

5151
from tests import unittest
52+
from tests.server import get_clock
5253
from tests.test_utils import event_injection
5354
from tests.unittest import override_config
54-
from tests.utils import MockClock
5555

5656

5757
class AppServiceHandlerTestCase(unittest.TestCase):
@@ -61,14 +61,16 @@ def setUp(self) -> None:
6161
self.mock_store = Mock()
6262
self.mock_as_api = AsyncMock()
6363
self.mock_scheduler = Mock()
64+
self.reactor, self.clock = get_clock()
65+
6466
hs = Mock()
6567
hs.get_datastores.return_value = Mock(main=self.mock_store)
6668
self.mock_store.get_appservice_last_pos = AsyncMock(return_value=None)
6769
self.mock_store.set_appservice_last_pos = AsyncMock(return_value=None)
6870
self.mock_store.set_appservice_stream_type_pos = AsyncMock(return_value=None)
6971
hs.get_application_service_api.return_value = self.mock_as_api
7072
hs.get_application_service_scheduler.return_value = self.mock_scheduler
71-
hs.get_clock.return_value = MockClock()
73+
hs.get_clock.return_value = self.clock
7274
self.handler = ApplicationServicesHandler(hs)
7375
self.event_source = hs.get_event_sources()
7476

tests/handlers/test_e2e_room_keys.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
#
2222

2323
import copy
24-
from unittest import mock
2524

2625
from twisted.internet.testing import MemoryReactor
2726

tests/http/federation/test_srv_resolver.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
from synapse.logging.context import LoggingContext, current_context
3131

3232
from tests import unittest
33-
from tests.utils import MockClock
33+
from tests.server import get_clock
3434

3535

3636
class SrvResolverTestCase(unittest.TestCase):
@@ -105,7 +105,7 @@ def test_from_cache_expired_and_dns_fail(
105105

106106
@defer.inlineCallbacks
107107
def test_from_cache(self) -> Generator["Deferred[object]", object, None]:
108-
clock = MockClock()
108+
reactor, clock = get_clock()
109109

110110
dns_client_mock = Mock(spec_set=["lookupService"])
111111
dns_client_mock.lookupService = Mock(spec_set=[])

tests/rest/client/test_transactions.py

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,16 +29,19 @@
2929
from synapse.rest.client.transactions import CLEANUP_PERIOD_MS, HttpTransactionCache
3030
from synapse.types import ISynapseReactor, JsonDict
3131
from synapse.util.clock import Clock
32+
from synapse.util.constants import (
33+
MILLISECONDS_PER_SECOND,
34+
)
3235

3336
from tests import unittest
34-
from tests.utils import MockClock
37+
from tests.server import get_clock
3538

3639
reactor = cast(ISynapseReactor, _reactor)
3740

3841

3942
class HttpTransactionCacheTestCase(unittest.TestCase):
4043
def setUp(self) -> None:
41-
self.clock = MockClock()
44+
self.reactor, self.clock = get_clock()
4245
self.hs = Mock()
4346
self.hs.get_clock = Mock(return_value=self.clock)
4447
self.hs.get_auth = Mock()
@@ -180,16 +183,18 @@ def test_cleans_up(self) -> Generator["defer.Deferred[Any]", object, None]:
180183
yield self.cache.fetch_or_execute_request(
181184
self.mock_request, self.mock_requester, cb, "an arg"
182185
)
183-
# should NOT have cleaned up yet
184-
self.clock.advance_time_msec(CLEANUP_PERIOD_MS / 2)
186+
# Advance time just under the cleanup period.
187+
# Should NOT have cleaned up yet
188+
self.reactor.advance((CLEANUP_PERIOD_MS - 1) / MILLISECONDS_PER_SECOND)
185189

186190
yield self.cache.fetch_or_execute_request(
187191
self.mock_request, self.mock_requester, cb, "an arg"
188192
)
189193
# still using cache
190194
cb.assert_called_once_with("an arg")
191195

192-
self.clock.advance_time_msec(CLEANUP_PERIOD_MS)
196+
# Advance time just after the cleanup period.
197+
self.reactor.advance(2 / MILLISECONDS_PER_SECOND)
193198

194199
yield self.cache.fetch_or_execute_request(
195200
self.mock_request, self.mock_requester, cb, "an arg"

tests/server.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1037,10 +1037,10 @@ def setup_test_homeserver(
10371037
Args:
10381038
cleanup_func: The function used to register a cleanup routine for after the
10391039
test.
1040-
server_name: homeserver name
1041-
config: TODO
1042-
reactor: TODO
1043-
homeserver_to_use: TODO
1040+
server_name: Homeserver name
1041+
config: Homeserver config
1042+
reactor: Twisted reactor
1043+
homeserver_to_use: Homeserver class to instantiate.
10441044
db_txn_limit: Gives the maximum number of database transactions to run per
10451045
connection before reconnecting. 0 means no limit. If unset, defaults to None
10461046
here which will default upstream to `0`.

tests/test_state.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
Optional,
3030
Set,
3131
Tuple,
32-
cast,
3332
)
3433
from unittest.mock import AsyncMock, Mock
3534

@@ -43,12 +42,11 @@
4342
from synapse.state import StateHandler, StateResolutionHandler, _make_state_cache_entry
4443
from synapse.types import MutableStateMap, StateMap
4544
from synapse.types.state import StateFilter
46-
from synapse.util.clock import Clock
4745
from synapse.util.macaroons import MacaroonGenerator
4846

4947
from tests import unittest
50-
51-
from .utils import MockClock, default_config
48+
from tests.server import get_clock
49+
from tests.utils import default_config
5250

5351
_next_event_id = 1000
5452

@@ -248,7 +246,7 @@ def setUp(self) -> None:
248246
"hostname",
249247
]
250248
)
251-
clock = cast(Clock, MockClock())
249+
reactor, clock = get_clock()
252250
hs.config = default_config("tesths", True)
253251
hs.get_datastores.return_value = Mock(
254252
main=self.dummy_store,

tests/util/test_expiring_cache.py

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -19,23 +19,22 @@
1919
#
2020
#
2121

22-
from typing import List, cast
22+
from typing import List
2323

2424
from synapse.util.caches.expiringcache import ExpiringCache
25-
from synapse.util.clock import Clock
2625

27-
from tests.utils import MockClock
26+
from tests.server import get_clock
2827

2928
from .. import unittest
3029

3130

3231
class ExpiringCacheTestCase(unittest.HomeserverTestCase):
3332
def test_get_set(self) -> None:
34-
clock = MockClock()
33+
reactor, clock = get_clock()
3534
cache: ExpiringCache[str, str] = ExpiringCache(
3635
cache_name="test",
3736
server_name="testserver",
38-
clock=cast(Clock, clock),
37+
clock=clock,
3938
max_len=1,
4039
)
4140

@@ -44,11 +43,11 @@ def test_get_set(self) -> None:
4443
self.assertEqual(cache["key"], "value")
4544

4645
def test_eviction(self) -> None:
47-
clock = MockClock()
46+
reactor, clock = get_clock()
4847
cache: ExpiringCache[str, str] = ExpiringCache(
4948
cache_name="test",
5049
server_name="testserver",
51-
clock=cast(Clock, clock),
50+
clock=clock,
5251
max_len=2,
5352
)
5453

@@ -63,11 +62,11 @@ def test_eviction(self) -> None:
6362
self.assertEqual(cache.get("key3"), "value3")
6463

6564
def test_iterable_eviction(self) -> None:
66-
clock = MockClock()
65+
reactor, clock = get_clock()
6766
cache: ExpiringCache[str, List[int]] = ExpiringCache(
6867
cache_name="test",
6968
server_name="testserver",
70-
clock=cast(Clock, clock),
69+
clock=clock,
7170
max_len=5,
7271
iterable=True,
7372
)
@@ -87,25 +86,25 @@ def test_iterable_eviction(self) -> None:
8786
self.assertEqual(cache.get("key4"), [6, 7])
8887

8988
def test_time_eviction(self) -> None:
90-
clock = MockClock()
89+
reactor, clock = get_clock()
9190
cache: ExpiringCache[str, int] = ExpiringCache(
9291
cache_name="test",
9392
server_name="testserver",
94-
clock=cast(Clock, clock),
93+
clock=clock,
9594
expiry_ms=1000,
9695
)
9796

9897
cache["key"] = 1
99-
clock.advance_time(0.5)
98+
reactor.advance(0.5)
10099
cache["key2"] = 2
101100

102101
self.assertEqual(cache.get("key"), 1)
103102
self.assertEqual(cache.get("key2"), 2)
104103

105-
clock.advance_time(0.9)
104+
reactor.advance(0.9)
106105
self.assertEqual(cache.get("key"), None)
107106
self.assertEqual(cache.get("key2"), 2)
108107

109-
clock.advance_time(1)
108+
reactor.advance(1)
110109
self.assertEqual(cache.get("key"), None)
111110
self.assertEqual(cache.get("key2"), None)

0 commit comments

Comments
 (0)