Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 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/19235.bugfix
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Fix v12 rooms when running with `use_frozen_dicts: True`.
2 changes: 1 addition & 1 deletion synapse/events/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -548,7 +548,7 @@ def auth_event_ids(self) -> StrCollection:
assert create_event_id not in self._dict["auth_events"]
if self.type == EventTypes.Create and self.get_state_key() == "":
return self._dict["auth_events"] # should be []
return self._dict["auth_events"] + [create_event_id]
Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

self._dict["auth_events"] is a tuple when self._dict has been frozen. Concatenating directly with [create_event_id] raises an exception in that case.

return [*self._dict["auth_events"], create_event_id]
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Adjacent to #18117



def _event_type_from_format_version(
Expand Down
74 changes: 64 additions & 10 deletions tests/federation/test_federation_server.py
Original file line number Diff line number Diff line change
Expand Up @@ -356,19 +356,37 @@ def _make_join(self, user_id: str) -> JsonDict:
self.assertEqual(channel.code, HTTPStatus.OK, channel.json_body)
return channel.json_body

def test_send_join(self) -> None:
def _test_send_join_common(self, room_version: str) -> None:
"""happy-path test of send_join"""
creator_user_id = self.register_user("kermit_vx", "test")
Comment thread
devonh marked this conversation as resolved.
Outdated
tok = self.login("kermit_vx", "test")
room_id = self.helper.create_room_as(
room_creator=creator_user_id, tok=tok, room_version=room_version
)

# Second member joins
second_member_user_id = self.register_user("fozzie_vx", "bear")
tok2 = self.login("fozzie_vx", "bear")
self.helper.join(room_id, second_member_user_id, tok=tok2)

# Make join for remote user
joining_user = "@misspiggy:" + self.OTHER_SERVER_NAME
join_result = self._make_join(joining_user)
channel = self.make_signed_federation_request(
"GET",
f"/_matrix/federation/v1/make_join/{room_id}/{joining_user}?ver={room_version}",
)
self.assertEqual(channel.code, HTTPStatus.OK, channel.json_body)
join_result = channel.json_body

# Sign and send the join
join_event_dict = join_result["event"]
self.add_hashes_and_signatures_from_other_server(
join_event_dict,
KNOWN_ROOM_VERSIONS[DEFAULT_ROOM_VERSION],
KNOWN_ROOM_VERSIONS[room_version],
)
channel = self.make_signed_federation_request(
"PUT",
f"/_matrix/federation/v2/send_join/{self._room_id}/x",
f"/_matrix/federation/v2/send_join/{room_id}/x",
content=join_event_dict,
)
self.assertEqual(channel.code, HTTPStatus.OK, channel.json_body)
Expand All @@ -384,8 +402,8 @@ def test_send_join(self) -> None:
("m.room.power_levels", ""),
("m.room.join_rules", ""),
("m.room.history_visibility", ""),
("m.room.member", "@kermit:test"),
("m.room.member", "@fozzie:test"),
("m.room.member", "@kermit_vx:test"),
("m.room.member", "@fozzie_vx:test"),
# nb: *not* the joining user
],
)
Expand All @@ -398,18 +416,54 @@ def test_send_join(self) -> None:
returned_auth_chain_events,
[
("m.room.create", ""),
("m.room.member", "@kermit:test"),
("m.room.member", "@kermit_vx:test"),
("m.room.power_levels", ""),
("m.room.join_rules", ""),
],
)

# the room should show that the new user is a member
r = self.get_success(
self._storage_controllers.state.get_current_state(self._room_id)
)
r = self.get_success(self._storage_controllers.state.get_current_state(room_id))
self.assertEqual(r[("m.room.member", joining_user)].membership, "join")

@parameterized.expand(
[
("3"),
("4"),
("5"),
("6"),
("7"),
("8"),
("9"),
("10"),
("11"),
("12"),
Comment thread
anoadragon453 marked this conversation as resolved.
Outdated
]
)
@override_config({"use_frozen_dicts": True})
def test_send_join_with_frozen_dicts(self, room_version: str) -> None:
"""Test send_join with USE_FROZEN_DICTS=True"""
self._test_send_join_common(room_version)

@parameterized.expand(
[
("3"),
("4"),
("5"),
("6"),
("7"),
("8"),
("9"),
("10"),
("11"),
("12"),
]
)
@override_config({"use_frozen_dicts": False})
def test_send_join_without_frozen_dicts(self, room_version: str) -> None:
"""Test send_join with USE_FROZEN_DICTS=False"""
self._test_send_join_common(room_version)

def test_send_join_partial_state(self) -> None:
"""/send_join should return partial state, if requested"""
joining_user = "@misspiggy:" + self.OTHER_SERVER_NAME
Expand Down