Skip to content
This repository was archived by the owner on Apr 26, 2024. It is now read-only.

Commit 309b8dd

Browse files
committed
Tests for bad auth_events
1 parent 02392e2 commit 309b8dd

File tree

1 file changed

+86
-0
lines changed

1 file changed

+86
-0
lines changed

tests/test_event_auth.py

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,92 @@ def test_create_event_with_prev_events(self):
150150
event_auth.check_state_independent_auth_rules(event_store, bad_event)
151151
)
152152

153+
def test_duplicate_auth_events(self):
154+
"""Events with duplicate auth_events should be rejected
155+
156+
https://spec.matrix.org/v1.3/rooms/v9/#authorization-rules
157+
2. Reject if event has auth_events that:
158+
1. have duplicate entries for a given type and state_key pair
159+
"""
160+
creator = "@creator:example.com"
161+
162+
create_event = _create_event(RoomVersions.V9, creator)
163+
join_event1 = _join_event(RoomVersions.V9, creator)
164+
pl_event = _power_levels_event(
165+
RoomVersions.V9,
166+
creator,
167+
{"state_default": 30, "users": {"creator": 100}},
168+
)
169+
170+
# create a second join event, so that we can make a duplicate
171+
join_event2 = _join_event(RoomVersions.V9, creator)
172+
173+
event_store = _StubEventSourceStore()
174+
event_store.add_events([create_event, join_event1, join_event2, pl_event])
175+
176+
good_event = _random_state_event(
177+
RoomVersions.V9, creator, [create_event, join_event2, pl_event]
178+
)
179+
bad_event = _random_state_event(
180+
RoomVersions.V9, creator, [create_event, join_event1, join_event2, pl_event]
181+
)
182+
# a variation: two instances of the *same* event
183+
bad_event2 = _random_state_event(
184+
RoomVersions.V9, creator, [create_event, join_event2, join_event2, pl_event]
185+
)
186+
187+
get_awaitable_result(
188+
event_auth.check_state_independent_auth_rules(event_store, good_event)
189+
)
190+
with self.assertRaises(AuthError):
191+
get_awaitable_result(
192+
event_auth.check_state_independent_auth_rules(event_store, bad_event)
193+
)
194+
with self.assertRaises(AuthError):
195+
get_awaitable_result(
196+
event_auth.check_state_independent_auth_rules(event_store, bad_event2)
197+
)
198+
199+
def test_unexpected_auth_events(self):
200+
"""Events with excess auth_events should be rejected
201+
202+
https://spec.matrix.org/v1.3/rooms/v9/#authorization-rules
203+
2. Reject if event has auth_events that:
204+
2. have entries whose type and state_key don’t match those specified by the
205+
auth events selection algorithm described in the server specification.
206+
"""
207+
creator = "@creator:example.com"
208+
209+
create_event = _create_event(RoomVersions.V9, creator)
210+
join_event = _join_event(RoomVersions.V9, creator)
211+
pl_event = _power_levels_event(
212+
RoomVersions.V9,
213+
creator,
214+
{"state_default": 30, "users": {"creator": 100}},
215+
)
216+
join_rules_event = _join_rules_event(RoomVersions.V9, creator, "public")
217+
218+
event_store = _StubEventSourceStore()
219+
event_store.add_events([create_event, join_event, pl_event, join_rules_event])
220+
221+
good_event = _random_state_event(
222+
RoomVersions.V9, creator, [create_event, join_event, pl_event]
223+
)
224+
# join rules should *not* be included in the auth events.
225+
bad_event = _random_state_event(
226+
RoomVersions.V9,
227+
creator,
228+
[create_event, join_event, pl_event, join_rules_event],
229+
)
230+
231+
get_awaitable_result(
232+
event_auth.check_state_independent_auth_rules(event_store, good_event)
233+
)
234+
with self.assertRaises(AuthError):
235+
get_awaitable_result(
236+
event_auth.check_state_independent_auth_rules(event_store, bad_event)
237+
)
238+
153239
def test_random_users_cannot_send_state_before_first_pl(self):
154240
"""
155241
Check that, before the first PL lands, the creator is the only user

0 commit comments

Comments
 (0)