From c52abc1cfdd9e5480cdb4a03d626fe61cacc6573 Mon Sep 17 00:00:00 2001 From: Patrick Cloke Date: Fri, 27 May 2022 07:14:36 -0400 Subject: [PATCH] Additional constants for EDU types. (#12884) Instead of hard-coding strings in many places. --- changelog.d/12884.misc | 1 + synapse/api/constants.py | 8 ++++- synapse/api/filtering.py | 4 +-- synapse/federation/federation_server.py | 2 +- .../sender/per_destination_queue.py | 7 ++-- .../federation/sender/transaction_manager.py | 6 +++- .../federation/transport/server/federation.py | 6 +++- synapse/handlers/appservice.py | 4 +-- synapse/handlers/device.py | 5 +-- synapse/handlers/devicemessage.py | 6 ++-- synapse/handlers/e2e_keys.py | 5 +-- synapse/handlers/events.py | 2 +- synapse/handlers/initial_sync.py | 4 +-- synapse/handlers/presence.py | 8 +++-- synapse/handlers/receipts.py | 6 ++-- synapse/handlers/typing.py | 11 ++++--- synapse/notifier.py | 4 +-- synapse/rest/client/sync.py | 4 +-- synapse/storage/databases/main/devices.py | 5 +-- synapse/storage/databases/main/receipts.py | 8 ++--- tests/api/test_filtering.py | 6 ++-- tests/events/test_presence_router.py | 2 +- tests/federation/test_federation_sender.py | 26 ++++++++------- tests/federation/transport/test_server.py | 4 ++- tests/handlers/test_appservice.py | 3 +- tests/handlers/test_receipts.py | 32 +++++++++--------- tests/handlers/test_typing.py | 33 +++++++++++++------ tests/module_api/test_api.py | 2 +- tests/rest/client/test_events.py | 3 +- tests/rest/client/test_rooms.py | 3 +- tests/rest/client/test_sendtodevice.py | 5 +-- tests/rest/client/test_shadow_banned.py | 4 +-- tests/rest/client/test_sync.py | 3 +- tests/rest/client/test_typing.py | 3 +- tests/storage/test_devices.py | 7 ++-- 35 files changed, 146 insertions(+), 96 deletions(-) create mode 100644 changelog.d/12884.misc diff --git a/changelog.d/12884.misc b/changelog.d/12884.misc new file mode 100644 index 0000000000..56eead9472 --- /dev/null +++ b/changelog.d/12884.misc @@ -0,0 +1 @@ +Use constants for EDU types. diff --git a/synapse/api/constants.py b/synapse/api/constants.py index 4a0552e7e5..f03fdd6dae 100644 --- a/synapse/api/constants.py +++ b/synapse/api/constants.py @@ -137,7 +137,13 @@ class DeviceKeyAlgorithms: class EduTypes: - Presence: Final = "m.presence" + PRESENCE: Final = "m.presence" + TYPING: Final = "m.typing" + RECEIPT: Final = "m.receipt" + DEVICE_LIST_UPDATE: Final = "m.device_list_update" + SIGNING_KEY_UPDATE: Final = "m.signing_key_update" + UNSTABLE_SIGNING_KEY_UPDATE: Final = "org.matrix.signing_key_update" + DIRECT_TO_DEVICE: Final = "m.direct_to_device" class RejectedReason: diff --git a/synapse/api/filtering.py b/synapse/api/filtering.py index b91ce06de7..b007147519 100644 --- a/synapse/api/filtering.py +++ b/synapse/api/filtering.py @@ -33,7 +33,7 @@ from typing import ( import jsonschema from jsonschema import FormatChecker -from synapse.api.constants import EventContentFields +from synapse.api.constants import EduTypes, EventContentFields from synapse.api.errors import SynapseError from synapse.api.presence import UserPresenceState from synapse.events import EventBase @@ -347,7 +347,7 @@ class Filter: user_id = event.user_id field_matchers = { "senders": lambda v: user_id == v, - "types": lambda v: "m.presence" == v, + "types": lambda v: EduTypes.PRESENCE == v, } return self._check_fields(field_matchers) else: diff --git a/synapse/federation/federation_server.py b/synapse/federation/federation_server.py index b8232e5257..5b227b85fd 100644 --- a/synapse/federation/federation_server.py +++ b/synapse/federation/federation_server.py @@ -1353,7 +1353,7 @@ class FederationHandlerRegistry: self._edu_type_to_instance[edu_type] = instance_names async def on_edu(self, edu_type: str, origin: str, content: dict) -> None: - if not self.config.server.use_presence and edu_type == EduTypes.Presence: + if not self.config.server.use_presence and edu_type == EduTypes.PRESENCE: return # Check if we have a handler on this instance diff --git a/synapse/federation/sender/per_destination_queue.py b/synapse/federation/sender/per_destination_queue.py index 8983b5a53d..333ca9a97f 100644 --- a/synapse/federation/sender/per_destination_queue.py +++ b/synapse/federation/sender/per_destination_queue.py @@ -21,6 +21,7 @@ from typing import TYPE_CHECKING, Dict, Hashable, Iterable, List, Optional, Tupl import attr from prometheus_client import Counter +from synapse.api.constants import EduTypes from synapse.api.errors import ( FederationDeniedError, HttpResponseException, @@ -542,7 +543,7 @@ class PerDestinationQueue: edu = Edu( origin=self._server_name, destination=self._destination, - edu_type="m.receipt", + edu_type=EduTypes.RECEIPT, content=self._pending_rrs, ) self._pending_rrs = {} @@ -592,7 +593,7 @@ class PerDestinationQueue: Edu( origin=self._server_name, destination=self._destination, - edu_type="m.direct_to_device", + edu_type=EduTypes.DIRECT_TO_DEVICE, content=content, ) for content in contents @@ -670,7 +671,7 @@ class _TransactionQueueManager: Edu( origin=self.queue._server_name, destination=self.queue._destination, - edu_type="m.presence", + edu_type=EduTypes.PRESENCE, content={ "push": [ format_user_presence_state( diff --git a/synapse/federation/sender/transaction_manager.py b/synapse/federation/sender/transaction_manager.py index 0c1cad86ab..75081810fd 100644 --- a/synapse/federation/sender/transaction_manager.py +++ b/synapse/federation/sender/transaction_manager.py @@ -16,6 +16,7 @@ from typing import TYPE_CHECKING, List from prometheus_client import Gauge +from synapse.api.constants import EduTypes from synapse.api.errors import HttpResponseException from synapse.events import EventBase from synapse.federation.persistence import TransactionActions @@ -126,7 +127,10 @@ class TransactionManager: len(edus), ) if issue_8631_logger.isEnabledFor(logging.DEBUG): - DEVICE_UPDATE_EDUS = {"m.device_list_update", "m.signing_key_update"} + DEVICE_UPDATE_EDUS = { + EduTypes.DEVICE_LIST_UPDATE, + EduTypes.SIGNING_KEY_UPDATE, + } device_list_updates = [ edu.content for edu in edus if edu.edu_type in DEVICE_UPDATE_EDUS ] diff --git a/synapse/federation/transport/server/federation.py b/synapse/federation/transport/server/federation.py index 57e8fb21b0..7dfb890661 100644 --- a/synapse/federation/transport/server/federation.py +++ b/synapse/federation/transport/server/federation.py @@ -27,6 +27,7 @@ from typing import ( from matrix_common.versionstring import get_distribution_version_string from typing_extensions import Literal +from synapse.api.constants import EduTypes from synapse.api.errors import Codes, SynapseError from synapse.api.room_versions import RoomVersions from synapse.api.urls import FEDERATION_UNSTABLE_PREFIX, FEDERATION_V2_PREFIX @@ -108,7 +109,10 @@ class FederationSendServlet(BaseFederationServerServlet): ) if issue_8631_logger.isEnabledFor(logging.DEBUG): - DEVICE_UPDATE_EDUS = ["m.device_list_update", "m.signing_key_update"] + DEVICE_UPDATE_EDUS = [ + EduTypes.DEVICE_LIST_UPDATE, + EduTypes.SIGNING_KEY_UPDATE, + ] device_list_updates = [ edu.get("content", {}) for edu in transaction_data.get("edus", []) diff --git a/synapse/handlers/appservice.py b/synapse/handlers/appservice.py index 1da7bcc85b..814553e098 100644 --- a/synapse/handlers/appservice.py +++ b/synapse/handlers/appservice.py @@ -19,7 +19,7 @@ from prometheus_client import Counter from twisted.internet import defer import synapse -from synapse.api.constants import EventTypes +from synapse.api.constants import EduTypes, EventTypes from synapse.appservice import ApplicationService from synapse.events import EventBase from synapse.handlers.presence import format_user_presence_state @@ -503,7 +503,7 @@ class ApplicationServicesHandler: time_now = self.clock.time_msec() events.extend( { - "type": "m.presence", + "type": EduTypes.PRESENCE, "sender": event.user_id, "content": format_user_presence_state( event, time_now, include_user_id=False diff --git a/synapse/handlers/device.py b/synapse/handlers/device.py index b21e469865..438a549339 100644 --- a/synapse/handlers/device.py +++ b/synapse/handlers/device.py @@ -28,7 +28,7 @@ from typing import ( ) from synapse.api import errors -from synapse.api.constants import EventTypes +from synapse.api.constants import EduTypes, EventTypes from synapse.api.errors import ( Codes, FederationDeniedError, @@ -279,7 +279,8 @@ class DeviceHandler(DeviceWorkerHandler): federation_registry = hs.get_federation_registry() federation_registry.register_edu_handler( - "m.device_list_update", self.device_list_updater.incoming_device_list_update + EduTypes.DEVICE_LIST_UPDATE, + self.device_list_updater.incoming_device_list_update, ) hs.get_distributor().observe("user_left_room", self.user_left_room) diff --git a/synapse/handlers/devicemessage.py b/synapse/handlers/devicemessage.py index 53668cce3b..444c08bc2e 100644 --- a/synapse/handlers/devicemessage.py +++ b/synapse/handlers/devicemessage.py @@ -15,7 +15,7 @@ import logging from typing import TYPE_CHECKING, Any, Dict -from synapse.api.constants import ToDeviceEventTypes +from synapse.api.constants import EduTypes, ToDeviceEventTypes from synapse.api.errors import SynapseError from synapse.api.ratelimiting import Ratelimiter from synapse.logging.context import run_in_background @@ -59,11 +59,11 @@ class DeviceMessageHandler: # to the appropriate worker. if hs.get_instance_name() in hs.config.worker.writers.to_device: hs.get_federation_registry().register_edu_handler( - "m.direct_to_device", self.on_direct_to_device_edu + EduTypes.DIRECT_TO_DEVICE, self.on_direct_to_device_edu ) else: hs.get_federation_registry().register_instances_for_edu( - "m.direct_to_device", + EduTypes.DIRECT_TO_DEVICE, hs.config.worker.writers.to_device, ) diff --git a/synapse/handlers/e2e_keys.py b/synapse/handlers/e2e_keys.py index e6c2cfb8c8..52bb5c9c55 100644 --- a/synapse/handlers/e2e_keys.py +++ b/synapse/handlers/e2e_keys.py @@ -25,6 +25,7 @@ from unpaddedbase64 import decode_base64 from twisted.internet import defer +from synapse.api.constants import EduTypes from synapse.api.errors import CodeMessageException, Codes, NotFoundError, SynapseError from synapse.logging.context import make_deferred_yieldable, run_in_background from synapse.logging.opentracing import log_kv, set_tag, tag_args, trace @@ -66,13 +67,13 @@ class E2eKeysHandler: # Only register this edu handler on master as it requires writing # device updates to the db federation_registry.register_edu_handler( - "m.signing_key_update", + EduTypes.SIGNING_KEY_UPDATE, self._edu_updater.incoming_signing_key_update, ) # also handle the unstable version # FIXME: remove this when enough servers have upgraded federation_registry.register_edu_handler( - "org.matrix.signing_key_update", + EduTypes.UNSTABLE_SIGNING_KEY_UPDATE, self._edu_updater.incoming_signing_key_update, ) diff --git a/synapse/handlers/events.py b/synapse/handlers/events.py index 82a5aac3dd..cb7e0ca7a8 100644 --- a/synapse/handlers/events.py +++ b/synapse/handlers/events.py @@ -113,7 +113,7 @@ class EventStreamHandler: states = await presence_handler.get_states(users) to_add.extend( { - "type": EduTypes.Presence, + "type": EduTypes.PRESENCE, "content": format_user_presence_state(state, time_now), } for state in states diff --git a/synapse/handlers/initial_sync.py b/synapse/handlers/initial_sync.py index c06932a41a..fbdbeeedfd 100644 --- a/synapse/handlers/initial_sync.py +++ b/synapse/handlers/initial_sync.py @@ -274,7 +274,7 @@ class InitialSyncHandler: "rooms": rooms_ret, "presence": [ { - "type": "m.presence", + "type": EduTypes.PRESENCE, "content": format_user_presence_state(event, now), } for event in presence @@ -439,7 +439,7 @@ class InitialSyncHandler: return [ { - "type": EduTypes.Presence, + "type": EduTypes.PRESENCE, "content": format_user_presence_state(s, time_now), } for s in states diff --git a/synapse/handlers/presence.py b/synapse/handlers/presence.py index dd84e6c88b..bf112b9e1e 100644 --- a/synapse/handlers/presence.py +++ b/synapse/handlers/presence.py @@ -49,7 +49,7 @@ from prometheus_client import Counter from typing_extensions import ContextManager import synapse.metrics -from synapse.api.constants import EventTypes, Membership, PresenceState +from synapse.api.constants import EduTypes, EventTypes, Membership, PresenceState from synapse.api.errors import SynapseError from synapse.api.presence import UserPresenceState from synapse.appservice import ApplicationService @@ -394,7 +394,7 @@ class WorkerPresenceHandler(BasePresenceHandler): # Route presence EDUs to the right worker hs.get_federation_registry().register_instances_for_edu( - "m.presence", + EduTypes.PRESENCE, hs.config.worker.writers.presence, ) @@ -649,7 +649,9 @@ class PresenceHandler(BasePresenceHandler): federation_registry = hs.get_federation_registry() - federation_registry.register_edu_handler("m.presence", self.incoming_presence) + federation_registry.register_edu_handler( + EduTypes.PRESENCE, self.incoming_presence + ) LaterGauge( "synapse_handlers_presence_user_to_current_state_size", diff --git a/synapse/handlers/receipts.py b/synapse/handlers/receipts.py index e6a35f1d09..43d2882b0a 100644 --- a/synapse/handlers/receipts.py +++ b/synapse/handlers/receipts.py @@ -14,7 +14,7 @@ import logging from typing import TYPE_CHECKING, Iterable, List, Optional, Tuple -from synapse.api.constants import ReceiptTypes +from synapse.api.constants import EduTypes, ReceiptTypes from synapse.appservice import ApplicationService from synapse.streams import EventSource from synapse.types import ( @@ -52,11 +52,11 @@ class ReceiptsHandler: # to the appropriate worker. if hs.get_instance_name() in hs.config.worker.writers.receipts: hs.get_federation_registry().register_edu_handler( - "m.receipt", self._received_remote_receipt + EduTypes.RECEIPT, self._received_remote_receipt ) else: hs.get_federation_registry().register_instances_for_edu( - "m.receipt", + EduTypes.RECEIPT, hs.config.worker.writers.receipts, ) diff --git a/synapse/handlers/typing.py b/synapse/handlers/typing.py index bb00750bfd..0aeab86bbb 100644 --- a/synapse/handlers/typing.py +++ b/synapse/handlers/typing.py @@ -17,6 +17,7 @@ from typing import TYPE_CHECKING, Dict, Iterable, List, Optional, Set, Tuple import attr +from synapse.api.constants import EduTypes from synapse.api.errors import AuthError, ShadowBanError, SynapseError from synapse.appservice import ApplicationService from synapse.metrics.background_process_metrics import ( @@ -68,7 +69,7 @@ class FollowerTypingHandler: if hs.get_instance_name() not in hs.config.worker.writers.typing: hs.get_federation_registry().register_instances_for_edu( - "m.typing", + EduTypes.TYPING, hs.config.worker.writers.typing, ) @@ -143,7 +144,7 @@ class FollowerTypingHandler: logger.debug("sending typing update to %s", domain) self.federation.build_and_send_edu( destination=domain, - edu_type="m.typing", + edu_type=EduTypes.TYPING, content={ "room_id": member.room_id, "user_id": member.user_id, @@ -218,7 +219,9 @@ class TypingWriterHandler(FollowerTypingHandler): self.hs = hs - hs.get_federation_registry().register_edu_handler("m.typing", self._recv_edu) + hs.get_federation_registry().register_edu_handler( + EduTypes.TYPING, self._recv_edu + ) hs.get_distributor().observe("user_left_room", self.user_left_room) @@ -458,7 +461,7 @@ class TypingNotificationEventSource(EventSource[int, JsonDict]): def _make_event_for(self, room_id: str) -> JsonDict: typing = self.get_typing_handler()._room_typing[room_id] return { - "type": "m.typing", + "type": EduTypes.TYPING, "room_id": room_id, "content": {"user_ids": list(typing)}, } diff --git a/synapse/notifier.py b/synapse/notifier.py index ba23257f54..c2b66eec62 100644 --- a/synapse/notifier.py +++ b/synapse/notifier.py @@ -33,7 +33,7 @@ from prometheus_client import Counter from twisted.internet import defer -from synapse.api.constants import EventTypes, HistoryVisibility, Membership +from synapse.api.constants import EduTypes, EventTypes, HistoryVisibility, Membership from synapse.api.errors import AuthError from synapse.events import EventBase from synapse.handlers.presence import format_user_presence_state @@ -632,7 +632,7 @@ class Notifier: now = self.clock.time_msec() new_events[:] = [ { - "type": "m.presence", + "type": EduTypes.PRESENCE, "content": format_user_presence_state(event, now), } for event in new_events diff --git a/synapse/rest/client/sync.py b/synapse/rest/client/sync.py index f596b792fa..8bbf35148d 100644 --- a/synapse/rest/client/sync.py +++ b/synapse/rest/client/sync.py @@ -16,7 +16,7 @@ import logging from collections import defaultdict from typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple, Union -from synapse.api.constants import Membership, PresenceState +from synapse.api.constants import EduTypes, Membership, PresenceState from synapse.api.errors import Codes, StoreError, SynapseError from synapse.api.filtering import FilterCollection from synapse.api.presence import UserPresenceState @@ -305,7 +305,7 @@ class SyncRestServlet(RestServlet): return { "events": [ { - "type": "m.presence", + "type": EduTypes.PRESENCE, "sender": event.user_id, "content": format_user_presence_state( event, time_now, include_user_id=False diff --git a/synapse/storage/databases/main/devices.py b/synapse/storage/databases/main/devices.py index 2df4dd4ed4..dd43bae784 100644 --- a/synapse/storage/databases/main/devices.py +++ b/synapse/storage/databases/main/devices.py @@ -28,6 +28,7 @@ from typing import ( cast, ) +from synapse.api.constants import EduTypes from synapse.api.errors import Codes, StoreError from synapse.logging.opentracing import ( get_active_span_text_map, @@ -419,7 +420,7 @@ class DeviceWorkerStore(SQLBaseStore): # Add the updated cross-signing keys to the results list for user_id, result in cross_signing_keys_by_user.items(): result["user_id"] = user_id - results.append(("m.signing_key_update", result)) + results.append((EduTypes.SIGNING_KEY_UPDATE, result)) # also send the unstable version # FIXME: remove this when enough servers have upgraded # and remove the length budgeting above. @@ -545,7 +546,7 @@ class DeviceWorkerStore(SQLBaseStore): else: result["deleted"] = True - results.append(("m.device_list_update", result)) + results.append((EduTypes.DEVICE_LIST_UPDATE, result)) return results diff --git a/synapse/storage/databases/main/receipts.py b/synapse/storage/databases/main/receipts.py index cfa4d4924d..f74aa1e3f3 100644 --- a/synapse/storage/databases/main/receipts.py +++ b/synapse/storage/databases/main/receipts.py @@ -26,7 +26,7 @@ from typing import ( cast, ) -from synapse.api.constants import ReceiptTypes +from synapse.api.constants import EduTypes, ReceiptTypes from synapse.replication.slave.storage._slaved_id_tracker import SlavedIdTracker from synapse.replication.tcp.streams import ReceiptsStream from synapse.storage._base import SQLBaseStore, db_to_json, make_in_list_sql_clause @@ -363,7 +363,7 @@ class ReceiptsWorkerStore(SQLBaseStore): row["user_id"] ] = db_to_json(row["data"]) - return [{"type": "m.receipt", "room_id": room_id, "content": content}] + return [{"type": EduTypes.RECEIPT, "room_id": room_id, "content": content}] @cachedList( cached_method_name="_get_linearized_receipts_for_room", @@ -411,7 +411,7 @@ class ReceiptsWorkerStore(SQLBaseStore): # receipts by room, event and type. room_event = results.setdefault( row["room_id"], - {"type": "m.receipt", "room_id": row["room_id"], "content": {}}, + {"type": EduTypes.RECEIPT, "room_id": row["room_id"], "content": {}}, ) # The content is of the form: @@ -476,7 +476,7 @@ class ReceiptsWorkerStore(SQLBaseStore): # receipts by room, event and type. room_event = results.setdefault( row["room_id"], - {"type": "m.receipt", "room_id": row["room_id"], "content": {}}, + {"type": EduTypes.RECEIPT, "room_id": row["room_id"], "content": {}}, ) # The content is of the form: diff --git a/tests/api/test_filtering.py b/tests/api/test_filtering.py index 985d6e397d..a269c477fb 100644 --- a/tests/api/test_filtering.py +++ b/tests/api/test_filtering.py @@ -20,7 +20,7 @@ from unittest.mock import patch import jsonschema from frozendict import frozendict -from synapse.api.constants import EventContentFields +from synapse.api.constants import EduTypes, EventContentFields from synapse.api.errors import SynapseError from synapse.api.filtering import Filter from synapse.events import make_event_from_dict @@ -85,13 +85,13 @@ class FilteringTestCase(unittest.HomeserverTestCase): "org.matrix.not_labels": ["#work"], }, "ephemeral": { - "types": ["m.receipt", "m.typing"], + "types": [EduTypes.RECEIPT, EduTypes.TYPING], "not_rooms": ["!726s6s6q:example.com"], "not_senders": ["@spam:example.com"], }, }, "presence": { - "types": ["m.presence"], + "types": [EduTypes.PRESENCE], "not_senders": ["@alice:example.com"], }, "event_format": "client", diff --git a/tests/events/test_presence_router.py b/tests/events/test_presence_router.py index 3deb14c308..ffc3012a86 100644 --- a/tests/events/test_presence_router.py +++ b/tests/events/test_presence_router.py @@ -439,7 +439,7 @@ class PresenceRouterTestCase(FederatingHomeserverTestCase): for edu in edus: # Make sure we're only checking presence-type EDUs - if edu["edu_type"] != EduTypes.Presence: + if edu["edu_type"] != EduTypes.PRESENCE: continue # EDUs can contain multiple presence updates diff --git a/tests/federation/test_federation_sender.py b/tests/federation/test_federation_sender.py index 6b26353d5e..b5be727fe4 100644 --- a/tests/federation/test_federation_sender.py +++ b/tests/federation/test_federation_sender.py @@ -19,7 +19,7 @@ from signedjson.types import BaseKey, SigningKey from twisted.internet import defer -from synapse.api.constants import RoomEncryptionAlgorithms +from synapse.api.constants import EduTypes, RoomEncryptionAlgorithms from synapse.rest import admin from synapse.rest.client import login from synapse.types import JsonDict, ReadReceipt @@ -63,7 +63,7 @@ class FederationSenderReceiptsTestCases(HomeserverTestCase): data["edus"], [ { - "edu_type": "m.receipt", + "edu_type": EduTypes.RECEIPT, "content": { "room_id": { "m.read": { @@ -103,7 +103,7 @@ class FederationSenderReceiptsTestCases(HomeserverTestCase): data["edus"], [ { - "edu_type": "m.receipt", + "edu_type": EduTypes.RECEIPT, "content": { "room_id": { "m.read": { @@ -138,7 +138,7 @@ class FederationSenderReceiptsTestCases(HomeserverTestCase): data["edus"], [ { - "edu_type": "m.receipt", + "edu_type": EduTypes.RECEIPT, "content": { "room_id": { "m.read": { @@ -322,8 +322,10 @@ class FederationSenderDevicesTestCases(HomeserverTestCase): # expect signing key update edu self.assertEqual(len(self.edus), 2) - self.assertEqual(self.edus.pop(0)["edu_type"], "m.signing_key_update") - self.assertEqual(self.edus.pop(0)["edu_type"], "org.matrix.signing_key_update") + self.assertEqual(self.edus.pop(0)["edu_type"], EduTypes.SIGNING_KEY_UPDATE) + self.assertEqual( + self.edus.pop(0)["edu_type"], EduTypes.UNSTABLE_SIGNING_KEY_UPDATE + ) # sign the devices d1_json = build_device_dict(u1, "D1", device1_signing_key) @@ -348,7 +350,7 @@ class FederationSenderDevicesTestCases(HomeserverTestCase): self.assertEqual(len(self.edus), 2) stream_id = None # FIXME: there is a discontinuity in the stream IDs: see #7142 for edu in self.edus: - self.assertEqual(edu["edu_type"], "m.device_list_update") + self.assertEqual(edu["edu_type"], EduTypes.DEVICE_LIST_UPDATE) c = edu["content"] if stream_id is not None: self.assertEqual(c["prev_id"], [stream_id]) @@ -388,7 +390,7 @@ class FederationSenderDevicesTestCases(HomeserverTestCase): # expect three edus, in an unknown order self.assertEqual(len(self.edus), 3) for edu in self.edus: - self.assertEqual(edu["edu_type"], "m.device_list_update") + self.assertEqual(edu["edu_type"], EduTypes.DEVICE_LIST_UPDATE) c = edu["content"] self.assertGreaterEqual( c.items(), @@ -435,7 +437,7 @@ class FederationSenderDevicesTestCases(HomeserverTestCase): self.assertEqual(len(self.edus), 3) stream_id = None for edu in self.edus: - self.assertEqual(edu["edu_type"], "m.device_list_update") + self.assertEqual(edu["edu_type"], EduTypes.DEVICE_LIST_UPDATE) c = edu["content"] self.assertEqual(c["prev_id"], [stream_id] if stream_id is not None else []) if stream_id is not None: @@ -487,7 +489,7 @@ class FederationSenderDevicesTestCases(HomeserverTestCase): # there should be a single update for this user. self.assertEqual(len(self.edus), 1) edu = self.edus.pop(0) - self.assertEqual(edu["edu_type"], "m.device_list_update") + self.assertEqual(edu["edu_type"], EduTypes.DEVICE_LIST_UPDATE) c = edu["content"] # synapse uses an empty prev_id list to indicate "needs a full resync". @@ -544,7 +546,7 @@ class FederationSenderDevicesTestCases(HomeserverTestCase): # ... and we should get a single update for this user. self.assertEqual(len(self.edus), 1) edu = self.edus.pop(0) - self.assertEqual(edu["edu_type"], "m.device_list_update") + self.assertEqual(edu["edu_type"], EduTypes.DEVICE_LIST_UPDATE) c = edu["content"] # synapse uses an empty prev_id list to indicate "needs a full resync". @@ -560,7 +562,7 @@ class FederationSenderDevicesTestCases(HomeserverTestCase): """Check that the given EDU is an update for the given device Returns the stream_id. """ - self.assertEqual(edu["edu_type"], "m.device_list_update") + self.assertEqual(edu["edu_type"], EduTypes.DEVICE_LIST_UPDATE) content = edu["content"] expected = { diff --git a/tests/federation/transport/test_server.py b/tests/federation/transport/test_server.py index 5f001c33b0..cfd550a04b 100644 --- a/tests/federation/transport/test_server.py +++ b/tests/federation/transport/test_server.py @@ -12,6 +12,8 @@ # See the License for the specific language governing permissions and # limitations under the License. +from synapse.api.constants import EduTypes + from tests import unittest from tests.unittest import DEBUG, override_config @@ -50,7 +52,7 @@ class RoomDirectoryFederationTests(unittest.FederatingHomeserverTestCase): "/_matrix/federation/v1/send/txn_id_1234/", content={ "edus": [ - {"edu_type": "m.device_list_update", "content": {"foo": "bar"}} + {"edu_type": EduTypes.DEVICE_LIST_UPDATE, "content": {"foo": "bar"}} ], "pdus": [], }, diff --git a/tests/handlers/test_appservice.py b/tests/handlers/test_appservice.py index 53e7a5d81b..0e100c404d 100644 --- a/tests/handlers/test_appservice.py +++ b/tests/handlers/test_appservice.py @@ -22,6 +22,7 @@ from twisted.test.proto_helpers import MemoryReactor import synapse.rest.admin import synapse.storage +from synapse.api.constants import EduTypes from synapse.appservice import ( ApplicationService, TransactionOneTimeKeyCounts, @@ -476,7 +477,7 @@ class ApplicationServicesHandlerSendEventsTestCase(unittest.HomeserverTestCase): # Check that the ephemeral event is a read receipt with the expected structure latest_read_receipt = all_ephemeral_events[-1] - self.assertEqual(latest_read_receipt["type"], "m.receipt") + self.assertEqual(latest_read_receipt["type"], EduTypes.RECEIPT) event_id = list(latest_read_receipt["content"].keys())[0] self.assertEqual( diff --git a/tests/handlers/test_receipts.py b/tests/handlers/test_receipts.py index 78807cdcfc..a95868b5c0 100644 --- a/tests/handlers/test_receipts.py +++ b/tests/handlers/test_receipts.py @@ -15,7 +15,7 @@ from copy import deepcopy from typing import List -from synapse.api.constants import ReceiptTypes +from synapse.api.constants import EduTypes, ReceiptTypes from synapse.types import JsonDict from tests import unittest @@ -39,7 +39,7 @@ class ReceiptsTestCase(unittest.HomeserverTestCase): } }, "room_id": "!jEsUZKDJdhlrceRyVU:example.org", - "type": "m.receipt", + "type": EduTypes.RECEIPT, } ], [], @@ -64,7 +64,7 @@ class ReceiptsTestCase(unittest.HomeserverTestCase): }, }, "room_id": "!jEsUZKDJdhlrceRyVU:example.org", - "type": "m.receipt", + "type": EduTypes.RECEIPT, } ], [ @@ -79,7 +79,7 @@ class ReceiptsTestCase(unittest.HomeserverTestCase): } }, "room_id": "!jEsUZKDJdhlrceRyVU:example.org", - "type": "m.receipt", + "type": EduTypes.RECEIPT, } ], ) @@ -105,7 +105,7 @@ class ReceiptsTestCase(unittest.HomeserverTestCase): }, }, "room_id": "!jEsUZKDJdhlrceRyVU:example.org", - "type": "m.receipt", + "type": EduTypes.RECEIPT, } ], [ @@ -120,7 +120,7 @@ class ReceiptsTestCase(unittest.HomeserverTestCase): } }, "room_id": "!jEsUZKDJdhlrceRyVU:example.org", - "type": "m.receipt", + "type": EduTypes.RECEIPT, } ], ) @@ -140,7 +140,7 @@ class ReceiptsTestCase(unittest.HomeserverTestCase): }, }, "room_id": "!jEsUZKDJdhlrceRyVU:example.org", - "type": "m.receipt", + "type": EduTypes.RECEIPT, } ], [ @@ -155,7 +155,7 @@ class ReceiptsTestCase(unittest.HomeserverTestCase): }, }, "room_id": "!jEsUZKDJdhlrceRyVU:example.org", - "type": "m.receipt", + "type": EduTypes.RECEIPT, } ], ) @@ -174,7 +174,7 @@ class ReceiptsTestCase(unittest.HomeserverTestCase): }, }, "room_id": "!jEsUZKDJdhlrceRyVU:example.org", - "type": "m.receipt", + "type": EduTypes.RECEIPT, }, { "content": { @@ -187,7 +187,7 @@ class ReceiptsTestCase(unittest.HomeserverTestCase): }, }, "room_id": "!jEsUZKDJdhlrceRyVU:example.org", - "type": "m.receipt", + "type": EduTypes.RECEIPT, }, ], [ @@ -202,7 +202,7 @@ class ReceiptsTestCase(unittest.HomeserverTestCase): } }, "room_id": "!jEsUZKDJdhlrceRyVU:example.org", - "type": "m.receipt", + "type": EduTypes.RECEIPT, } ], ) @@ -224,7 +224,7 @@ class ReceiptsTestCase(unittest.HomeserverTestCase): }, }, "room_id": "!jEsUZKDJdhlrceRyVU:example.org", - "type": "m.receipt", + "type": EduTypes.RECEIPT, }, ], [ @@ -237,7 +237,7 @@ class ReceiptsTestCase(unittest.HomeserverTestCase): }, }, "room_id": "!jEsUZKDJdhlrceRyVU:example.org", - "type": "m.receipt", + "type": EduTypes.RECEIPT, }, ], ) @@ -266,7 +266,7 @@ class ReceiptsTestCase(unittest.HomeserverTestCase): }, }, "room_id": "!jEsUZKDJdhlrceRyVU:example.org", - "type": "m.receipt", + "type": EduTypes.RECEIPT, } ], [ @@ -291,7 +291,7 @@ class ReceiptsTestCase(unittest.HomeserverTestCase): } }, "room_id": "!jEsUZKDJdhlrceRyVU:example.org", - "type": "m.receipt", + "type": EduTypes.RECEIPT, } ], ) @@ -310,7 +310,7 @@ class ReceiptsTestCase(unittest.HomeserverTestCase): } }, "room_id": "!jEsUZKDJdhlrceRyVU:example.org", - "type": "m.receipt", + "type": EduTypes.RECEIPT, } ] original_events = deepcopy(events) diff --git a/tests/handlers/test_typing.py b/tests/handlers/test_typing.py index 5f2e26a5fc..057256cecd 100644 --- a/tests/handlers/test_typing.py +++ b/tests/handlers/test_typing.py @@ -21,6 +21,7 @@ from twisted.internet import defer from twisted.test.proto_helpers import MemoryReactor from twisted.web.resource import Resource +from synapse.api.constants import EduTypes from synapse.api.errors import AuthError from synapse.federation.transport.server import TransportLayerServer from synapse.server import HomeServer @@ -184,7 +185,7 @@ class TypingNotificationsTestCase(unittest.HomeserverTestCase): events[0], [ { - "type": "m.typing", + "type": EduTypes.TYPING, "room_id": ROOM_ID, "content": {"user_ids": [U_APPLE.to_string()]}, } @@ -209,7 +210,7 @@ class TypingNotificationsTestCase(unittest.HomeserverTestCase): "farm", path="/_matrix/federation/v1/send/1000000", data=_expect_edu_transaction( - "m.typing", + EduTypes.TYPING, content={ "room_id": ROOM_ID, "user_id": U_APPLE.to_string(), @@ -231,7 +232,7 @@ class TypingNotificationsTestCase(unittest.HomeserverTestCase): "PUT", "/_matrix/federation/v1/send/1000000", _make_edu_transaction_json( - "m.typing", + EduTypes.TYPING, content={ "room_id": ROOM_ID, "user_id": U_ONION.to_string(), @@ -254,7 +255,7 @@ class TypingNotificationsTestCase(unittest.HomeserverTestCase): events[0], [ { - "type": "m.typing", + "type": EduTypes.TYPING, "room_id": ROOM_ID, "content": {"user_ids": [U_ONION.to_string()]}, } @@ -270,7 +271,7 @@ class TypingNotificationsTestCase(unittest.HomeserverTestCase): "PUT", "/_matrix/federation/v1/send/1000000", _make_edu_transaction_json( - "m.typing", + EduTypes.TYPING, content={ "room_id": OTHER_ROOM_ID, "user_id": U_ONION.to_string(), @@ -324,7 +325,7 @@ class TypingNotificationsTestCase(unittest.HomeserverTestCase): "farm", path="/_matrix/federation/v1/send/1000000", data=_expect_edu_transaction( - "m.typing", + EduTypes.TYPING, content={ "room_id": ROOM_ID, "user_id": U_APPLE.to_string(), @@ -345,7 +346,13 @@ class TypingNotificationsTestCase(unittest.HomeserverTestCase): ) self.assertEqual( events[0], - [{"type": "m.typing", "room_id": ROOM_ID, "content": {"user_ids": []}}], + [ + { + "type": EduTypes.TYPING, + "room_id": ROOM_ID, + "content": {"user_ids": []}, + } + ], ) def test_typing_timeout(self) -> None: @@ -379,7 +386,7 @@ class TypingNotificationsTestCase(unittest.HomeserverTestCase): events[0], [ { - "type": "m.typing", + "type": EduTypes.TYPING, "room_id": ROOM_ID, "content": {"user_ids": [U_APPLE.to_string()]}, } @@ -402,7 +409,13 @@ class TypingNotificationsTestCase(unittest.HomeserverTestCase): ) self.assertEqual( events[0], - [{"type": "m.typing", "room_id": ROOM_ID, "content": {"user_ids": []}}], + [ + { + "type": EduTypes.TYPING, + "room_id": ROOM_ID, + "content": {"user_ids": []}, + } + ], ) # SYN-230 - see if we can still set after timeout @@ -433,7 +446,7 @@ class TypingNotificationsTestCase(unittest.HomeserverTestCase): events[0], [ { - "type": "m.typing", + "type": EduTypes.TYPING, "room_id": ROOM_ID, "content": {"user_ids": [U_APPLE.to_string()]}, } diff --git a/tests/module_api/test_api.py b/tests/module_api/test_api.py index 8bc84aaaca..169e29b590 100644 --- a/tests/module_api/test_api.py +++ b/tests/module_api/test_api.py @@ -399,7 +399,7 @@ class ModuleApiTestCase(HomeserverTestCase): for edu in edus: # Make sure we're only checking presence-type EDUs - if edu["edu_type"] != EduTypes.Presence: + if edu["edu_type"] != EduTypes.PRESENCE: continue # EDUs can contain multiple presence updates diff --git a/tests/rest/client/test_events.py b/tests/rest/client/test_events.py index 1b1392fa2f..a9b7db9db2 100644 --- a/tests/rest/client/test_events.py +++ b/tests/rest/client/test_events.py @@ -19,6 +19,7 @@ from unittest.mock import Mock from twisted.test.proto_helpers import MemoryReactor import synapse.rest.admin +from synapse.api.constants import EduTypes from synapse.rest.client import events, login, room from synapse.server import HomeServer from synapse.util import Clock @@ -103,7 +104,7 @@ class EventStreamPermissionsTestCase(unittest.HomeserverTestCase): c for c in channel.json_body["chunk"] if not ( - c.get("type") == "m.presence" + c.get("type") == EduTypes.PRESENCE and c["content"].get("user_id") == self.user_id ) ] diff --git a/tests/rest/client/test_rooms.py b/tests/rest/client/test_rooms.py index d0197aca94..f523d89b8f 100644 --- a/tests/rest/client/test_rooms.py +++ b/tests/rest/client/test_rooms.py @@ -26,6 +26,7 @@ from twisted.test.proto_helpers import MemoryReactor import synapse.rest.admin from synapse.api.constants import ( + EduTypes, EventContentFields, EventTypes, Membership, @@ -1412,7 +1413,7 @@ class RoomInitialSyncTestCase(RoomBase): e["content"]["user_id"]: e for e in channel.json_body["presence"] } self.assertTrue(self.user_id in presence_by_user) - self.assertEqual("m.presence", presence_by_user[self.user_id]["type"]) + self.assertEqual(EduTypes.PRESENCE, presence_by_user[self.user_id]["type"]) class RoomMessageListTestCase(RoomBase): diff --git a/tests/rest/client/test_sendtodevice.py b/tests/rest/client/test_sendtodevice.py index c3942889e1..6435800fa1 100644 --- a/tests/rest/client/test_sendtodevice.py +++ b/tests/rest/client/test_sendtodevice.py @@ -12,6 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. +from synapse.api.constants import EduTypes from synapse.rest import admin from synapse.rest.client import login, sendtodevice, sync @@ -139,7 +140,7 @@ class SendToDeviceTestCase(HomeserverTestCase): for i in range(3): self.get_success( federation_registry.on_edu( - "m.direct_to_device", + EduTypes.DIRECT_TO_DEVICE, "remote_server", { "sender": "@user:remote_server", @@ -172,7 +173,7 @@ class SendToDeviceTestCase(HomeserverTestCase): # and we can send more messages self.get_success( federation_registry.on_edu( - "m.direct_to_device", + EduTypes.DIRECT_TO_DEVICE, "remote_server", { "sender": "@user:remote_server", diff --git a/tests/rest/client/test_shadow_banned.py b/tests/rest/client/test_shadow_banned.py index ae5ada3be7..d9bd8c4a28 100644 --- a/tests/rest/client/test_shadow_banned.py +++ b/tests/rest/client/test_shadow_banned.py @@ -17,7 +17,7 @@ from unittest.mock import Mock, patch from twisted.test.proto_helpers import MemoryReactor import synapse.rest.admin -from synapse.api.constants import EventTypes +from synapse.api.constants import EduTypes, EventTypes from synapse.rest.client import ( directory, login, @@ -226,7 +226,7 @@ class RoomTestCase(_ShadowBannedBase): events[0], [ { - "type": "m.typing", + "type": EduTypes.TYPING, "room_id": room_id, "content": {"user_ids": [self.other_user_id]}, } diff --git a/tests/rest/client/test_sync.py b/tests/rest/client/test_sync.py index 74b6560cbc..e3efd1f1b0 100644 --- a/tests/rest/client/test_sync.py +++ b/tests/rest/client/test_sync.py @@ -22,6 +22,7 @@ from twisted.test.proto_helpers import MemoryReactor import synapse.rest.admin from synapse.api.constants import ( + EduTypes, EventContentFields, EventTypes, ReceiptTypes, @@ -504,7 +505,7 @@ class ReadReceiptsTestCase(unittest.HomeserverTestCase): # Checks if event is a read receipt def is_read_receipt(event: JsonDict) -> bool: - return event["type"] == "m.receipt" + return event["type"] == EduTypes.RECEIPT # Sync channel = self.make_request( diff --git a/tests/rest/client/test_typing.py b/tests/rest/client/test_typing.py index d6da510773..61b66d7685 100644 --- a/tests/rest/client/test_typing.py +++ b/tests/rest/client/test_typing.py @@ -17,6 +17,7 @@ from twisted.test.proto_helpers import MemoryReactor +from synapse.api.constants import EduTypes from synapse.rest.client import room from synapse.server import HomeServer from synapse.types import UserID @@ -67,7 +68,7 @@ class RoomTypingTestCase(unittest.HomeserverTestCase): events[0], [ { - "type": "m.typing", + "type": EduTypes.TYPING, "room_id": self.room_id, "content": {"user_ids": [self.user_id]}, } diff --git a/tests/storage/test_devices.py b/tests/storage/test_devices.py index bbf079b25b..f37505b6cf 100644 --- a/tests/storage/test_devices.py +++ b/tests/storage/test_devices.py @@ -13,6 +13,7 @@ # limitations under the License. import synapse.api.errors +from synapse.api.constants import EduTypes from tests.unittest import HomeserverTestCase @@ -266,10 +267,12 @@ class DeviceStoreTestCase(HomeserverTestCase): # (This is a temporary arrangement for backwards compatibility!) self.assertEqual(len(device_updates), 2, device_updates) self.assertEqual( - device_updates[0][0], "m.signing_key_update", device_updates[0] + device_updates[0][0], EduTypes.SIGNING_KEY_UPDATE, device_updates[0] ) self.assertEqual( - device_updates[1][0], "org.matrix.signing_key_update", device_updates[1] + device_updates[1][0], + EduTypes.UNSTABLE_SIGNING_KEY_UPDATE, + device_updates[1], ) # Check there are no more device updates left.