diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/events/test_utils.py | 13 | ||||
-rw-r--r-- | tests/rest/client/test_retention.py | 7 | ||||
-rw-r--r-- | tests/test_visibility.py | 93 |
3 files changed, 95 insertions, 18 deletions
diff --git a/tests/events/test_utils.py b/tests/events/test_utils.py index cf81bcf52c..975c285ec7 100644 --- a/tests/events/test_utils.py +++ b/tests/events/test_utils.py @@ -32,6 +32,7 @@ from synapse.events.utils import ( PowerLevelsContent, SerializeEventConfig, _split_field, + clone_event, copy_and_fixup_power_levels_contents, maybe_upsert_event_field, prune_event, @@ -611,6 +612,18 @@ class PruneEventTestCase(stdlib_unittest.TestCase): ) +class CloneEventTestCase(stdlib_unittest.TestCase): + def test_unsigned_is_copied(self) -> None: + original = make_event_from_dict( + {"type": "A", "event_id": "$test:domain", "unsigned": {"a": 1, "b": 2}} + ) + cloned = clone_event(original) + cloned.unsigned["b"] = 3 + + self.assertEqual(original.unsigned, {"a": 1, "b": 2}) + self.assertEqual(cloned.unsigned, {"a": 1, "b": 3}) + + class SerializeEventTestCase(stdlib_unittest.TestCase): def serialize(self, ev: EventBase, fields: Optional[List[str]]) -> JsonDict: return serialize_event( diff --git a/tests/rest/client/test_retention.py b/tests/rest/client/test_retention.py index 09a5d64349..ceae40498e 100644 --- a/tests/rest/client/test_retention.py +++ b/tests/rest/client/test_retention.py @@ -163,7 +163,12 @@ class RetentionTestCase(unittest.HomeserverTestCase): ) self.assertEqual(2, len(events), "events retrieved from database") filtered_events = self.get_success( - filter_events_for_client(storage_controllers, self.user_id, events) + filter_events_for_client( + storage_controllers, + self.user_id, + events, + msc4115_membership_on_events=True, + ) ) # We should only get one event back. diff --git a/tests/test_visibility.py b/tests/test_visibility.py index c67a169ebd..1f7bc81ef6 100644 --- a/tests/test_visibility.py +++ b/tests/test_visibility.py @@ -21,6 +21,7 @@ import logging from typing import Optional from unittest.mock import patch +from synapse.api.constants import EventUnsignedContentFields from synapse.api.room_versions import RoomVersions from synapse.events import EventBase, make_event_from_dict from synapse.events.snapshot import EventContext @@ -29,6 +30,7 @@ from synapse.rest.client import login, room from synapse.server import HomeServer from synapse.types import create_requester from synapse.visibility import filter_events_for_client, filter_events_for_server + from tests import unittest from tests.test_utils.event_injection import inject_event, inject_member_event from tests.unittest import HomeserverTestCase @@ -286,22 +288,22 @@ class FilterEventsForClientTestCase(HomeserverTestCase): room_id = self.helper.create_room_as("resident", tok=resident_token) self.get_success( - inject_visibility_event(self.hs, room_id, "@resident:hs", "joined") + inject_visibility_event(self.hs, room_id, "@resident:test", "joined") ) before_event = self.get_success( - inject_message_event(self.hs, room_id, "@resident:hs", body="before") + inject_message_event(self.hs, room_id, "@resident:test", body="before") ) join_event = self.get_success( - inject_member_event(self.hs, room_id, "@joiner:hs", "join") + inject_member_event(self.hs, room_id, "@joiner:test", "join") ) during_event = self.get_success( - inject_message_event(self.hs, room_id, "@resident:hs", body="during") + inject_message_event(self.hs, room_id, "@resident:test", body="during") ) leave_event = self.get_success( - inject_member_event(self.hs, room_id, "@joiner:hs", "leave") + inject_member_event(self.hs, room_id, "@joiner:test", "leave") ) after_event = self.get_success( - inject_message_event(self.hs, room_id, "@resident:hs", body="after") + inject_message_event(self.hs, room_id, "@resident:test", body="after") ) # We have to reload the events from the db, to ensure that prev_content is @@ -322,17 +324,64 @@ class FilterEventsForClientTestCase(HomeserverTestCase): ] ] - filtered_events = self.get_success( + # Now run the events through the filter, and check that we can see the events + # we expect, and that the membership prop is as expected. + # + # We deliberately do the queries for both users upfront; this simulates + # concurrent queries on the server, and helps ensure that we aren't + # accidentally serving the same event object (with the same unsigned.membership + # property) to both users. + joiner_filtered_events = self.get_success( + filter_events_for_client( + self.hs.get_storage_controllers(), + "@joiner:test", + events_to_filter, + msc4115_membership_on_events=True, + ) + ) + resident_filtered_events = self.get_success( filter_events_for_client( self.hs.get_storage_controllers(), - "@joiner:hs", + "@resident:test", events_to_filter, + msc4115_membership_on_events=True, ) ) + # The joiner should be able to seem the join and leave, + # and messages sent between the two, but not before or after. self.assertEqual( [e.event_id for e in [join_event, during_event, leave_event]], - [e.event_id for e in filtered_events], + [e.event_id for e in joiner_filtered_events], + ) + self.assertEqual( + ["join", "join", "leave"], + [ + e.unsigned[EventUnsignedContentFields.MSC4115_MEMBERSHIP] + for e in joiner_filtered_events + ], + ) + + # The resident user should see all the events. + self.assertEqual( + [ + e.event_id + for e in [ + before_event, + join_event, + during_event, + leave_event, + after_event, + ] + ], + [e.event_id for e in resident_filtered_events], + ) + self.assertEqual( + ["join", "join", "join", "join", "join"], + [ + e.unsigned[EventUnsignedContentFields.MSC4115_MEMBERSHIP] + for e in resident_filtered_events + ], ) @@ -387,15 +436,24 @@ class FilterEventsOutOfBandEventsForClientTestCase( ) # the invited user should be able to see both the invite and the rejection + filtered_events = self.get_success( + filter_events_for_client( + self.hs.get_storage_controllers(), + "@user:test", + [invite_event, reject_event], + msc4115_membership_on_events=True, + ) + ) self.assertEqual( - self.get_success( - filter_events_for_client( - self.hs.get_storage_controllers(), - "@user:test", - [invite_event, reject_event], - ) - ), - [invite_event, reject_event], + [e.event_id for e in filtered_events], + [e.event_id for e in [invite_event, reject_event]], + ) + self.assertEqual( + ["invite", "leave"], + [ + e.unsigned[EventUnsignedContentFields.MSC4115_MEMBERSHIP] + for e in filtered_events + ], ) # other users should see neither @@ -405,6 +463,7 @@ class FilterEventsOutOfBandEventsForClientTestCase( self.hs.get_storage_controllers(), "@other:test", [invite_event, reject_event], + msc4115_membership_on_events=True, ) ), [], |