mirror of
https://github.com/matrix-org/sliding-sync.git
synced 2025-03-10 13:37:11 +00:00
E2E test demonstrating ban leakage
This commit is contained in:
parent
9e1b4f99ec
commit
78df8fd142
@ -802,3 +802,61 @@ func TestMemberCounts(t *testing.T) {
|
|||||||
},
|
},
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestPreemptiveBanIsNotLeaked(t *testing.T) {
|
||||||
|
alice := registerNamedUser(t, "alice")
|
||||||
|
nigel := registerNamedUser(t, "nigel")
|
||||||
|
|
||||||
|
t.Log("Alice creates a public room and a DM with Nigel.")
|
||||||
|
public := alice.MustCreateRoom(t, map[string]interface{}{"preset": "public_chat"})
|
||||||
|
dm := alice.MustCreateRoom(t, map[string]interface{}{"preset": "private_chat", "invite": []string{nigel.UserID}})
|
||||||
|
|
||||||
|
t.Log("Nigel joins the DM")
|
||||||
|
nigel.JoinRoom(t, dm, nil)
|
||||||
|
|
||||||
|
t.Log("Alice sends a sentinel message into the DM.")
|
||||||
|
dmSentinel := alice.SendEventSynced(t, dm, b.Event{
|
||||||
|
Type: "m.room.message",
|
||||||
|
Content: map[string]interface{}{"body": "sentinel, sentinel, where have you been?", "msgtype": "m.text"},
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Log("Nigel does an initial sliding sync.")
|
||||||
|
nigelRes := nigel.SlidingSync(t, sync3.Request{
|
||||||
|
Lists: map[string]sync3.RequestList{
|
||||||
|
"a": {
|
||||||
|
RoomSubscription: sync3.RoomSubscription{
|
||||||
|
TimelineLimit: 20,
|
||||||
|
},
|
||||||
|
Ranges: sync3.SliceRanges{{0, 10}},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
t.Log("Nigel sees the sentinel.")
|
||||||
|
m.MatchResponse(t, nigelRes, m.MatchRoomSubscription(dm, MatchRoomTimelineMostRecent(1, []Event{{ID: dmSentinel}})))
|
||||||
|
|
||||||
|
t.Log("Alice pre-emptively bans Nigel from the public room.")
|
||||||
|
alice.MustDo(t, "POST", []string{"_matrix", "client", "v3", "rooms", public, "ban"},
|
||||||
|
client.WithJSONBody(t, map[string]any{"user_id": nigel.UserID}))
|
||||||
|
|
||||||
|
t.Log("Alice sliding syncs until she sees the ban.")
|
||||||
|
alice.SlidingSyncUntilMembership(t, "", public, nigel, "ban")
|
||||||
|
|
||||||
|
t.Log("Alice sends a second sentinel in Nigel's DM.")
|
||||||
|
dmSentinel2 := alice.SendEventSynced(t, dm, b.Event{
|
||||||
|
Type: "m.room.message",
|
||||||
|
Content: map[string]interface{}{"body": "sentinel 2 placeholder boogaloo", "msgtype": "m.text"},
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Log("Nigel syncs until he sees the second sentinel. He should NOT see his ban event.")
|
||||||
|
|
||||||
|
nigelRes = nigel.SlidingSyncUntil(t, nigelRes.Pos, sync3.Request{}, func(response *sync3.Response) error {
|
||||||
|
seenPublicRoom := m.MatchRoomSubscription(public)
|
||||||
|
if seenPublicRoom(response) == nil {
|
||||||
|
t.Errorf("Nigel had a room subscription for the public room, but shouldn't have.")
|
||||||
|
m.LogResponse(t)(response)
|
||||||
|
t.FailNow()
|
||||||
|
}
|
||||||
|
seenSentinel := m.MatchRoomSubscription(dm, MatchRoomTimelineMostRecent(1, []Event{{ID: dmSentinel2}}))
|
||||||
|
return seenSentinel(response)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user