Merge branch 'are-we-synpase-sync' into 'master'

Sync are-we-synapse with dendrite

See merge request famedly/conduit!21
next
Timo Kösters 2021-02-07 21:36:05 +00:00
commit fb9880fee9
2 changed files with 666 additions and 630 deletions

View File

@ -91,14 +91,15 @@ 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 returns a message
get GET /rooms/:room_id/messages lazy loads members correctly get GET /rooms/:room_id/messages lazy loads members correctly
typ PUT /rooms/:room_id/typing/:user_id sets typing notification 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 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 /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 PUT power_levels should not explode if the old power levels were empty
rst Both GET and PUT work rst Both GET and PUT work
rct POST /rooms/:room_id/receipt can create receipts rct POST /rooms/:room_id/receipt can create receipts
red POST /rooms/:room_id/read_markers can create read marker red POST /rooms/:room_id/read_markers can create read marker
med POST /media/v1/upload can create an upload med POST /media/r0/upload can create an upload
med GET /media/v1/download can fetch the value again med GET /media/r0/download can fetch the value again
cap GET /capabilities is present and well formed for registered user cap GET /capabilities is present and well formed for registered user
cap GET /r0/capabilities is not public cap GET /r0/capabilities is not public
reg Register with a recaptcha reg Register with a recaptcha
@ -296,7 +297,7 @@ fgt Forgotten room messages cannot be paginated
fgt Forgetting room does not show up in v2 /sync fgt Forgetting room does not show up in v2 /sync
fgt Can forget room you've been kicked from fgt Can forget room you've been kicked from
fgt Can't forget room you're still in fgt Can't forget room you're still in
mem Can re-join room if re-invited fgt Can re-join room if re-invited
ath Only original members of the room can see messages from erased users ath Only original members of the room can see messages from erased users
mem /joined_rooms returns only joined rooms mem /joined_rooms returns only joined rooms
mem /joined_members return joined members mem /joined_members return joined members
@ -455,6 +456,19 @@ rmv User can invite remote user to room with version 5
rmv Remote user can backfill in a 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 reject invites over federation for rooms with version 5
rmv Can receive redactions from regular users over federation in room 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 pre Presence changes are reported to local room members
f,pre Presence changes are also reported to remote room members f,pre Presence changes are also reported to remote room members
pre Presence changes to UNAVAILABLE are reported to local room members pre Presence changes to UNAVAILABLE are reported to local room members
@ -482,24 +496,24 @@ f,dvk If remote user leaves room, changes device and rejoins we see update in /k
dvk Get left notifs in sync and /keys/changes when other user leaves 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 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 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 dkb Can create backup version
dvk Can update backup version dkb Can update backup version
dvk Responds correctly when backup is empty dkb Responds correctly when backup is empty
dvk Can backup keys dkb Can backup keys
dvk Can update keys with better versions dkb Can update keys with better versions
dvk Will not update keys with worse versions dkb Will not update keys with worse versions
dvk Will not back up to an old backup version dkb Will not back up to an old backup version
dvk Can delete backup dkb Can delete backup
dvk Deleted & recreated backups are empty dkb Deleted & recreated backups are empty
dvk Can create more than 10 backup versions dkb Can create more than 10 backup versions
dvk Can upload self-signing keys xsk Can upload self-signing keys
dvk Fails to upload self-signing keys with no auth xsk Fails to upload self-signing keys with no auth
dvk Fails to upload self-signing key without master key xsk Fails to upload self-signing key without master key
dvk Changing master key notifies local users xsk Changing master key notifies local users
dvk Changing user-signing key notifies local users xsk Changing user-signing key notifies local users
f,dvk can fetch self-signing keys over federation f,xsk can fetch self-signing keys over federation
f,dvk uploading self-signing key notifies over federation f,xsk uploading self-signing key notifies over federation
f,dvk uploading signed devices gets propagated over federation f,xsk uploading signed devices gets propagated over federation
tag Can add tag tag Can add tag
tag Can remove tag tag Can remove tag
tag Can list tags for a room tag Can list tags for a room
@ -536,11 +550,11 @@ std Can recv device messages until they are acknowledged
std Device messages with the same txn_id are deduplicated std Device messages with the same txn_id are deduplicated
std Device messages wake up /sync std Device messages wake up /sync
std Can recv device messages over federation std Can recv device messages over federation
std Device messages over federation wake up /sync 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
std Can send messages with a wildcard device id to two devices std Can send messages with a wildcard device id to two devices
std Wildcard device messages wake up /sync std Wildcard device messages wake up /sync
std Wildcard device messages over federation wake up /sync fsd Wildcard device messages over federation wake up /sync
adm /whois adm /whois
nsp /purge_history nsp /purge_history
nsp /purge_history by ts nsp /purge_history by ts
@ -578,6 +592,7 @@ 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 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 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 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 Outbound federation can send events
fed Inbound federation can receive events fed Inbound federation can receive events
fed Inbound federation can receive redacted events fed Inbound federation can receive redacted events
@ -636,6 +651,7 @@ fst Name/topic keys are correct
fau Remote servers cannot set power levels in rooms without existing powerlevels 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 Remote servers should reject attempts by non-creators to set the power levels
fau Inbound federation rejects typing notifications from wrong remote 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 fed Forward extremities remain so even after the next events are populated as outliers
fau Banned servers cannot send events fau Banned servers cannot send events
fau Banned servers cannot /make_join fau Banned servers cannot /make_join
@ -815,6 +831,7 @@ 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 template fails with 400
psh Trying to get push rules with unknown attribute 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 psh Trying to get push rules with unknown rule_id fails with 404
psh Rooms with names are correctly named in pushes
v1s GET /initialSync with non-numeric 'limit' v1s GET /initialSync with non-numeric 'limit'
v1s GET /events with non-numeric 'limit' v1s GET /events with non-numeric 'limit'
v1s GET /events with negative 'limit' v1s GET /events with negative 'limit'
@ -823,7 +840,7 @@ ath Event size limits
syn Check creating invalid filters returns 4xx syn Check creating invalid filters returns 4xx
f,pre New federated private chats get full presence information (SYN-115) f,pre New federated private chats get full presence information (SYN-115)
pre Left room members do not cause problems for presence pre Left room members do not cause problems for presence
crm Rooms can be created with an initial invite list (SYN-205) crm Rooms can be created with an initial invite list (SYN-205) (1 subtests)
typ Typing notifications don't leak typ Typing notifications don't leak
ban Non-present room members cannot ban others ban Non-present room members cannot ban others
psh Getting push rules doesn't corrupt the cache SYN-390 psh Getting push rules doesn't corrupt the cache SYN-390
@ -834,3 +851,16 @@ gst Real user can call /events on another world_readable room (SYN-606)
gst Events come down the correct room 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 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 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

View File

@ -33,6 +33,8 @@ import sys
test_mappings = { test_mappings = {
"nsp": "Non-Spec API", "nsp": "Non-Spec API",
"unk": "Unknown API (no group specified)",
"app": "Application Services API",
"f": "Federation", # flag to mark test involves federation "f": "Federation", # flag to mark test involves federation
"federation_apis": { "federation_apis": {
@ -50,6 +52,7 @@ test_mappings = {
"fpb": "Public Room API", "fpb": "Public Room API",
"fdk": "Device Key APIs", "fdk": "Device Key APIs",
"fed": "Federation API", "fed": "Federation API",
"fsd": "Send-to-Device APIs",
}, },
"client_apis": { "client_apis": {
@ -61,6 +64,8 @@ test_mappings = {
"pro": "Profile", "pro": "Profile",
"dev": "Devices", "dev": "Devices",
"dvk": "Device Keys", "dvk": "Device Keys",
"dkb": "Device Key Backup",
"xsk": "Cross-signing Keys",
"pre": "Presence", "pre": "Presence",
"crm": "Create Room", "crm": "Create Room",
"syn": "Sync API", "syn": "Sync API",
@ -98,7 +103,7 @@ test_mappings = {
"adm": "Server Admin API", "adm": "Server Admin API",
"ign": "Ignore Users", "ign": "Ignore Users",
"udr": "User Directory APIs", "udr": "User Directory APIs",
"app": "Application Services API", "jso": "Enforced canonical JSON",
}, },
} }
@ -156,6 +161,8 @@ def print_stats(header_name, gid_to_tests, gid_to_name, verbose):
total_tests = 0 total_tests = 0
for gid, tests in gid_to_tests.items(): for gid, tests in gid_to_tests.items():
group_total = len(tests) group_total = len(tests)
if group_total == 0:
continue
group_passing = 0 group_passing = 0
test_names_and_marks = [] test_names_and_marks = []
for name, passing in tests.items(): for name, passing in tests.items():
@ -186,7 +193,6 @@ def main(results_tap_path, verbose):
test_name_to_group_id = {} test_name_to_group_id = {}
fed_tests = set() fed_tests = set()
client_tests = set() client_tests = set()
groupless_tests = set()
with open("./are-we-synapse-yet.list", "r") as f: with open("./are-we-synapse-yet.list", "r") as f:
for line in f.readlines(): for line in f.readlines():
test_name = " ".join(line.split(" ")[1:]).strip() test_name = " ".join(line.split(" ")[1:]).strip()
@ -212,8 +218,12 @@ def main(results_tap_path, verbose):
# test_name: OK # test_name: OK
# } # }
}, },
"appservice": {
"app": {},
},
"nonspec": { "nonspec": {
"nsp": {} "nsp": {},
"unk": {}
}, },
} }
with open(results_tap_path, "r") as f: with open(results_tap_path, "r") as f:
@ -224,10 +234,11 @@ def main(results_tap_path, verbose):
name = test_result["name"] name = test_result["name"]
group_id = test_name_to_group_id.get(name) group_id = test_name_to_group_id.get(name)
if not group_id: if not group_id:
groupless_tests.add(name) summary["nonspec"]["unk"][name] = test_result["ok"]
# raise Exception("The test '%s' doesn't have a group" % (name,))
if group_id == "nsp": if group_id == "nsp":
summary["nonspec"]["nsp"][name] = test_result["ok"] summary["nonspec"]["nsp"][name] = test_result["ok"]
elif group_id == "app":
summary["appservice"]["app"][name] = test_result["ok"]
elif group_id in test_mappings["federation_apis"]: elif group_id in test_mappings["federation_apis"]:
group = summary["federation"].get(group_id, {}) group = summary["federation"].get(group_id, {})
group[name] = test_result["ok"] group[name] = test_result["ok"]
@ -243,12 +254,7 @@ def main(results_tap_path, verbose):
print_stats("Non-Spec APIs", summary["nonspec"], test_mappings, verbose) print_stats("Non-Spec APIs", summary["nonspec"], test_mappings, verbose)
print_stats("Client-Server APIs", summary["client"], test_mappings["client_apis"], verbose) print_stats("Client-Server APIs", summary["client"], test_mappings["client_apis"], verbose)
print_stats("Federation APIs", summary["federation"], test_mappings["federation_apis"], verbose) print_stats("Federation APIs", summary["federation"], test_mappings["federation_apis"], verbose)
if verbose: print_stats("Application Services APIs", summary["appservice"], test_mappings, verbose)
print("The following tests don't have a group:")
for name in groupless_tests:
print(" %s" % (name,))
else:
print("%d tests don't have a group" % len(groupless_tests))