Review comments: test code and a few extras

This commit is contained in:
Kegan Dougal
2026-03-10 14:49:26 +00:00
parent 7a1be81355
commit d96737b894
4 changed files with 74 additions and 49 deletions
+3 -1
View File
@@ -146,7 +146,9 @@ class EventBuilder:
based on the prev_events.
prev_state_events: The event IDs to use as prev_state_events.
Only applicable on MSC4242 state DAG rooms. If this is supplied, auth_event_ids
must not be specified.
must not be specified unless this event is part of a batch such that the builder
will be unable to compute the auth_event_ids due to the events not being persisted
yet.
Returns:
The signed and hashed event.
"""
+7 -3
View File
@@ -1487,7 +1487,9 @@ class RoomCreationHandler:
# the most recently created event
prev_event: list[str] = []
# the most recently created state event
prev_state_event: list[str] = []
prev_state_event: list[str] | None = (
[] if room_version.msc4242_state_dags else None
)
# a map of event types, state keys -> event_ids. We collect these mappings this as events are
# created (but not persisted to the db) to determine state for future created events
@@ -1574,7 +1576,8 @@ class RoomCreationHandler:
ignore_shadow_ban=True,
)
last_sent_event_id = ev.event_id
prev_state_event = [ev.event_id]
if room_version.msc4242_state_dags:
prev_state_event = [ev.event_id]
member_event_id, _ = await self.room_member_handler.update_membership(
creator,
@@ -1589,7 +1592,8 @@ class RoomCreationHandler:
prev_state_events=prev_state_event,
)
prev_event = [member_event_id]
prev_state_event = [member_event_id]
if room_version.msc4242_state_dags:
prev_state_event = [member_event_id]
# update the depth and state map here as the membership event has been created
# through a different code path
+41 -28
View File
@@ -57,16 +57,16 @@ class MSC4242StateDagsTests(HomeserverTestCase):
for non-state events.
"""
# they don't change for messages
first_id = self.helper.send(self.room_id, body="test1")["event_id"]
first_pae = self._get_prev_state_events(first_id)
assert len(first_pae) == 1
first_event_id = self.helper.send(self.room_id, body="test1")["event_id"]
first_prev_state_event = self._get_prev_state_events(first_event_id)
assert len(first_prev_state_event) == 1
second_id = self.helper.send(self.room_id, body="test2")["event_id"]
second_pae = self._get_prev_state_events(second_id)
assert len(second_pae) == 1
self.assertEquals(first_pae, second_pae)
second_prev_state_event = self._get_prev_state_events(second_id)
assert len(second_prev_state_event) == 1
self.assertEquals(first_prev_state_event, second_prev_state_event)
# send another auth event, which should change the prev_state_events on subsequent events
jr_id = self.helper.send_state(
# send an auth event, which should change the prev_state_events on *subsequent* events
join_rule_state_event_id = self.helper.send_state(
self.room_id,
EventTypes.JoinRules,
{
@@ -74,25 +74,29 @@ class MSC4242StateDagsTests(HomeserverTestCase):
},
tok="nope",
)["event_id"]
jr_pae = self._get_prev_state_events(jr_id)
self.assertEquals(second_pae, jr_pae)
join_rule_prev_state_event_ids = self._get_prev_state_events(
join_rule_state_event_id
)
self.assertEquals(second_prev_state_event, join_rule_prev_state_event_ids)
# prev_state_events should always point to the join rule now
third_id = self.helper.send(self.room_id, body="test3")["event_id"]
third_pae = self._get_prev_state_events(third_id)
self.assertEquals(third_pae, [jr_id])
# ..including for non-auth state
# TODO FIXME KEGAN
# name_id = self.helper.send_state(
# self.room_id,
# EventTypes.Name,
# {
# "name": "State DAGs!",
# },
# tok="nope",
# )["event_id"]
# name_pae = self._get_prev_state_events(name_id)
# self.assertEquals(name_pae, [jr_id])
third_event_id = self.helper.send(self.room_id, body="test3")["event_id"]
third_prev_state_event = self._get_prev_state_events(third_event_id)
self.assertEquals(third_prev_state_event, [join_rule_state_event_id])
# and non-auth state should also update prev_state_events
name_state_event_id = self.helper.send_state(
self.room_id,
EventTypes.Name,
{
"name": "State DAGs!",
},
tok="nope",
)["event_id"]
name_prev_state_event_ids = self._get_prev_state_events(name_state_event_id)
self.assertEquals(name_prev_state_event_ids, [join_rule_state_event_id])
fourth_event_id = self.helper.send(self.room_id, body="test4")["event_id"]
fourth_prev_state_event = self._get_prev_state_events(fourth_event_id)
self.assertEquals(fourth_prev_state_event, [name_state_event_id])
class MSC4242EventPersistenceAuthDagsStoreTestCase(HomeserverTestCase):
@@ -135,6 +139,7 @@ class MSC4242EventPersistenceAuthDagsStoreTestCase(HomeserverTestCase):
id: str,
prev_state_events: list[str],
rejected: bool = False,
soft_failed: bool = False,
) -> tuple[FrozenEventVMSC4242, EventContext]:
ev = make_event_from_dict(
{
@@ -149,6 +154,8 @@ class MSC4242EventPersistenceAuthDagsStoreTestCase(HomeserverTestCase):
},
room_version=RoomVersions.MSC4242v12,
)
if soft_failed:
ev.internal_metadata.soft_failed = True
assert isinstance(ev, FrozenEventVMSC4242)
ev._event_id = id
ctx = Mock()
@@ -162,17 +169,23 @@ class MSC4242EventPersistenceAuthDagsStoreTestCase(HomeserverTestCase):
want_new_extrems: set[str],
want_raises: bool = False,
) -> None:
promise = self.persistence._calculate_new_state_dag_extremities(
"""
Tests the logic of _calculate_new_state_dag_extremities.
Tests that the new extremities calculated as a result of processing current_fwds and new_events
matches want_new_extrems or raises if want_raises is True.
"""
coroutine = self.persistence._calculate_new_state_dag_extremities(
self.room_id,
frozenset(current_fwds),
new_events,
)
if want_raises:
f = self.get_failure(promise, SynapseError)
f = self.get_failure(coroutine, SynapseError)
assert f is not None
return
new_extrems = set(self.get_success(promise))
new_extrems = set(self.get_success(coroutine))
self.assertEqual(
new_extrems,
want_new_extrems,
+23 -17
View File
@@ -389,7 +389,6 @@ class EventAuthTestCase(unittest.TestCase):
create_event = make_event_from_dict(
{
"room_id": TEST_ROOM_ID,
"type": "m.room.create",
"sender": creator,
"state_key": "",
@@ -399,9 +398,22 @@ class EventAuthTestCase(unittest.TestCase):
},
room_version,
)
create_event_2 = make_event_from_dict(
{
"type": "m.room.create",
"sender": creator,
"state_key": "",
"content": {"creator": creator, "another": "room"},
"prev_events": [],
"prev_state_events": [],
},
room_version,
)
room_id = create_event.room_id
another_room_id = create_event_2.room_id
join_event = make_event_from_dict(
{
"room_id": TEST_ROOM_ID,
"room_id": room_id,
"type": "m.room.member",
"sender": creator,
"state_key": creator,
@@ -414,7 +426,7 @@ class EventAuthTestCase(unittest.TestCase):
)
event_in_another_room = make_event_from_dict(
{
"room_id": f"!another_room:{TEST_DOMAIN}",
"room_id": another_room_id,
"type": "m.room.join_rules",
"sender": creator,
"state_key": "",
@@ -427,7 +439,7 @@ class EventAuthTestCase(unittest.TestCase):
)
msg_event = make_event_from_dict(
{
"room_id": TEST_ROOM_ID,
"room_id": room_id,
"type": "m.room.message",
"sender": creator,
"content": {"msgtype": "m.text", "body": "I am a message"},
@@ -439,7 +451,7 @@ class EventAuthTestCase(unittest.TestCase):
)
rejected_event = make_event_from_dict(
{
"room_id": TEST_ROOM_ID,
"room_id": room_id,
"type": "m.room.name",
"sender": creator,
"state_key": "",
@@ -457,24 +469,18 @@ class EventAuthTestCase(unittest.TestCase):
rejecting_test_cases = [
RejectingTestCase(
name="create event has prev_state_events",
events_in_store=[create_event, join_event],
events_in_store=[],
test_event=make_event_from_dict(
{
"room_id": TEST_ROOM_ID,
"type": "m.room.create",
"sender": creator,
"state_key": "",
"content": {"creator": creator},
"prev_events": [],
"prev_state_events": [join_event.event_id],
"prev_state_events": [create_event.event_id],
},
room_version,
{
"calculated_auth_event_ids": [
create_event.event_id,
join_event.event_id,
]
},
{},
),
),
RejectingTestCase(
@@ -482,7 +488,7 @@ class EventAuthTestCase(unittest.TestCase):
events_in_store=[create_event, join_event, event_in_another_room],
test_event=make_event_from_dict(
{
"room_id": TEST_ROOM_ID,
"room_id": room_id,
"type": "m.room.name",
"sender": creator,
"state_key": "",
@@ -504,7 +510,7 @@ class EventAuthTestCase(unittest.TestCase):
events_in_store=[create_event, join_event, msg_event],
test_event=make_event_from_dict(
{
"room_id": TEST_ROOM_ID,
"room_id": room_id,
"type": "m.room.name",
"sender": creator,
"state_key": "",
@@ -526,7 +532,7 @@ class EventAuthTestCase(unittest.TestCase):
events_in_store=[create_event, join_event, rejected_event],
test_event=make_event_from_dict(
{
"room_id": TEST_ROOM_ID,
"room_id": room_id,
"type": "m.room.name",
"sender": creator,
"state_key": "",