aboutsummaryrefslogtreecommitdiff
path: root/are-we-synapse-yet.list
blob: 7655a3b8bf036057f18eac194702c79795d8dfbd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
reg GET /register yields a set of flows
reg POST /register can create a user
reg POST /register downcases capitals in usernames
reg POST /register returns the same device_id as that in the request
reg POST /register rejects registration of usernames with '!'
reg POST /register rejects registration of usernames with '"'
reg POST /register rejects registration of usernames with ':'
reg POST /register rejects registration of usernames with '?'
reg POST /register rejects registration of usernames with '\'
reg POST /register rejects registration of usernames with '@'
reg POST /register rejects registration of usernames with '['
reg POST /register rejects registration of usernames with ']'
reg POST /register rejects registration of usernames with '{'
reg POST /register rejects registration of usernames with '|'
reg POST /register rejects registration of usernames with '}'
reg POST /register rejects registration of usernames with '£'
reg POST /register rejects registration of usernames with 'é'
reg POST /register rejects registration of usernames with '\n'
reg POST /register rejects registration of usernames with '''
reg POST /r0/admin/register with shared secret 
reg POST /r0/admin/register admin with shared secret 
reg POST /r0/admin/register with shared secret downcases capitals 
reg POST /r0/admin/register with shared secret disallows symbols 
reg POST rejects invalid utf-8 in JSON 
log GET /login yields a set of flows
log POST /login can log in as a user 
log POST /login returns the same device_id as that in the request 
log POST /login can log in as a user with just the local part of the id 
log POST /login as non-existing user is rejected 
log POST /login wrong password is rejected 
log Interactive authentication types include SSO
log Can perform interactive authentication with SSO
log The user must be consistent through an interactive authentication session with SSO
log The operation must be consistent through an interactive authentication session
v1s GET /events initially
v1s GET /initialSync initially
csa Version responds 200 OK with valid structure
pro PUT /profile/:user_id/displayname sets my name
pro GET /profile/:user_id/displayname publicly accessible
pro PUT /profile/:user_id/avatar_url sets my avatar
pro GET /profile/:user_id/avatar_url publicly accessible
dev GET /device/{deviceId} 
dev GET /device/{deviceId} gives a 404 for unknown devices
dev GET /devices 
dev PUT /device/{deviceId} updates device fields 
dev PUT /device/{deviceId} gives a 404 for unknown devices
dev DELETE /device/{deviceId} 
dev DELETE /device/{deviceId} requires UI auth user to match device owner 
dev DELETE /device/{deviceId} with no body gives a 401 
dev The deleted device must be consistent through an interactive auth session 
dev Users receive device_list updates for their own devices
pre GET /presence/:user_id/status fetches initial status 
pre PUT /presence/:user_id/status updates my presence 
crm POST /createRoom makes a public room
crm POST /createRoom makes a private room
crm POST /createRoom makes a private room with invites
crm POST /createRoom makes a room with a name
crm POST /createRoom makes a room with a topic
syn Can /sync newly created room
crm POST /createRoom creates a room with the given version
crm POST /createRoom rejects attempts to create rooms with numeric versions
crm POST /createRoom rejects attempts to create rooms with unknown versions
crm POST /createRoom ignores attempts to set the room version via creation_content
mem GET /rooms/:room_id/state/m.room.member/:user_id fetches my membership
mem GET /rooms/:room_id/state/m.room.member/:user_id?format=event fetches my membership event 
rst GET /rooms/:room_id/state/m.room.power_levels fetches powerlevels
mem GET /rooms/:room_id/joined_members fetches my membership 
v1s GET /rooms/:room_id/initialSync fetches initial sync state 
pub GET /publicRooms lists newly-created room 
ali GET /directory/room/:room_alias yields room ID
mem GET /joined_rooms lists newly-created room
rst POST /rooms/:room_id/state/m.room.name sets name
rst GET /rooms/:room_id/state/m.room.name gets name
rst POST /rooms/:room_id/state/m.room.topic sets topic
rst GET /rooms/:room_id/state/m.room.topic gets topic
rst GET /rooms/:room_id/state fetches entire room state 
crm POST /createRoom with creation content
ali PUT /directory/room/:room_alias creates alias
nsp GET /rooms/:room_id/aliases lists aliases 
jon POST /rooms/:room_id/join can join a room
jon POST /join/:room_alias can join a room
jon POST /join/:room_id can join a room
jon POST /join/:room_id can join a room with custom content
jon POST /join/:room_alias can join a room with custom content
lev POST /rooms/:room_id/leave can leave a room
inv POST /rooms/:room_id/invite can send an invite
ban POST /rooms/:room_id/ban can ban a user
snd POST /rooms/:room_id/send/:event_type sends a message
snd PUT /rooms/:room_id/send/:event_type/:txn_id sends a message
snd PUT /rooms/:room_id/send/:event_type/:txn_id deduplicates the same txn id
get GET /rooms/:room_id/messages returns a message
get GET /rooms/:room_id/messages lazy loads members correctly 
typ PUT /rooms/:room_id/typing/:user_id sets typing notification 
typ Typing notifications don't leak (3 subtests)
rst GET /rooms/:room_id/state/m.room.power_levels can fetch levels
rst PUT /rooms/:room_id/state/m.room.power_levels can set levels
rst PUT power_levels should not explode if the old power levels were empty
rst Both GET and PUT work
rct POST /rooms/:room_id/receipt can create receipts 
red POST /rooms/:room_id/read_markers can create read marker
med POST /media/r0/upload can create an upload 
med GET /media/r0/download can fetch the value again 
cap GET /capabilities is present and well formed for registered user 
cap GET /r0/capabilities is not public
reg Register with a recaptcha 
reg registration is idempotent, without username specified 
reg registration is idempotent, with username specified 
reg registration remembers parameters 
reg registration accepts non-ascii passwords 
reg registration with inhibit_login inhibits login 
reg User signups are forbidden from starting with '_'
reg Can register using an email address 
log Can login with 3pid and password using m.login.password 
log login types include SSO 
log /login/cas/redirect redirects if the old m.login.cas login type is listed 
log Can login with new user via CAS 
lox Can logout current device 
lox Can logout all devices 
lox Request to logout with invalid an access token is rejected
lox Request to logout without an access token is rejected
log After changing password, can't log in with old password 
log After changing password, can log in with new password 
log After changing password, existing session still works 
log After changing password, a different session no longer works by default 
log After changing password, different sessions can optionally be kept 
psh Pushers created with a different access token are deleted on password change 
psh Pushers created with a the same access token are not deleted on password change 
acc Can deactivate account 
acc Can't deactivate account with wrong password 
acc After deactivating account, can't log in with password 
acc After deactivating account, can't log in with an email
v1s initialSync sees my presence status 
pre Presence change reports an event to myself 
pre Friends presence changes reports events 
crm Room creation reports m.room.create to myself
crm Room creation reports m.room.member to myself
rst Setting room topic reports m.room.topic to myself 
v1s Global initialSync 
v1s Global initialSync with limit=0 gives no messages 
v1s Room initialSync 
v1s Room initialSync with limit=0 gives no messages 
rst Setting state twice is idempotent 
jon Joining room twice is idempotent 
syn New room members see their own join event
v1s New room members see existing users' presence in room initialSync 
syn Existing members see new members' join events
syn Existing members see new members' presence 
v1s All room members see all room members' presence in global initialSync 
f,jon Remote users can join room by alias 
syn New room members see their own join event 
v1s New room members see existing members' presence in room initialSync 
syn Existing members see new members' join events 
syn Existing members see new member's presence 
v1s New room members see first user's profile information in global initialSync 
v1s New room members see first user's profile information in per-room initialSync 
f,jon Remote users may not join unfederated rooms 
syn Local room members see posted message events
v1s Fetching eventstream a second time doesn't yield the message again
syn Local non-members don't see posted message events
get Local room members can get room messages 
f,syn Remote room members also see posted message events
f,get Remote room members can get room messages 
get Message history can be paginated
f,get Message history can be paginated over federation
eph Ephemeral messages received from clients are correctly expired 
ali Room aliases can contain Unicode
f,ali Remote room alias queries can handle Unicode
ali Canonical alias can be set 
ali Canonical alias can include alt_aliases 
ali Regular users can add and delete aliases in the default room configuration
ali Regular users can add and delete aliases when m.room.aliases is restricted
ali Deleting a non-existent alias should return a 404
ali Users can't delete other's aliases
ali Users with sufficient power-level can delete other's aliases 
ali Can delete canonical alias 
ali Alias creators can delete alias with no ops 
ali Alias creators can delete canonical alias with no ops 
ali Only room members can list aliases of a room 
inv Can invite users to invite-only rooms 
inv Uninvited users cannot join the room 
inv Invited user can reject invite 
f,inv Invited user can reject invite over federation 
f,inv Invited user can reject invite over federation several times 
inv Invited user can reject invite for empty room 
f,inv Invited user can reject invite over federation for empty room 
inv Invited user can reject local invite after originator leaves 
inv Invited user can see room metadata 
f,inv Remote invited user can see room metadata 
inv Users cannot invite themselves to a room 
inv Users cannot invite a user that is already in the room 
ban Banned user is kicked and may not rejoin until unbanned 
f,ban Remote banned user is kicked and may not rejoin until unbanned 
ban 'ban' event respects room powerlevel 
plv setting 'm.room.name' respects room powerlevel 
plv setting 'm.room.power_levels' respects room powerlevel (2 subtests)
plv Unprivileged users can set m.room.topic if it only needs level 0
plv Users cannot set ban powerlevel higher than their own (2 subtests)
plv Users cannot set kick powerlevel higher than their own (2 subtests)
plv Users cannot set redact powerlevel higher than their own (2 subtests)
v1s Check that event streams started after a client joined a room work (SYT-1) 
v1s Event stream catches up fully after many messages 
xxx POST /rooms/:room_id/redact/:event_id as power user redacts message 
xxx POST /rooms/:room_id/redact/:event_id as original message sender redacts message 
xxx POST /rooms/:room_id/redact/:event_id as random user does not redact message 
xxx POST /redact disallows redaction of event in different room 
xxx Redaction of a redaction redacts the redaction reason 
v1s A departed room is still included in /initialSync (SPEC-216) 
v1s Can get rooms/{roomId}/initialSync for a departed room (SPEC-216) 
rst Can get rooms/{roomId}/state for a departed room (SPEC-216) 
mem Can get rooms/{roomId}/members for a departed room (SPEC-216)
get Can get rooms/{roomId}/messages for a departed room (SPEC-216) 
rst Can get 'm.room.name' state for a departed room (SPEC-216) 
syn Getting messages going forward is limited for a departed room (SPEC-216)
3pd Can invite existing 3pid 
3pd Can invite existing 3pid with no ops into a private room 
3pd Can invite existing 3pid in createRoom 
3pd Can invite unbound 3pid 
f,3pd Can invite unbound 3pid over federation 
3pd Can invite unbound 3pid with no ops into a private room 
f,3pd Can invite unbound 3pid over federation with no ops into a private room 
f,3pd Can invite unbound 3pid over federation with users from both servers 
3pd Can accept unbound 3pid invite after inviter leaves 
3pd Can accept third party invite with /join 
3pd 3pid invite join with wrong but valid signature are rejected
3pd 3pid invite join valid signature but revoked keys are rejected
3pd 3pid invite join valid signature but unreachable ID server are rejected
gst Guest user cannot call /events globally
gst Guest users can join guest_access rooms
gst Guest users can send messages to guest_access rooms if joined 
gst Guest user calling /events doesn't tightloop 
gst Guest users are kicked from guest_access rooms on revocation of guest_access 
gst Guest user can set display names
gst Guest users are kicked from guest_access rooms on revocation of guest_access over federation 
gst Guest user can upgrade to fully featured user 
gst Guest user cannot upgrade other users
pub GET /publicRooms lists rooms 
pub GET /publicRooms includes avatar URLs 
gst Guest users can accept invites to private rooms over federation 
gst Guest users denied access over federation if guest access prohibited 
mem Room members can override their displayname on a room-specific basis 
mem Room members can join a room with an overridden displayname
mem Users cannot kick users from a room they are not in 
mem Users cannot kick users who have already left a room 
typ Typing notification sent to local room members 
f,typ Typing notifications also sent to remote room members 
typ Typing can be explicitly stopped 
rct Read receipts are visible to /initialSync 
rct Read receipts are sent as events 
rct Receipts must be m.read 
pro displayname updates affect room member events 
pro avatar_url updates affect room member events 
gst m.room.history_visibility == "world_readable" allows/forbids appropriately for Guest users
gst m.room.history_visibility == "shared" allows/forbids appropriately for Guest users 
gst m.room.history_visibility == "invited" allows/forbids appropriately for Guest users 
gst m.room.history_visibility == "joined" allows/forbids appropriately for Guest users 
gst m.room.history_visibility == "default" allows/forbids appropriately for Guest users 
gst Guest non-joined user cannot call /events on shared room
gst Guest non-joined user cannot call /events on invited room
gst Guest non-joined user cannot call /events on joined room
gst Guest non-joined user cannot call /events on default room
gst Guest non-joined user can call /events on world_readable room 
gst Guest non-joined users can get state for world_readable rooms
gst Guest non-joined users can get individual state for world_readable rooms
gst Guest non-joined users cannot room initalSync for non-world_readable rooms
gst Guest non-joined users can room initialSync for world_readable rooms 
gst Guest non-joined users can get individual state for world_readable rooms after leaving
gst Guest non-joined users cannot send messages to guest_access rooms if not joined
gst Guest users can sync from world_readable guest_access rooms if joined
gst Guest users can sync from shared guest_access rooms if joined 
gst Guest users can sync from invited guest_access rooms if joined 
gst Guest users can sync from joined guest_access rooms if joined 
gst Guest users can sync from default guest_access rooms if joined
ath m.room.history_visibility == "world_readable" allows/forbids appropriately for Real users
ath m.room.history_visibility == "shared" allows/forbids appropriately for Real users 
ath m.room.history_visibility == "invited" allows/forbids appropriately for Real users 
ath m.room.history_visibility == "joined" allows/forbids appropriately for Real users 
ath m.room.history_visibility == "default" allows/forbids appropriately for Real users 
ath Real non-joined user cannot call /events on shared room
ath Real non-joined user cannot call /events on invited room
ath Real non-joined user cannot call /events on joined room
ath Real non-joined user cannot call /events on default room
ath Real non-joined user can call /events on world_readable room 
ath Real non-joined users can get state for world_readable rooms
ath Real non-joined users can get individual state for world_readable rooms
ath Real non-joined users cannot room initalSync for non-world_readable rooms
ath Real non-joined users can room initialSync for world_readable rooms 
ath Real non-joined users can get individual state for world_readable rooms after leaving 
ath Real non-joined users cannot send messages to guest_access rooms if not joined
ath Real users can sync from world_readable guest_access rooms if joined
ath Real users can sync from shared guest_access rooms if joined 
ath Real users can sync from invited guest_access rooms if joined 
ath Real users can sync from joined guest_access rooms if joined 
ath Real users can sync from default guest_access rooms if joined
ath Only see history_visibility changes on boundaries 
f,ath Backfill works correctly with history visibility set to joined
fgt Forgotten room messages cannot be paginated 
fgt Forgetting room does not show up in v2 /sync 
fgt Can forget room you've been kicked from 
fgt Can't forget room you're still in
fgt Can re-join room if re-invited
ath Only original members of the room can see messages from erased users 
mem /joined_rooms returns only joined rooms
mem /joined_members return joined members 
ctx /context/ on joined room works 
ctx /context/ on non world readable room does not work 
ctx /context/ returns correct number of events 
ctx /context/ with lazy_load_members filter works 
get /event/ on joined room works
get /event/ on non world readable room does not work
get /event/ does not allow access to events before the user joined
mem Can get rooms/{roomId}/members
mem Can get rooms/{roomId}/members at a given point 
mem Can filter rooms/{roomId}/members 
upg /upgrade creates a new room 
upg /upgrade should preserve room visibility for public rooms 
upg /upgrade should preserve room visibility for private rooms 
upg /upgrade copies >100 power levels to the new room 
upg /upgrade copies the power levels to the new room 
upg /upgrade preserves the power level of the upgrading user in old and new rooms 
upg /upgrade copies important state to the new room 
upg /upgrade copies ban events to the new room 
upg local user has push rules copied to upgraded room 
f,upg remote user has push rules copied to upgraded room 
upg /upgrade moves aliases to the new room 
upg /upgrade moves remote aliases to the new room 
upg /upgrade preserves direct room state 
upg /upgrade preserves room federation ability 
upg /upgrade restricts power levels in the old room 
upg /upgrade restricts power levels in the old room when the old PLs are unusual 
upg /upgrade to an unknown version is rejected 
upg /upgrade is rejected if the user can't send state events 
upg /upgrade of a bogus room fails gracefully 
upg Cannot send tombstone event that points to the same room 
f,upg Local and remote users' homeservers remove a room from their public directory on upgrade 
rst Name/topic keys are correct 
f,pub Can get remote public room list
pub Can paginate public room list
pub Can search public room list 
syn Can create filter
syn Can download filter
syn Can sync
syn Can sync a joined room
syn Full state sync includes joined rooms
syn Newly joined room is included in an incremental sync
syn Newly joined room has correct timeline in incremental sync 
syn Newly joined room includes presence in incremental sync 
syn Get presence for newly joined members in incremental sync 
syn Can sync a room with a single message 
syn Can sync a room with a message with a transaction id 
syn A message sent after an initial sync appears in the timeline of an incremental sync.
syn A filtered timeline reaches its limit 
syn Syncing a new room with a large timeline limit isn't limited 
syn A full_state incremental update returns only recent timeline 
syn A prev_batch token can be used in the v1 messages API 
syn A next_batch token can be used in the v1 messages API 
syn User sees their own presence in a sync 
syn User is offline if they set_presence=offline in their sync
syn User sees updates to presence from other users in the incremental sync. 
syn State is included in the timeline in the initial sync 
f,syn State from remote users is included in the state in the initial sync 
syn Changes to state are included in an incremental sync
syn Changes to state are included in an gapped incremental sync 
f,syn State from remote users is included in the timeline in an incremental sync 
syn A full_state incremental update returns all state 
syn When user joins a room the state is included in the next sync 
syn A change to displayname should not result in a full state sync 
syn A change to displayname should appear in incremental /sync
syn When user joins a room the state is included in a gapped sync 
syn When user joins and leaves a room in the same batch, the full state is still included in the next sync 
syn Current state appears in timeline in private history
syn Current state appears in timeline in private history with many messages before
syn Current state appears in timeline in private history with many messages after 
syn Rooms a user is invited to appear in an initial sync
syn Rooms a user is invited to appear in an incremental sync
syn Newly joined room is included in an incremental sync after invite
syn Sync can be polled for updates
syn Sync is woken up for leaves
syn Left rooms appear in the leave section of sync 
syn Newly left rooms appear in the leave section of incremental sync
syn We should see our own leave event, even if history_visibility is restricted (SYN-662)
syn We should see our own leave event when rejecting an invite, even if history_visibility is restricted (riot-web/3462)
syn Newly left rooms appear in the leave section of gapped sync
syn Previously left rooms don't appear in the leave section of sync
syn Left rooms appear in the leave section of full state sync
syn Archived rooms only contain history from before the user left 
syn Banned rooms appear in the leave section of sync 
syn Newly banned rooms appear in the leave section of incremental sync
syn Newly banned rooms appear in the leave section of incremental sync
syn Typing events appear in initial sync
syn Typing events appear in incremental sync
syn Typing events appear in gapped sync
syn Read receipts appear in initial v2 /sync 
syn New read receipts appear in incremental v2 /sync 
syn Can pass a JSON filter as a query parameter 
syn Can request federation format via the filter 
syn Read markers appear in incremental v2 /sync 
syn Read markers appear in initial v2 /sync 
syn Read markers can be updated 
syn Lazy loading parameters in the filter are strictly boolean
syn The only membership state included in an initial sync is for all the senders in the timeline 
syn The only membership state included in an incremental sync is for senders in the timeline 
syn The only membership state included in a gapped incremental sync is for senders in the timeline 
syn Gapped incremental syncs include all state changes 
syn Old leaves are present in gapped incremental syncs 
syn Leaves are present in non-gapped incremental syncs 
syn Old members are included in gappy incr LL sync if they start speaking 
syn Members from the gap are included in gappy incr LL sync 
syn We don't send redundant membership state across incremental syncs by default 
syn We do send redundant membership state across incremental syncs if asked 
syn Unnamed room comes with a name summary 
syn Named room comes with just joined member count summary 
syn Room summary only has 5 heroes 
syn Room summary counts change when membership changes 
rmv User can create and send/receive messages in a room with version 1 
rmv User can create and send/receive messages in a room with version 1 (2 subtests)
rmv local user can join room with version 1
rmv User can invite local user to room with version 1
rmv remote user can join room with version 1
rmv User can invite remote user to room with version 1 
rmv Remote user can backfill in a room with version 1
rmv Can reject invites over federation for rooms with version 1 
rmv Can receive redactions from regular users over federation in room version 1 
rmv User can create and send/receive messages in a room with version 2 
rmv User can create and send/receive messages in a room with version 2 (2 subtests)
rmv local user can join room with version 2
rmv User can invite local user to room with version 2
rmv remote user can join room with version 2
rmv User can invite remote user to room with version 2 
rmv Remote user can backfill in a room with version 2
rmv Can reject invites over federation for rooms with version 2 
rmv Can receive redactions from regular users over federation in room version 2 
rmv User can create and send/receive messages in a room with version 3 
rmv User can create and send/receive messages in a room with version 3 (2 subtests)
rmv local user can join room with version 3 
rmv User can invite local user to room with version 3 
rmv remote user can join room with version 3 
rmv User can invite remote user to room with version 3 
rmv Remote user can backfill in a room with version 3 
rmv Can reject invites over federation for rooms with version 3 
rmv Can receive redactions from regular users over federation in room version 3 
rmv User can create and send/receive messages in a room with version 4 
rmv User can create and send/receive messages in a room with version 4 (2 subtests)
rmv local user can join room with version 4 
rmv User can invite local user to room with version 4 
rmv remote user can join room with version 4 
rmv User can invite remote user to room with version 4 
rmv Remote user can backfill in a room with version 4 
rmv Can reject invites over federation for rooms with version 4 
rmv Can receive redactions from regular users over federation in room version 4 
rmv User can create and send/receive messages in a room with version 5 
rmv User can create and send/receive messages in a room with version 5 (2 subtests)
rmv local user can join room with version 5 
rmv User can invite local user to room with version 5 
rmv remote user can join room with version 5 
rmv User can invite remote user to room with version 5 
rmv Remote user can backfill in a room with version 5 
rmv Can reject invites over federation for rooms with version 5 
rmv Can receive redactions from regular users over federation in room version 5 
rmv User can create and send/receive messages in a room with version 6 
rmv User can create and send/receive messages in a room with version 6 (2 subtests)
rmv local user can join room with version 6 
rmv User can invite local user to room with version 6 
rmv remote user can join room with version 6 
rmv User can invite remote user to room with version 6 
rmv Remote user can backfill in a room with version 6 
rmv Can reject invites over federation for rooms with version 6 
rmv Can receive redactions from regular users over federation in room version 6 
rmv Inbound federation rejects invites which include invalid JSON for room version 6
rmv Outbound federation rejects invite response which include invalid JSON for room version 6
rmv Inbound federation rejects invite rejections which include invalid JSON for room version 6
rmv Server rejects invalid JSON in a version 6 room
pre Presence changes are reported to local room members 
f,pre Presence changes are also reported to remote room members 
pre Presence changes to UNAVAILABLE are reported to local room members 
f,pre Presence changes to UNAVAILABLE are reported to remote room members 
v1s Newly created users see their own presence in /initialSync (SYT-34) 
dvk Can upload device keys 
dvk Should reject keys claiming to belong to a different user
dvk Can query device keys using POST 
dvk Can query specific device keys using POST 
dvk query for user with no keys returns empty key dict 
dvk Can claim one time key using POST 
f,dvk Can query remote device keys using POST 
f,dvk Can claim remote one time key using POST 
dvk Local device key changes appear in v2 /sync 
dvk Local new device changes appear in v2 /sync 
dvk Local delete device changes appear in v2 /sync 
dvk Local update device changes appear in v2 /sync 
dvk Can query remote device keys using POST after notification 
f,dev Device deletion propagates over federation 
f,dev If remote user leaves room, changes device and rejoins we see update in sync 
f,dev If remote user leaves room we no longer receive device updates 
dvk Local device key changes appear in /keys/changes 
dvk New users appear in /keys/changes 
f,dvk If remote user leaves room, changes device and rejoins we see update in /keys/changes 
dvk Get left notifs in sync and /keys/changes when other user leaves 
dvk Get left notifs for other users in sync and /keys/changes when user leaves 
f,dvk If user leaves room, remote user changes device and rejoins we see update in /sync and /keys/changes 
dvk Can create backup version 
dvk Can update backup version 
dvk Responds correctly when backup is empty 
dvk Can backup keys 
dvk Can update keys with better versions 
dvk Will not update keys with worse versions 
dvk Will not back up to an old backup version 
dvk Can delete backup 
dvk Deleted & recreated backups are empty 
dvk Can create more than 10 backup versions 
dvk Can upload self-signing keys 
dvk Fails to upload self-signing keys with no auth 
dvk Fails to upload self-signing key without master key 
dvk Changing master key notifies local users 
dvk Changing user-signing key notifies local users 
f,dvk can fetch self-signing keys over federation 
f,dvk uploading self-signing key notifies over federation 
f,dvk uploading signed devices gets propagated over federation 
tag Can add tag
tag Can remove tag
tag Can list tags for a room
v1s Tags appear in the v1 /events stream 
v1s Tags appear in the v1 /initalSync 
v1s Tags appear in the v1 room initial sync 
tag Tags appear in an initial v2 /sync
tag Newly updated tags appear in an incremental v2 /sync
tag Deleted tags appear in an incremental v2 /sync
tag local user has tags copied to the new room 
f,tag remote user has tags copied to the new room 
sch Can search for an event by body 
sch Can get context around search results 
sch Can back-paginate search results 
sch Search works across an upgraded room and its predecessor 
sch Search results with rank ordering do not include redacted events 
sch Search results with recent ordering do not include redacted events 
acc Can add account data
acc Can add account data to room
acc Can get account data without syncing 
acc Can get room account data without syncing 
v1s Latest account data comes down in /initialSync 
v1s Latest account data comes down in room initialSync 
v1s Account data appears in v1 /events stream 
v1s Room account data appears in v1 /events stream 
acc Latest account data appears in v2 /sync 
acc New account data appears in incremental v2 /sync
oid Can generate a openid access_token that can be exchanged for information about a user 
oid Invalid openid access tokens are rejected 
oid Requests to userinfo without access tokens are rejected 
std Can send a message directly to a device using PUT /sendToDevice 
std Can recv a device message using /sync 
std Can recv device messages until they are acknowledged 
std Device messages with the same txn_id are deduplicated 
std Device messages wake up /sync 
std Can recv device messages over federation 
fsd Device messages over federation wake up /sync 
std Can send messages with a wildcard device id 
std Can send messages with a wildcard device id to two devices 
std Wildcard device messages wake up /sync 
fsd Wildcard device messages over federation wake up /sync 
adm /whois 
nsp /purge_history 
nsp /purge_history by ts 
nsp Can backfill purged history 
nsp Shutdown room 
ign Ignore user in existing room 
ign Ignore invite in full sync 
ign Ignore invite in incremental sync 
fky Checking local federation server
fky Federation key API allows unsigned requests for keys
fky Federation key API can act as a notary server via a GET request 
fky Federation key API can act as a notary server via a POST request 
fky Key notary server should return an expired key if it can't find any others 
fky Key notary server must not overwrite a valid key with a spurious result from the origin server 
fqu Non-numeric ports in server names are rejected 
fqu Outbound federation can query profile data
fqu Inbound federation can query profile data
fqu Outbound federation can query room alias directory
fqu Inbound federation can query room alias directory
fsj Outbound federation can query v1 /send_join 
fsj Outbound federation can query v2 /send_join
fmj Outbound federation passes make_join failures through to the client 
fsj Inbound federation can receive v1 /send_join 
fsj Inbound federation can receive v2 /send_join
fmj Inbound /v1/make_join rejects remote attempts to join local users to rooms
fsj Inbound /v1/send_join rejects incorrectly-signed joins 
fsj Inbound /v1/send_join rejects joins from other servers 
fau Inbound federation rejects remote attempts to kick local users to rooms
frv Inbound federation rejects attempts to join v1 rooms from servers without v1 support 
frv Inbound federation rejects attempts to join v2 rooms from servers lacking version support 
frv Inbound federation rejects attempts to join v2 rooms from servers only supporting v1 
frv Inbound federation accepts attempts to join v2 rooms from servers with support
frv Outbound federation correctly handles unsupported room versions 
frv A pair of servers can establish a join in a v2 room 
fsj Outbound federation rejects send_join responses with no m.room.create event 
frv Outbound federation rejects m.room.create events with an unknown room version 
fsj Event with an invalid signature in the send_join response should not cause room join to fail 
fsj Inbound: send_join rejects invalid JSON for room version 6
fed Outbound federation can send events
fed Inbound federation can receive events 
fed Inbound federation can receive redacted events 
fed Ephemeral messages received from servers are correctly expired 
fed Events whose auth_events are in the wrong room do not mess up the room state 
fed Inbound federation can return events 
fed Inbound federation redacts events from erased users 
fme Outbound federation can request missing events 
fme Inbound federation can return missing events for world_readable visibility 
fme Inbound federation can return missing events for shared visibility 
fme Inbound federation can return missing events for invite visibility 
fme Inbound federation can return missing events for joined visibility 
fme outliers whose auth_events are in a different room are correctly rejected 
fbk Outbound federation can backfill events 
fbk Inbound federation can backfill events 
fbk Backfill checks the events requested belong to the room 
fbk Backfilled events whose prev_events are in a different room do not allow cross-room back-pagination 
fiv Outbound federation can send invites via v1 API 
fiv Outbound federation can send invites via v2 API 
fiv Inbound federation can receive invites via v1 API 
fiv Inbound federation can receive invites via v2 API 
fiv Inbound federation can receive invite and reject when remote replies with a 403 
fiv Inbound federation can receive invite and reject when remote replies with a 500 
fiv Inbound federation can receive invite and reject when remote is unreachable 
fiv Inbound federation rejects invites which are not signed by the sender 
fiv Inbound federation can receive invite rejections 
fiv Inbound federation rejects incorrectly-signed invite rejections 
fsl Inbound /v1/send_leave rejects leaves from other servers 
fst Inbound federation can get state for a room 
fst Inbound federation of state requires event_id as a mandatory paramater
fst Inbound federation can get state_ids for a room 
fst Inbound federation of state_ids requires event_id as a mandatory paramater
fst  Federation rejects inbound events where the prev_events cannot be found 
fst Room state at a rejected message event is the same as its predecessor 
fst Room state at a rejected state event is the same as its predecessor 
fst Outbound federation requests missing prev_events and then asks for /state_ids and resolves the state 
fst Federation handles empty auth_events in state_ids sanely 
fst Getting state checks the events requested belong to the room 
fst Getting state IDs checks the events requested belong to the room 
fst Should not be able to take over the room by pretending there is no PL event 
fpb Inbound federation can get public room list 
fed Outbound federation sends receipts 
fed Inbound federation rejects receipts from wrong remote 
fed Inbound federation ignores redactions from invalid servers room > v3 
fed An event which redacts an event in a different room should be ignored 
fed An event which redacts itself should be ignored 
fed A pair of events which redact each other should be ignored 
fdk Local device key changes get to remote servers 
fdk Server correctly handles incoming m.device_list_update 
fdk Server correctly resyncs when client query keys and there is no remote cache 
fdk Server correctly resyncs when server leaves and rejoins a room 
fdk Local device key changes get to remote servers with correct prev_id 
fdk Device list doesn't change if remote server is down 
fdk If a device list update goes missing, the server resyncs on the next one 
fst Name/topic keys are correct 
fau Remote servers cannot set power levels in rooms without existing powerlevels 
fau Remote servers should reject attempts by non-creators to set the power levels 
fau Inbound federation rejects typing notifications from wrong remote 
fau Users cannot set notifications powerlevel higher than their own
fed Forward extremities remain so even after the next events are populated as outliers 
fau Banned servers cannot send events 
fau Banned servers cannot /make_join 
fau Banned servers cannot /send_join 
fau Banned servers cannot /make_leave 
fau Banned servers cannot /send_leave 
fau Banned servers cannot /invite 
fau Banned servers cannot get room state 
fau Banned servers cannot get room state ids 
fau Banned servers cannot backfill 
fau Banned servers cannot /event_auth 
fau Banned servers cannot get missing events 
fau Server correctly handles transactions that break edu limits 
fau Inbound federation correctly soft fails events 
fau Inbound federation accepts a second soft-failed event 
fau Inbound federation correctly handles soft failed events as extremities 
med Can upload with Unicode file name 
med Can download with Unicode file name locally 
f,med Can download with Unicode file name over federation 
med Alternative server names do not cause a routing loop 
med Can download specifying a different Unicode file name 
med Can upload without a file name
med Can download without a file name locally
f,med Can download without a file name over federation 
med Can upload with ASCII file name
med Can download file 'ascii' 
med Can download file 'name with spaces' 
med Can download file 'name;with;semicolons' 
med Can download specifying a different ASCII file name 
med Can send image in room message
med Can fetch images in room 
med POSTed media can be thumbnailed 
f,med Remote media can be thumbnailed 
med Test URL preview 
med Can read configuration endpoint 
nsp Can quarantine media in rooms 
udr User appears in user directory 
udr User in private room doesn't appear in user directory 
udr User joining then leaving public room appears and dissappears from directory 
udr Users appear/disappear from directory when join_rules are changed 
udr Users appear/disappear from directory when history_visibility are changed 
udr Users stay in directory when join_rules are changed but history_visibility is world_readable 
f,udr User in remote room doesn't appear in user directory after server left room 
udr User directory correctly update on display name change 
udr User in shared private room does appear in user directory 
udr User in shared private room does appear in user directory until leave 
udr User in dir while user still shares private rooms 
nsp Create group 
nsp Add group rooms 
nsp Remove group rooms 
nsp Get local group profile 
nsp Get local group users 
nsp Add/remove local group rooms 
nsp Get local group summary 
nsp Get remote group profile 
nsp Get remote group users 
nsp Add/remove remote group rooms 
nsp Get remote group summary 
nsp Add local group users 
nsp Remove self from local group 
nsp Remove other from local group 
nsp Add remote group users 
nsp Remove self from remote group 
nsp Listing invited users of a remote group when not a member returns a 403 
nsp Add group category 
nsp Remove group category 
nsp Get group categories 
nsp Add group role 
nsp Remove group role 
nsp Get group roles 
nsp Add room to group summary 
nsp Adding room to group summary keeps room_id when fetching rooms in group 
nsp Adding multiple rooms to group summary have correct order 
nsp Remove room from group summary 
nsp Add room to group summary with category 
nsp Remove room from group summary with category 
nsp Add user to group summary 
nsp Adding multiple users to group summary have correct order 
nsp Remove user from group summary 
nsp Add user to group summary with role 
nsp Remove user from group summary with role 
nsp Local group invites come down sync 
nsp Group creator sees group in sync 
nsp Group creator sees group in initial sync 
nsp Get/set local group publicity 
nsp Bulk get group publicity 
nsp Joinability comes down summary 
nsp Set group joinable and join it 
nsp Group is not joinable by default 
nsp Group is joinable over federation 
nsp Room is transitioned on local and remote groups upon room upgrade 
3pd Can bind 3PID via home server 
3pd Can bind and unbind 3PID via homeserver 
3pd Can unbind 3PID via homeserver when bound out of band 
3pd 3PIDs are unbound after account deactivation 
3pd Can bind and unbind 3PID via /unbind by specifying the identity server 
3pd Can bind and unbind 3PID via /unbind without specifying the identity server 
app AS can create a user 
app AS can create a user with an underscore 
app AS can create a user with inhibit_login 
app AS cannot create users outside its own namespace
app Regular users cannot register within the AS namespace
app AS can make room aliases 
app Regular users cannot create room aliases within the AS namespace
app AS-ghosted users can use rooms via AS 
app AS-ghosted users can use rooms themselves 
app Ghost user must register before joining room 
app AS can set avatar for ghosted users 
app AS can set displayname for ghosted users 
app AS can't set displayname for random users
app Inviting an AS-hosted user asks the AS server 
app Accesing an AS-hosted room alias asks the AS server 
app Events in rooms with AS-hosted room aliases are sent to AS server 
app AS user (not ghost) can join room without registering 
app AS user (not ghost) can join room without registering, with user_id query param
app HS provides query metadata 
app HS can provide query metadata on a single protocol 
app HS will proxy request for 3PU mapping 
app HS will proxy request for 3PL mapping 
app AS can publish rooms in their own list 
app AS and main public room lists are separate 
app AS can deactivate a user 
psh Test that a message is pushed 
psh Invites are pushed 
psh Rooms with names are correctly named in pushed 
psh Rooms with canonical alias are correctly named in pushed 
psh Rooms with many users are correctly pushed 
psh Don't get pushed for rooms you've muted 
psh Rejected events are not pushed 
psh Can add global push rule for room 
psh Can add global push rule for sender 
psh Can add global push rule for content 
psh Can add global push rule for override 
psh Can add global push rule for underride 
psh Can add global push rule for content 
psh New rules appear before old rules by default 
psh Can add global push rule before an existing rule 
psh Can add global push rule after an existing rule 
psh Can delete a push rule 
psh Can disable a push rule 
psh Adding the same push rule twice is idempotent 
psh Messages that notify from another user increment unread notification count 
psh Messages that highlight from another user increment unread highlight count 
psh Can change the actions of default rules 
psh Changing the actions of an unknown default rule fails with 404
psh Can change the actions of a user specified rule 
psh Changing the actions of an unknown rule fails with 404
psh Can fetch a user's pushers 
psh Push rules come down in an initial /sync
psh Adding a push rule wakes up an incremental /sync 
psh Disabling a push rule wakes up an incremental /sync 
psh Enabling a push rule wakes up an incremental /sync 
psh Setting actions for a push rule wakes up an incremental /sync 
psh Can enable/disable default rules 
psh Enabling an unknown default rule fails with 404
psh Test that rejected pushers are removed. 
psh Notifications can be viewed with GET /notifications 
psh Trying to add push rule with no scope fails with 400 
psh Trying to add push rule with invalid scope fails with 400 
psh Trying to add push rule with missing template fails with 400 
psh Trying to add push rule with missing rule_id fails with 400 
psh Trying to add push rule with empty rule_id fails with 400 
psh Trying to add push rule with invalid template fails with 400 
psh Trying to add push rule with rule_id with slashes fails with 400 
psh Trying to add push rule with override rule without conditions fails with 400 
psh Trying to add push rule with underride rule without conditions fails with 400 
psh Trying to add push rule with condition without kind fails with 400 
psh Trying to add push rule with content rule without pattern fails with 400 
psh Trying to add push rule with no actions fails with 400 
psh Trying to add push rule with invalid action fails with 400 
psh Trying to add push rule with invalid attr fails with 400 
psh Trying to add push rule with invalid value for enabled fails with 400 
psh Trying to get push rules with no trailing slash fails with 400 
psh Trying to get push rules with scope without trailing slash fails with 400 
psh Trying to get push rules with template without tailing slash fails with 400 
psh Trying to get push rules with unknown scope fails with 400 
psh Trying to get push rules with unknown template fails with 400 
psh Trying to get push rules with unknown attribute fails with 400 
psh Trying to get push rules with unknown rule_id fails with 404
v1s GET /initialSync with non-numeric 'limit' 
v1s GET /events with non-numeric 'limit' 
v1s GET /events with negative 'limit' 
v1s GET /events with non-numeric 'timeout' 
ath Event size limits 
syn Check creating invalid filters returns 4xx 
f,pre New federated private chats get full presence information (SYN-115) 
pre Left room members do not cause problems for presence 
crm Rooms can be created with an initial invite list (SYN-205) 
typ Typing notifications don't leak 
ban Non-present room members cannot ban others 
psh Getting push rules doesn't corrupt the cache SYN-390 
inv Test that we can be reinvited to a room we created 
syn Multiple calls to /sync should not cause 500 errors 
gst Guest user can call /events on another world_readable room (SYN-606) 
gst Real user can call /events on another world_readable room (SYN-606) 
gst Events come down the correct room
pub Asking for a remote rooms list, but supplying the local server's name, returns the local rooms list
std Can send a to-device message to two users which both receive it using /sync
fme Outbound federation will ignore a missing event with bad JSON for room version 6
fbk Outbound federation rejects backfill containing invalid JSON for events in room version 6
jso Invalid JSON integers
jso Invalid JSON floats
jso Invalid JSON special values
inv Can invite users to invite-only rooms (2 subtests)
plv setting 'm.room.name' respects room powerlevel (2 subtests)
psh Messages that notify from another user increment notification_count
psh Messages that org.matrix.msc2625.mark_unread from another user increment org.matrix.msc2625.unread_count
dvk Can claim one time key using POST (2 subtests)
fdk Can query remote device keys using POST (1 subtests)
fdk Can claim remote one time key using POST (2 subtests)
fmj Inbound /make_join rejects attempts to join rooms where all users have left