Skip to content

Commit b6b5d81

Browse files
committed
Add test in test_federation_server, ensuring that good events are kept
1 parent 464e9cf commit b6b5d81

File tree

1 file changed

+52
-1
lines changed

1 file changed

+52
-1
lines changed

tests/federation/test_federation_server.py

Lines changed: 52 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,9 @@
2525

2626
from twisted.test.proto_helpers import MemoryReactor
2727

28-
from synapse.api.room_versions import KNOWN_ROOM_VERSIONS
28+
from synapse.api.constants import EventTypes
29+
from synapse.api.errors import NotFoundError
30+
from synapse.api.room_versions import KNOWN_ROOM_VERSIONS, RoomVersions
2931
from synapse.config.server import DEFAULT_ROOM_VERSION
3032
from synapse.events import EventBase, make_event_from_dict
3133
from synapse.rest import admin
@@ -84,6 +86,55 @@ async def failing_handler(_origin: str, _content: JsonDict) -> None:
8486
)
8587
self.assertEqual(500, channel.code, channel.result)
8688

89+
def test_accept_valid_pdus_and_ignore_invalid(self) -> None:
90+
user = self.register_user("nex", "test")
91+
tok = self.login("nex", "test")
92+
room_id = self.helper.create_room_as("nex", tok=tok)
93+
94+
builder = self.hs.get_event_builder_factory().for_room_version(
95+
RoomVersions.V10,
96+
{
97+
"type": EventTypes.Message,
98+
"sender": user,
99+
"room_id": room_id,
100+
"content": {"body": "hello i am nexy", "msgtype": "m.text"},
101+
},
102+
)
103+
event1, _ = self.get_success(
104+
self.hs.get_event_creation_handler().create_new_client_event(builder)
105+
)
106+
event2, _ = self.get_success(
107+
self.hs.get_event_creation_handler().create_new_client_event(
108+
builder, prev_event_ids=[event1.event_id]
109+
)
110+
)
111+
112+
event1_json = event1.get_pdu_json()
113+
event2_json = event2.get_pdu_json()
114+
115+
logging.info("Purposefully adding event id that shouldn't be there")
116+
event2_json["event_id"] = event2.event_id
117+
118+
channel = self.make_signed_federation_request(
119+
"PUT",
120+
"/_matrix/federation/v1/send/txn",
121+
{"pdus": [event1_json, event2_json]},
122+
)
123+
body = channel.json_body
124+
logging.info(f"Response body: {body}")
125+
self.assertTrue(body["pdus"][event1.event_id] == {})
126+
self.assertTrue(body["pdus"][event2.event_id]["error"] != "")
127+
result = self.get_success(
128+
self.hs.get_storage_controllers().main.get_event(event1.event_id)
129+
)
130+
self.assertEqual(result.event_id, event1.event_id)
131+
132+
# Make sure the corrupt event isn't persisted
133+
self.get_failure(
134+
self.hs.get_storage_controllers().main.get_event(event2.event_id),
135+
NotFoundError,
136+
)
137+
87138

88139
class ServerACLsTestCase(unittest.TestCase):
89140
def test_blocked_server(self) -> None:

0 commit comments

Comments
 (0)