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

Require types in tests.storage. #14646

Merged
merged 4 commits into from
Dec 9, 2022
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changelog.d/14646.misc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Add missing type hints.
14 changes: 4 additions & 10 deletions mypy.ini
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,9 @@ disallow_untyped_defs = False
[mypy-tests.*]
disallow_untyped_defs = False

[mypy-tests.handlers.test_sso]
disallow_untyped_defs = True

[mypy-tests.handlers.test_user_directory]
disallow_untyped_defs = True

Expand All @@ -103,16 +106,7 @@ disallow_untyped_defs = True
[mypy-tests.state.test_profile]
disallow_untyped_defs = True

[mypy-tests.storage.test_id_generators]
disallow_untyped_defs = True

[mypy-tests.storage.test_profile]
disallow_untyped_defs = True

[mypy-tests.handlers.test_sso]
disallow_untyped_defs = True

[mypy-tests.storage.test_user_directory]
[mypy-tests.storage.*]
disallow_untyped_defs = True

[mypy-tests.rest.*]
Expand Down
2 changes: 1 addition & 1 deletion synapse/storage/databases/main/end_to_end_keys.py
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@ async def get_e2e_device_keys_for_federation_query(
@cancellable
async def get_e2e_device_keys_for_cs_api(
self,
query_list: List[Tuple[str, Optional[str]]],
query_list: Collection[Tuple[str, Optional[str]]],
include_displaynames: bool = True,
) -> Dict[str, Dict[str, JsonDict]]:
"""Fetch a list of device keys, formatted suitably for the C/S API.
Expand Down
10 changes: 7 additions & 3 deletions tests/storage/databases/main/test_deviceinbox.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,12 @@
# See the License for the specific language governing permissions and
# limitations under the License.

from twisted.test.proto_helpers import MemoryReactor

from synapse.rest import admin
from synapse.rest.client import devices
from synapse.server import HomeServer
from synapse.util import Clock

from tests.unittest import HomeserverTestCase

Expand All @@ -25,11 +29,11 @@ class DeviceInboxBackgroundUpdateStoreTestCase(HomeserverTestCase):
devices.register_servlets,
]

def prepare(self, reactor, clock, hs):
def prepare(self, reactor: MemoryReactor, clock: Clock, hs: HomeServer) -> None:
self.store = hs.get_datastores().main
self.user_id = self.register_user("foo", "pass")

def test_background_remove_deleted_devices_from_device_inbox(self):
def test_background_remove_deleted_devices_from_device_inbox(self) -> None:
"""Test that the background task to delete old device_inboxes works properly."""

# create a valid device
Expand Down Expand Up @@ -89,7 +93,7 @@ def test_background_remove_deleted_devices_from_device_inbox(self):
self.assertEqual(1, len(res))
self.assertEqual(res[0], "cur_device")

def test_background_remove_hidden_devices_from_device_inbox(self):
def test_background_remove_hidden_devices_from_device_inbox(self) -> None:
"""Test that the background task to delete hidden devices
from device_inboxes works properly."""

Expand Down
27 changes: 14 additions & 13 deletions tests/storage/databases/main/test_events_worker.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ class HaveSeenEventsTestCase(unittest.HomeserverTestCase):
login.register_servlets,
]

def prepare(self, reactor, clock, hs):
def prepare(self, reactor: MemoryReactor, clock: Clock, hs: HomeServer) -> None:
self.hs = hs
self.store: EventsWorkerStore = hs.get_datastores().main

Expand All @@ -68,7 +68,7 @@ def prepare(self, reactor, clock, hs):

self.event_ids.append(event.event_id)

def test_simple(self):
def test_simple(self) -> None:
with LoggingContext(name="test") as ctx:
res = self.get_success(
self.store.have_seen_events(
Expand All @@ -90,7 +90,7 @@ def test_simple(self):
self.assertEqual(res, {self.event_ids[0]})
self.assertEqual(ctx.get_resource_usage().db_txn_count, 0)

def test_persisting_event_invalidates_cache(self):
def test_persisting_event_invalidates_cache(self) -> None:
"""
Test to make sure that the `have_seen_event` cache
is invalidated after we persist an event and returns
Expand Down Expand Up @@ -138,7 +138,7 @@ def test_persisting_event_invalidates_cache(self):
# That should result in a single db query to lookup
self.assertEqual(ctx.get_resource_usage().db_txn_count, 1)

def test_invalidate_cache_by_room_id(self):
def test_invalidate_cache_by_room_id(self) -> None:
"""
Test to make sure that all events associated with the given `(room_id,)`
are invalidated in the `have_seen_event` cache.
Expand Down Expand Up @@ -175,7 +175,7 @@ class EventCacheTestCase(unittest.HomeserverTestCase):
login.register_servlets,
]

def prepare(self, reactor, clock, hs):
def prepare(self, reactor: MemoryReactor, clock: Clock, hs: HomeServer) -> None:
self.store: EventsWorkerStore = hs.get_datastores().main

self.user = self.register_user("user", "pass")
Expand All @@ -189,7 +189,7 @@ def prepare(self, reactor, clock, hs):
# Reset the event cache so the tests start with it empty
self.get_success(self.store._get_event_cache.clear())

def test_simple(self):
def test_simple(self) -> None:
"""Test that we cache events that we pull from the DB."""

with LoggingContext("test") as ctx:
Expand All @@ -198,7 +198,7 @@ def test_simple(self):
# We should have fetched the event from the DB
self.assertEqual(ctx.get_resource_usage().evt_db_fetch_count, 1)

def test_event_ref(self):
def test_event_ref(self) -> None:
"""Test that we reuse events that are still in memory but have fallen
out of the cache, rather than requesting them from the DB.
"""
Expand All @@ -223,7 +223,7 @@ def test_event_ref(self):
# from the DB
self.assertEqual(ctx.get_resource_usage().evt_db_fetch_count, 0)

def test_dedupe(self):
def test_dedupe(self) -> None:
"""Test that if we request the same event multiple times we only pull it
out once.
"""
Expand All @@ -241,7 +241,7 @@ def test_dedupe(self):
class DatabaseOutageTestCase(unittest.HomeserverTestCase):
"""Test event fetching during a database outage."""

def prepare(self, reactor: MemoryReactor, clock: Clock, hs: HomeServer):
def prepare(self, reactor: MemoryReactor, clock: Clock, hs: HomeServer) -> None:
self.store: EventsWorkerStore = hs.get_datastores().main

self.room_id = f"!room:{hs.hostname}"
Expand Down Expand Up @@ -377,7 +377,7 @@ class GetEventCancellationTestCase(unittest.HomeserverTestCase):
login.register_servlets,
]

def prepare(self, reactor: MemoryReactor, clock: Clock, hs: HomeServer):
def prepare(self, reactor: MemoryReactor, clock: Clock, hs: HomeServer) -> None:
self.store: EventsWorkerStore = hs.get_datastores().main

self.user = self.register_user("user", "pass")
Expand Down Expand Up @@ -412,7 +412,8 @@ def blocking_get_event_calls(
unblock: "Deferred[None]" = Deferred()
original_runWithConnection = self.store.db_pool.runWithConnection

async def runWithConnection(*args, **kwargs):
# Don't bother with the types here, we just pass into the original function.
async def runWithConnection(*args, **kwargs): # type: ignore[no-untyped-def]
await unblock
return await original_runWithConnection(*args, **kwargs)

Expand Down Expand Up @@ -441,7 +442,7 @@ async def get_event(ctx: LoggingContext) -> None:
self.assertEqual(ctx1.get_resource_usage().evt_db_fetch_count, 1)
self.assertEqual(ctx2.get_resource_usage().evt_db_fetch_count, 0)

def test_first_get_event_cancelled(self):
def test_first_get_event_cancelled(self) -> None:
"""Test cancellation of the first `get_event` call sharing a database fetch.

The first `get_event` call is the one which initiates the fetch. We expect the
Expand All @@ -467,7 +468,7 @@ def test_first_get_event_cancelled(self):
# The second `get_event` call should complete successfully.
self.get_success(get_event2)

def test_second_get_event_cancelled(self):
def test_second_get_event_cancelled(self) -> None:
"""Test cancellation of the second `get_event` call sharing a database fetch."""
with self.blocking_get_event_calls() as (unblock, get_event1, get_event2):
# Cancel the second `get_event` call.
Expand Down
18 changes: 10 additions & 8 deletions tests/storage/databases/main/test_lock.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,26 +15,28 @@
from twisted.internet import defer, reactor
from twisted.internet.base import ReactorBase
from twisted.internet.defer import Deferred
from twisted.test.proto_helpers import MemoryReactor

from synapse.server import HomeServer
from synapse.storage.databases.main.lock import _LOCK_TIMEOUT_MS
from synapse.util import Clock

from tests import unittest


class LockTestCase(unittest.HomeserverTestCase):
def prepare(self, reactor, clock, hs: HomeServer):
def prepare(self, reactor: MemoryReactor, clock: Clock, hs: HomeServer) -> None:
self.store = hs.get_datastores().main

def test_acquire_contention(self):
def test_acquire_contention(self) -> None:
# Track the number of tasks holding the lock.
# Should be at most 1.
in_lock = 0
max_in_lock = 0

release_lock: "Deferred[None]" = Deferred()

async def task():
async def task() -> None:
nonlocal in_lock
nonlocal max_in_lock

Expand Down Expand Up @@ -76,7 +78,7 @@ async def task():
# At most one task should have held the lock at a time.
self.assertEqual(max_in_lock, 1)

def test_simple_lock(self):
def test_simple_lock(self) -> None:
"""Test that we can take out a lock and that while we hold it nobody
else can take it out.
"""
Expand All @@ -103,7 +105,7 @@ def test_simple_lock(self):
self.get_success(lock3.__aenter__())
self.get_success(lock3.__aexit__(None, None, None))

def test_maintain_lock(self):
def test_maintain_lock(self) -> None:
"""Test that we don't time out locks while they're still active"""

lock = self.get_success(self.store.try_acquire_lock("name", "key"))
Expand All @@ -119,7 +121,7 @@ def test_maintain_lock(self):

self.get_success(lock.__aexit__(None, None, None))

def test_timeout_lock(self):
def test_timeout_lock(self) -> None:
"""Test that we time out locks if they're not updated for ages"""

lock = self.get_success(self.store.try_acquire_lock("name", "key"))
Expand All @@ -139,7 +141,7 @@ def test_timeout_lock(self):

self.assertFalse(self.get_success(lock.is_still_valid()))

def test_drop(self):
def test_drop(self) -> None:
"""Test that dropping the context manager means we stop renewing the lock"""

lock = self.get_success(self.store.try_acquire_lock("name", "key"))
Expand All @@ -153,7 +155,7 @@ def test_drop(self):
lock2 = self.get_success(self.store.try_acquire_lock("name", "key"))
self.assertIsNotNone(lock2)

def test_shutdown(self):
def test_shutdown(self) -> None:
"""Test that shutting down Synapse releases the locks"""
# Acquire two locks
lock = self.get_success(self.store.try_acquire_lock("name", "key1"))
Expand Down
8 changes: 4 additions & 4 deletions tests/storage/databases/main/test_receipts.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ class ReceiptsBackgroundUpdateStoreTestCase(HomeserverTestCase):
login.register_servlets,
]

def prepare(self, reactor: MemoryReactor, clock: Clock, hs: HomeServer):
def prepare(self, reactor: MemoryReactor, clock: Clock, hs: HomeServer) -> None:
self.store = hs.get_datastores().main
self.user_id = self.register_user("foo", "pass")
self.token = self.login("foo", "pass")
Expand All @@ -47,7 +47,7 @@ def _test_background_receipts_unique_index(
table: str,
receipts: Dict[Tuple[str, str, str], Sequence[Dict[str, Any]]],
expected_unique_receipts: Dict[Tuple[str, str, str], Optional[Dict[str, Any]]],
):
) -> None:
"""Test that the background update to uniqueify non-thread receipts in
the given receipts table works properly.

Expand Down Expand Up @@ -154,7 +154,7 @@ def drop_receipts_unique_index(txn: LoggingTransaction) -> None:
f"Background update did not remove all duplicate receipts from {table}",
)

def test_background_receipts_linearized_unique_index(self):
def test_background_receipts_linearized_unique_index(self) -> None:
"""Test that the background update to uniqueify non-thread receipts in
`receipts_linearized` works properly.
"""
Expand All @@ -177,7 +177,7 @@ def test_background_receipts_linearized_unique_index(self):
},
)

def test_background_receipts_graph_unique_index(self):
def test_background_receipts_graph_unique_index(self) -> None:
"""Test that the background update to uniqueify non-thread receipts in
`receipts_graph` works properly.
"""
Expand Down
10 changes: 7 additions & 3 deletions tests/storage/databases/main/test_room.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,14 @@

import json

from twisted.test.proto_helpers import MemoryReactor

from synapse.api.constants import RoomTypes
from synapse.rest import admin
from synapse.rest.client import login, room
from synapse.server import HomeServer
from synapse.storage.databases.main.room import _BackgroundUpdates
from synapse.util import Clock

from tests.unittest import HomeserverTestCase

Expand All @@ -30,7 +34,7 @@ class RoomBackgroundUpdateStoreTestCase(HomeserverTestCase):
login.register_servlets,
]

def prepare(self, reactor, clock, hs):
def prepare(self, reactor: MemoryReactor, clock: Clock, hs: HomeServer) -> None:
self.store = hs.get_datastores().main
self.user_id = self.register_user("foo", "pass")
self.token = self.login("foo", "pass")
Expand All @@ -40,7 +44,7 @@ def _generate_room(self) -> str:

return room_id

def test_background_populate_rooms_creator_column(self):
def test_background_populate_rooms_creator_column(self) -> None:
"""Test that the background update to populate the rooms creator column
works properly.
"""
Expand Down Expand Up @@ -95,7 +99,7 @@ def test_background_populate_rooms_creator_column(self):
)
self.assertEqual(room_creator_after, self.user_id)

def test_background_add_room_type_column(self):
def test_background_add_room_type_column(self) -> None:
"""Test that the background update to populate the `room_type` column in
`room_stats_state` works properly.
"""
Expand Down
2 changes: 1 addition & 1 deletion tests/storage/test__base.py
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ def test_upsert_many(self) -> None:
{(1, "user1", "hello"), (2, "user2", "bleb")},
)

def test_simple_update_many(self):
def test_simple_update_many(self) -> None:
"""
simple_update_many performs many updates at once.
"""
Expand Down
Loading