mirror of
https://github.com/matrix-org/dendrite
synced 2024-11-18 15:50:52 +01:00
a5d822004d
* Groundwork for send-to-device messaging * Update sample config * Add unstable routing for now * Send to device consumer in sync API * Start the send-to-device consumer * fix indentation in dendrite-config.yaml * Create send-to-device database tables, other tweaks * Add some logic for send-to-device messages, add them into sync stream * Handle incoming send-to-device messages, count them with EDU stream pos * Undo changes to test * pq.Array * Fix sync * Logging * Fix a couple of transaction things, fix client API * Add send-to-device test, hopefully fix bugs * Comments * Refactor a bit * Fix schema * Fix queries * Debug logging * Fix storing and retrieving of send-to-device messages * Try to avoid database locks * Update sync position * Use latest sync position * Jiggle about sync a bit * Fix tests * Break out the retrieval from the update/delete behaviour * Comments * nolint on getResponseWithPDUsForCompleteSync * Try to line up sync tokens again * Implement wildcard * Add all send-to-device tests to whitelist, what could possibly go wrong? * Only care about wildcard when targeted locally * Deduplicate transactions * Handle tokens properly, return immediately if waiting send-to-device messages * Fix sync * Update sytest-whitelist * Fix copyright notice (need to do more of this) * Comments, copyrights * Return errors from Do, fix dendritejs * Review comments * Comments * Constructor for TransactionWriter * defletions * Update gomatrixserverlib, sytest-blacklist
303 lines
16 KiB
Text
303 lines
16 KiB
Text
GET /register yields a set of flows
|
|
POST /register can create a user
|
|
POST /register downcases capitals in usernames
|
|
POST /register rejects registration of usernames with '!'
|
|
POST /register rejects registration of usernames with '"'
|
|
POST /register rejects registration of usernames with ':'
|
|
POST /register rejects registration of usernames with '?'
|
|
POST /register rejects registration of usernames with '\'
|
|
POST /register rejects registration of usernames with '@'
|
|
POST /register rejects registration of usernames with '['
|
|
POST /register rejects registration of usernames with ']'
|
|
POST /register rejects registration of usernames with '{'
|
|
POST /register rejects registration of usernames with '|'
|
|
POST /register rejects registration of usernames with '}'
|
|
POST /register rejects registration of usernames with '£'
|
|
POST /register rejects registration of usernames with 'é'
|
|
POST /register rejects registration of usernames with '\n'
|
|
POST /register rejects registration of usernames with '''
|
|
GET /login yields a set of flows
|
|
POST /login can log in as a user
|
|
POST /login returns the same device_id as that in the request
|
|
POST /login can log in as a user with just the local part of the id
|
|
POST /login as non-existing user is rejected
|
|
POST /login wrong password is rejected
|
|
GET /events initially
|
|
GET /initialSync initially
|
|
Version responds 200 OK with valid structure
|
|
PUT /profile/:user_id/displayname sets my name
|
|
GET /profile/:user_id/displayname publicly accessible
|
|
PUT /profile/:user_id/avatar_url sets my avatar
|
|
GET /profile/:user_id/avatar_url publicly accessible
|
|
GET /device/{deviceId} gives a 404 for unknown devices
|
|
PUT /device/{deviceId} gives a 404 for unknown devices
|
|
POST /createRoom makes a public room
|
|
POST /createRoom makes a private room
|
|
POST /createRoom makes a private room with invites
|
|
POST /createRoom makes a room with a name
|
|
POST /createRoom makes a room with a topic
|
|
Can /sync newly created room
|
|
GET /rooms/:room_id/state/m.room.member/:user_id fetches my membership
|
|
GET /rooms/:room_id/state/m.room.power_levels fetches powerlevels
|
|
POST /join/:room_alias can join a room
|
|
POST /join/:room_id can join a room
|
|
POST /join/:room_id can join a room with custom content
|
|
POST /join/:room_alias can join a room with custom content
|
|
POST /rooms/:room_id/join can join a room
|
|
POST /rooms/:room_id/leave can leave a room
|
|
POST /rooms/:room_id/invite can send an invite
|
|
POST /rooms/:room_id/ban can ban a user
|
|
POST /rooms/:room_id/send/:event_type sends a message
|
|
PUT /rooms/:room_id/send/:event_type/:txn_id sends a message
|
|
PUT /rooms/:room_id/send/:event_type/:txn_id deduplicates the same txn id
|
|
GET /rooms/:room_id/state/m.room.power_levels can fetch levels
|
|
PUT /rooms/:room_id/state/m.room.power_levels can set levels
|
|
PUT power_levels should not explode if the old power levels were empty
|
|
Both GET and PUT work
|
|
POST /rooms/:room_id/read_markers can create read marker
|
|
User signups are forbidden from starting with '_'
|
|
Request to logout with invalid an access token is rejected
|
|
Request to logout without an access token is rejected
|
|
Room creation reports m.room.create to myself
|
|
Room creation reports m.room.member to myself
|
|
# Blacklisted because these tests call /r0/events which we don't implement
|
|
# New room members see their own join event
|
|
# Existing members see new members' join events
|
|
setting 'm.room.power_levels' respects room powerlevel
|
|
Unprivileged users can set m.room.topic if it only needs level 0
|
|
Users cannot set ban powerlevel higher than their own
|
|
Users cannot set kick powerlevel higher than their own
|
|
Users cannot set redact powerlevel higher than their own
|
|
Can get rooms/{roomId}/members for a departed room (SPEC-216)
|
|
3pid invite join with wrong but valid signature are rejected
|
|
3pid invite join valid signature but revoked keys are rejected
|
|
3pid invite join valid signature but unreachable ID server are rejected
|
|
Room members can join a room with an overridden displayname
|
|
Real non-joined user cannot call /events on shared room
|
|
Real non-joined user cannot call /events on invited room
|
|
Real non-joined user cannot call /events on joined room
|
|
Real non-joined user cannot call /events on default room
|
|
Real non-joined users can get state for world_readable rooms
|
|
Real non-joined users can get individual state for world_readable rooms
|
|
#Real non-joined users can get individual state for world_readable rooms after leaving
|
|
Real non-joined users cannot send messages to guest_access rooms if not joined
|
|
Real users can sync from world_readable guest_access rooms if joined
|
|
Real users can sync from default guest_access rooms if joined
|
|
Can't forget room you're still in
|
|
Can get rooms/{roomId}/members
|
|
Can create filter
|
|
Can download filter
|
|
Lazy loading parameters in the filter are strictly boolean
|
|
Can sync
|
|
Can sync a joined room
|
|
Newly joined room is included in an incremental sync
|
|
User is offline if they set_presence=offline in their sync
|
|
Changes to state are included in an incremental sync
|
|
A change to displayname should appear in incremental /sync
|
|
Current state appears in timeline in private history
|
|
Current state appears in timeline in private history with many messages before
|
|
Rooms a user is invited to appear in an initial sync
|
|
Rooms a user is invited to appear in an incremental sync
|
|
Sync can be polled for updates
|
|
Sync is woken up for leaves
|
|
Newly left rooms appear in the leave section of incremental sync
|
|
We should see our own leave event, even if history_visibility is restricted (SYN-662)
|
|
We should see our own leave event when rejecting an invite, even if history_visibility is restricted (riot-web/3462)
|
|
Newly left rooms appear in the leave section of gapped sync
|
|
Previously left rooms don't appear in the leave section of sync
|
|
Left rooms appear in the leave section of full state sync
|
|
Newly banned rooms appear in the leave section of incremental sync
|
|
Newly banned rooms appear in the leave section of incremental sync
|
|
local user can join room with version 1
|
|
User can invite local user to room with version 1
|
|
Should reject keys claiming to belong to a different user
|
|
Can add account data
|
|
Can add account data to room
|
|
#Latest account data appears in v2 /sync
|
|
New account data appears in incremental v2 /sync
|
|
Checking local federation server
|
|
Inbound federation can query profile data
|
|
Outbound federation can send room-join requests
|
|
Outbound federation can send events
|
|
# SyTest currently only implements the v1 endpoints for /send_join and /send_leave,
|
|
# whereas Dendrite only supports the v2 endpoints for those, so let's ignore this
|
|
# test for now.
|
|
#Inbound federation can backfill events
|
|
# SyTest currently only implements the v1 endpoints for /send_join and /send_leave,
|
|
# whereas Dendrite only supports the v2 endpoints for those, so let's ignore this
|
|
# test for now.
|
|
#Backfill checks the events requested belong to the room
|
|
Can upload without a file name
|
|
Can download without a file name locally
|
|
Can upload with ASCII file name
|
|
Can send image in room message
|
|
AS cannot create users outside its own namespace
|
|
Regular users cannot register within the AS namespace
|
|
AS can't set displayname for random users
|
|
AS user (not ghost) can join room without registering, with user_id query param
|
|
Changing the actions of an unknown default rule fails with 404
|
|
Changing the actions of an unknown rule fails with 404
|
|
Enabling an unknown default rule fails with 404
|
|
Trying to get push rules with unknown rule_id fails with 404
|
|
Events come down the correct room
|
|
# SyTest currently only implements the v1 endpoints for /send_join and /send_leave,
|
|
# whereas Dendrite only supports the v2 endpoints for those, so let's ignore this
|
|
# test for now.
|
|
#Inbound federation can receive v1 room-join requests
|
|
Typing events appear in initial sync
|
|
Typing events appear in incremental sync
|
|
Typing events appear in gapped sync
|
|
Inbound federation of state requires event_id as a mandatory paramater
|
|
Inbound federation of state_ids requires event_id as a mandatory paramater
|
|
POST /register returns the same device_id as that in the request
|
|
POST /createRoom with creation content
|
|
User can create and send/receive messages in a room with version 1
|
|
POST /createRoom ignores attempts to set the room version via creation_content
|
|
Inbound federation rejects remote attempts to join local users to rooms
|
|
Inbound federation rejects remote attempts to kick local users to rooms
|
|
# SyTest currently only implements the v1 endpoints for /send_join and /send_leave,
|
|
# whereas Dendrite only supports the v2 endpoints for those, so let's ignore this
|
|
# test for now.
|
|
#An event which redacts itself should be ignored
|
|
# SyTest currently only implements the v1 endpoints for /send_join and /send_leave,
|
|
# whereas Dendrite only supports the v2 endpoints for those, so let's ignore this
|
|
# test for now.
|
|
#A pair of events which redact each other should be ignored
|
|
Full state sync includes joined rooms
|
|
A message sent after an initial sync appears in the timeline of an incremental sync.
|
|
Can add tag
|
|
Can remove tag
|
|
Can list tags for a room
|
|
Tags appear in an initial v2 /sync
|
|
Newly updated tags appear in an incremental v2 /sync
|
|
Deleted tags appear in an incremental v2 /sync
|
|
/event/ on non world readable room does not work
|
|
Outbound federation can query profile data
|
|
/event/ on joined room works
|
|
/event/ does not allow access to events before the user joined
|
|
Federation key API allows unsigned requests for keys
|
|
Can paginate public room list
|
|
GET /directory/room/:room_alias yields room ID
|
|
PUT /directory/room/:room_alias creates alias
|
|
Room aliases can contain Unicode
|
|
Creators can delete alias
|
|
Regular users cannot create room aliases within the AS namespace
|
|
Deleting a non-existent alias should return a 404
|
|
Users can't delete other's aliases
|
|
Outbound federation can query room alias directory
|
|
After deactivating account, can't log in with an email
|
|
Remote room alias queries can handle Unicode
|
|
Newly joined room is included in an incremental sync after invite
|
|
Inbound /v1/make_join rejects remote attempts to join local users to rooms
|
|
Local room members see posted message events
|
|
Fetching eventstream a second time doesn't yield the message again
|
|
Local non-members don't see posted message events
|
|
Remote room members also see posted message events
|
|
Lazy loading parameters in the filter are strictly boolean
|
|
remote user can join room with version 1
|
|
Inbound federation can query room alias directory
|
|
Outbound federation can query v2 /send_join
|
|
Inbound federation can receive v2 /send_join
|
|
Message history can be paginated
|
|
Getting messages going forward is limited for a departed room (SPEC-216)
|
|
m.room.history_visibility == "world_readable" allows/forbids appropriately for Real users
|
|
Backfill works correctly with history visibility set to joined
|
|
Guest user cannot call /events globally
|
|
Guest users can join guest_access rooms
|
|
Guest user can set display names
|
|
Guest user cannot upgrade other users
|
|
m.room.history_visibility == "world_readable" allows/forbids appropriately for Guest users
|
|
Guest non-joined user cannot call /events on shared room
|
|
Guest non-joined user cannot call /events on invited room
|
|
Guest non-joined user cannot call /events on joined room
|
|
Guest non-joined user cannot call /events on default room
|
|
Guest non-joined users can get state for world_readable rooms
|
|
Guest non-joined users can get individual state for world_readable rooms
|
|
Guest non-joined users cannot room initalSync for non-world_readable rooms
|
|
Guest non-joined users can get individual state for world_readable rooms after leaving
|
|
Guest non-joined users cannot send messages to guest_access rooms if not joined
|
|
Guest users can sync from world_readable guest_access rooms if joined
|
|
Guest users can sync from default guest_access rooms if joined
|
|
Real non-joined users cannot room initalSync for non-world_readable rooms
|
|
Push rules come down in an initial /sync
|
|
Regular users can add and delete aliases in the default room configuration
|
|
GET /r0/capabilities is not public
|
|
GET /joined_rooms lists newly-created room
|
|
/joined_rooms returns only joined rooms
|
|
Message history can be paginated over federation
|
|
GET /rooms/:room_id/messages returns a message
|
|
Remote user can backfill in a room with version 1
|
|
POST /createRoom creates a room with the given version
|
|
POST /createRoom rejects attempts to create rooms with numeric versions
|
|
POST /createRoom rejects attempts to create rooms with unknown versions
|
|
Regular users can add and delete aliases when m.room.aliases is restricted
|
|
User can create and send/receive messages in a room with version 2
|
|
local user can join room with version 2
|
|
remote user can join room with version 2
|
|
User can invite local user to room with version 2
|
|
Remote user can backfill in a room with version 2
|
|
Inbound federation accepts attempts to join v2 rooms from servers with support
|
|
Outbound federation can send invites via v2 API
|
|
User can create and send/receive messages in a room with version 3
|
|
local user can join room with version 3
|
|
Remote user can backfill in a room with version 3
|
|
User can create and send/receive messages in a room with version 4
|
|
local user can join room with version 4
|
|
remote user can join room with version 3
|
|
remote user can join room with version 4
|
|
Remote user can backfill in a room with version 4
|
|
# We don't support ignores yet, so ignore this for now - ha ha.
|
|
# Ignore invite in incremental sync
|
|
Outbound federation can send invites via v2 API
|
|
User can invite local user to room with version 3
|
|
User can invite local user to room with version 4
|
|
A pair of servers can establish a join in a v2 room
|
|
Can logout all devices
|
|
State from remote users is included in the timeline in an incremental sync
|
|
User can invite remote user to room with version 1
|
|
User can invite remote user to room with version 2
|
|
User can invite remote user to room with version 3
|
|
User can invite remote user to room with version 4
|
|
User can create and send/receive messages in a room with version 5
|
|
local user can join room with version 5
|
|
User can invite local user to room with version 5
|
|
remote user can join room with version 5
|
|
User can invite remote user to room with version 5
|
|
Remote user can backfill in a room with version 5
|
|
Inbound federation can receive v1 /send_join
|
|
Inbound federation can get state for a room
|
|
Inbound federation of state requires event_id as a mandatory paramater
|
|
Inbound federation can get state_ids for a room
|
|
Inbound federation of state_ids requires event_id as a mandatory paramater
|
|
Federation rejects inbound events where the prev_events cannot be found
|
|
Outbound federation requests missing prev_events and then asks for /state_ids and resolves the state
|
|
Alternative server names do not cause a routing loop
|
|
Events whose auth_events are in the wrong room do not mess up the room state
|
|
Inbound federation can return events
|
|
Inbound federation can return missing events for world_readable visibility
|
|
Inbound federation can return missing events for invite visibility
|
|
Inbound federation can get public room list
|
|
An event which redacts itself should be ignored
|
|
A pair of events which redact each other should be ignored
|
|
Outbound federation can backfill events
|
|
Inbound federation can backfill events
|
|
Backfill checks the events requested belong to the room
|
|
Backfilled events whose prev_events are in a different room do not allow cross-room back-pagination
|
|
Outbound federation can request missing events
|
|
New room members see their own join event
|
|
Existing members see new members' join events
|
|
Inbound federation can receive events
|
|
Inbound federation can receive redacted events
|
|
Can logout current device
|
|
Can send a message directly to a device using PUT /sendToDevice
|
|
Can recv a device message using /sync
|
|
Can recv device messages until they are acknowledged
|
|
Device messages with the same txn_id are deduplicated
|
|
Device messages wake up /sync
|
|
# TODO: separate PR for: Can recv device messages over federation
|
|
# TODO: separate PR for: Device messages over federation wake up /sync
|
|
Can send messages with a wildcard device id
|
|
Can send messages with a wildcard device id to two devices
|
|
Wildcard device messages wake up /sync
|
|
# TODO: separate PR for: Wildcard device messages over federation wake up /sync
|
|
Can send a to-device message to two users which both receive it using /sync
|