State-reset and security mitigations.
Upgrade Ruma to present. The following are intentionally benign for activation in a later commit: - Hydra backports not default. - Room version 12 not default. - Room version 12 not listed as stable. Do not enable them manually or you can brick your database. Signed-off-by: Jason Volk <jason@zemos.net>
This commit is contained in:
56
src/core/tests/it/resolve/snapshot_tests.rs
Normal file
56
src/core/tests/it/resolve/snapshot_tests.rs
Normal file
@@ -0,0 +1,56 @@
|
||||
//! Snapshot tests.
|
||||
|
||||
// Test the minimal set of events required to create a room with the
|
||||
// "private_chat" preset.
|
||||
snapshot_test!(minimal_private_chat, ["bootstrap-private-chat.json"]);
|
||||
|
||||
// Start with a private room, then transition its join rules to restricted, then
|
||||
// to public. The events in the second file are tied topologically, so they must
|
||||
// have the tiebreaking algorithm applied. The ordering should be decided by
|
||||
// the `origin_server_ts` fields of these events, not the `event_id` fields. The
|
||||
// power levels of these events are equivalent, so they don't really matter.
|
||||
snapshot_test!(origin_server_ts_tiebreak, [
|
||||
"bootstrap-private-chat.json",
|
||||
"origin-server-ts-tiebreak.json"
|
||||
],);
|
||||
|
||||
// Test that state res v2.0 is implemented starting from the unconflicted set,
|
||||
// and NOT the empty set, leading to there being no join rules state.
|
||||
//
|
||||
// This example comes directly from the "Problem A" section of MSC4297.
|
||||
snapshot_test_contrived_states!(
|
||||
msc4297_problem_a_state_res_v2_0,
|
||||
["MSC4297-problem-A/pdus-v11.json"],
|
||||
["MSC4297-problem-A/state-bob.json", "MSC4297-problem-A/state-charlie.json"]
|
||||
);
|
||||
|
||||
// Test that state res v2.1 is implemented starting from the empty set, and NOT
|
||||
// the unconflicted set.
|
||||
//
|
||||
// This example comes directly from the "Problem A" section of MSC4297.
|
||||
snapshot_test_contrived_states!(
|
||||
msc4297_problem_a_state_res_v2_1,
|
||||
["MSC4297-problem-A/pdus-hydra.json"],
|
||||
["MSC4297-problem-A/state-bob.json", "MSC4297-problem-A/state-charlie.json"]
|
||||
);
|
||||
|
||||
// Test that state res v2.0 does NOT consider the conflicted state subgraph as
|
||||
// part of the full conflicted state set, leading to the state resetting to the
|
||||
// first power levels event.
|
||||
//
|
||||
// This example comes directly from the "Problem B" section of MSC4297.
|
||||
snapshot_test_contrived_states!(
|
||||
msc4297_problem_b_state_res_v2_0,
|
||||
["MSC4297-problem-B/pdus-v11.json"],
|
||||
["MSC4297-problem-B/state-eve.json", "MSC4297-problem-B/state-zara.json"]
|
||||
);
|
||||
|
||||
// Test that state res v2.1 considers the conflicted state subgraph as part of
|
||||
// the full conflicted state set.
|
||||
//
|
||||
// This example comes directly from the "Problem B" section of MSC4297.
|
||||
snapshot_test_contrived_states!(
|
||||
msc4297_problem_b_state_res_v2_1,
|
||||
["MSC4297-problem-B/pdus-hydra.json"],
|
||||
["MSC4297-problem-B/state-eve.json", "MSC4297-problem-B/state-zara.json"]
|
||||
);
|
||||
@@ -0,0 +1,58 @@
|
||||
---
|
||||
source: crates/ruma-state-res/tests/it/resolve/snapshot_tests.rs
|
||||
description: Resolved state
|
||||
---
|
||||
[
|
||||
{
|
||||
"kind": "m.room.create",
|
||||
"state_key": "",
|
||||
"event_id": "$00-m-room-create",
|
||||
"content": {
|
||||
"creator": "@alice:example.com",
|
||||
"room_version": "10"
|
||||
}
|
||||
},
|
||||
{
|
||||
"kind": "m.room.guest_access",
|
||||
"state_key": "",
|
||||
"event_id": "$00-m-room-guest_access",
|
||||
"content": {
|
||||
"guest_access": "can_join"
|
||||
}
|
||||
},
|
||||
{
|
||||
"kind": "m.room.history_visibility",
|
||||
"state_key": "",
|
||||
"event_id": "$00-m-room-history_visibility",
|
||||
"content": {
|
||||
"history_visibility": "shared"
|
||||
}
|
||||
},
|
||||
{
|
||||
"kind": "m.room.join_rules",
|
||||
"state_key": "",
|
||||
"event_id": "$00-m-room-join_rules",
|
||||
"content": {
|
||||
"join_rule": "invite"
|
||||
}
|
||||
},
|
||||
{
|
||||
"kind": "m.room.member",
|
||||
"state_key": "@alice:example.com",
|
||||
"event_id": "$00-m-room-member-join-alice",
|
||||
"content": {
|
||||
"displayname": "alice",
|
||||
"membership": "join"
|
||||
}
|
||||
},
|
||||
{
|
||||
"kind": "m.room.power_levels",
|
||||
"state_key": "",
|
||||
"event_id": "$00-m-room-power_levels",
|
||||
"content": {
|
||||
"users": {
|
||||
"@alice:example.com": 100
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,51 @@
|
||||
---
|
||||
source: crates/ruma-state-res/tests/it/resolve/snapshot_tests.rs
|
||||
description: Resolved state
|
||||
---
|
||||
[
|
||||
{
|
||||
"kind": "m.room.create",
|
||||
"state_key": "",
|
||||
"event_id": "$00-m-room-create",
|
||||
"content": {
|
||||
"room_version": "11"
|
||||
}
|
||||
},
|
||||
{
|
||||
"kind": "m.room.member",
|
||||
"state_key": "@alice:example.com",
|
||||
"event_id": "$01-m-room-member-leave-alice",
|
||||
"content": {
|
||||
"displayname": "alice",
|
||||
"membership": "leave"
|
||||
}
|
||||
},
|
||||
{
|
||||
"kind": "m.room.member",
|
||||
"state_key": "@bob:example.com",
|
||||
"event_id": "$01-m-room-member-change-display-name-bob",
|
||||
"content": {
|
||||
"displayname": "bob++",
|
||||
"membership": "join"
|
||||
}
|
||||
},
|
||||
{
|
||||
"kind": "m.room.member",
|
||||
"state_key": "@charlie:example.com",
|
||||
"event_id": "$01-m-room-member-change-display-name-charlie",
|
||||
"content": {
|
||||
"displayname": "charlie++",
|
||||
"membership": "join"
|
||||
}
|
||||
},
|
||||
{
|
||||
"kind": "m.room.power_levels",
|
||||
"state_key": "",
|
||||
"event_id": "$00-m-room-power_levels",
|
||||
"content": {
|
||||
"users": {
|
||||
"@alice:example.com": 100
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,55 @@
|
||||
---
|
||||
source: crates/ruma-state-res/tests/it/resolve/snapshot_tests.rs
|
||||
description: Resolved state
|
||||
---
|
||||
[
|
||||
{
|
||||
"kind": "m.room.create",
|
||||
"state_key": "",
|
||||
"event_id": "$00-m-room-create",
|
||||
"content": {
|
||||
"room_version": "12"
|
||||
}
|
||||
},
|
||||
{
|
||||
"kind": "m.room.join_rules",
|
||||
"state_key": "",
|
||||
"event_id": "$01-m-room-join_rules",
|
||||
"content": {
|
||||
"join_rule": "invite"
|
||||
}
|
||||
},
|
||||
{
|
||||
"kind": "m.room.member",
|
||||
"state_key": "@alice:example.com",
|
||||
"event_id": "$01-m-room-member-leave-alice",
|
||||
"content": {
|
||||
"displayname": "alice",
|
||||
"membership": "leave"
|
||||
}
|
||||
},
|
||||
{
|
||||
"kind": "m.room.member",
|
||||
"state_key": "@bob:example.com",
|
||||
"event_id": "$01-m-room-member-change-display-name-bob",
|
||||
"content": {
|
||||
"displayname": "bob++",
|
||||
"membership": "join"
|
||||
}
|
||||
},
|
||||
{
|
||||
"kind": "m.room.member",
|
||||
"state_key": "@charlie:example.com",
|
||||
"event_id": "$01-m-room-member-change-display-name-charlie",
|
||||
"content": {
|
||||
"displayname": "charlie++",
|
||||
"membership": "join"
|
||||
}
|
||||
},
|
||||
{
|
||||
"kind": "m.room.power_levels",
|
||||
"state_key": "",
|
||||
"event_id": "$00-m-room-power_levels",
|
||||
"content": {}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,77 @@
|
||||
---
|
||||
source: crates/ruma-state-res/tests/it/resolve/snapshot_tests.rs
|
||||
description: Resolved state
|
||||
---
|
||||
[
|
||||
{
|
||||
"kind": "m.room.create",
|
||||
"state_key": "",
|
||||
"event_id": "$00-m-room-create",
|
||||
"content": {
|
||||
"room_version": "11"
|
||||
}
|
||||
},
|
||||
{
|
||||
"kind": "m.room.join_rules",
|
||||
"state_key": "",
|
||||
"event_id": "$00-m-room-join_rules",
|
||||
"content": {
|
||||
"join_rule": "public"
|
||||
}
|
||||
},
|
||||
{
|
||||
"kind": "m.room.member",
|
||||
"state_key": "@alice:example.com",
|
||||
"event_id": "$00-m-room-member-join-alice",
|
||||
"content": {
|
||||
"displayname": "alice",
|
||||
"membership": "join"
|
||||
}
|
||||
},
|
||||
{
|
||||
"kind": "m.room.member",
|
||||
"state_key": "@bob:example.com",
|
||||
"event_id": "$00-m-room-member-join-bob",
|
||||
"content": {
|
||||
"displayname": "bob",
|
||||
"membership": "join"
|
||||
}
|
||||
},
|
||||
{
|
||||
"kind": "m.room.member",
|
||||
"state_key": "@charlie:example.com",
|
||||
"event_id": "$00-m-room-member-join-charlie",
|
||||
"content": {
|
||||
"displayname": "charlie",
|
||||
"membership": "join"
|
||||
}
|
||||
},
|
||||
{
|
||||
"kind": "m.room.member",
|
||||
"state_key": "@eve:example.com",
|
||||
"event_id": "$01-m-room-member-change-display-name-eve",
|
||||
"content": {
|
||||
"displayname": "eve++",
|
||||
"membership": "join"
|
||||
}
|
||||
},
|
||||
{
|
||||
"kind": "m.room.member",
|
||||
"state_key": "@zara:example.com",
|
||||
"event_id": "$00-m-room-member-join-zara",
|
||||
"content": {
|
||||
"displayname": "zara",
|
||||
"membership": "join"
|
||||
}
|
||||
},
|
||||
{
|
||||
"kind": "m.room.power_levels",
|
||||
"state_key": "",
|
||||
"event_id": "$00-m-room-power_levels",
|
||||
"content": {
|
||||
"users": {
|
||||
"@alice:example.com": 100
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,78 @@
|
||||
---
|
||||
source: crates/ruma-state-res/tests/it/resolve/snapshot_tests.rs
|
||||
description: Resolved state
|
||||
---
|
||||
[
|
||||
{
|
||||
"kind": "m.room.create",
|
||||
"state_key": "",
|
||||
"event_id": "$00-m-room-create",
|
||||
"content": {
|
||||
"room_version": "12"
|
||||
}
|
||||
},
|
||||
{
|
||||
"kind": "m.room.join_rules",
|
||||
"state_key": "",
|
||||
"event_id": "$00-m-room-join_rules",
|
||||
"content": {
|
||||
"join_rule": "public"
|
||||
}
|
||||
},
|
||||
{
|
||||
"kind": "m.room.member",
|
||||
"state_key": "@alice:example.com",
|
||||
"event_id": "$00-m-room-member-join-alice",
|
||||
"content": {
|
||||
"displayname": "alice",
|
||||
"membership": "join"
|
||||
}
|
||||
},
|
||||
{
|
||||
"kind": "m.room.member",
|
||||
"state_key": "@bob:example.com",
|
||||
"event_id": "$00-m-room-member-join-bob",
|
||||
"content": {
|
||||
"displayname": "bob",
|
||||
"membership": "join"
|
||||
}
|
||||
},
|
||||
{
|
||||
"kind": "m.room.member",
|
||||
"state_key": "@charlie:example.com",
|
||||
"event_id": "$00-m-room-member-join-charlie",
|
||||
"content": {
|
||||
"displayname": "charlie",
|
||||
"membership": "join"
|
||||
}
|
||||
},
|
||||
{
|
||||
"kind": "m.room.member",
|
||||
"state_key": "@eve:example.com",
|
||||
"event_id": "$01-m-room-member-change-display-name-eve",
|
||||
"content": {
|
||||
"displayname": "eve++",
|
||||
"membership": "join"
|
||||
}
|
||||
},
|
||||
{
|
||||
"kind": "m.room.member",
|
||||
"state_key": "@zara:example.com",
|
||||
"event_id": "$00-m-room-member-join-zara",
|
||||
"content": {
|
||||
"displayname": "zara",
|
||||
"membership": "join"
|
||||
}
|
||||
},
|
||||
{
|
||||
"kind": "m.room.power_levels",
|
||||
"state_key": "",
|
||||
"event_id": "$02-m-room-power_levels",
|
||||
"content": {
|
||||
"users": {
|
||||
"@bob:example.com": 50,
|
||||
"@charlie:example.com": 50
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,58 @@
|
||||
---
|
||||
source: crates/ruma-state-res/tests/it/resolve/snapshot_tests.rs
|
||||
description: Resolved state
|
||||
---
|
||||
[
|
||||
{
|
||||
"kind": "m.room.create",
|
||||
"state_key": "",
|
||||
"event_id": "$00-m-room-create",
|
||||
"content": {
|
||||
"creator": "@alice:example.com",
|
||||
"room_version": "10"
|
||||
}
|
||||
},
|
||||
{
|
||||
"kind": "m.room.guest_access",
|
||||
"state_key": "",
|
||||
"event_id": "$00-m-room-guest_access",
|
||||
"content": {
|
||||
"guest_access": "can_join"
|
||||
}
|
||||
},
|
||||
{
|
||||
"kind": "m.room.history_visibility",
|
||||
"state_key": "",
|
||||
"event_id": "$00-m-room-history_visibility",
|
||||
"content": {
|
||||
"history_visibility": "shared"
|
||||
}
|
||||
},
|
||||
{
|
||||
"kind": "m.room.join_rules",
|
||||
"state_key": "",
|
||||
"event_id": "$01-m-room-join_rules",
|
||||
"content": {
|
||||
"join_rule": "public"
|
||||
}
|
||||
},
|
||||
{
|
||||
"kind": "m.room.member",
|
||||
"state_key": "@alice:example.com",
|
||||
"event_id": "$00-m-room-member-join-alice",
|
||||
"content": {
|
||||
"displayname": "alice",
|
||||
"membership": "join"
|
||||
}
|
||||
},
|
||||
{
|
||||
"kind": "m.room.power_levels",
|
||||
"state_key": "",
|
||||
"event_id": "$00-m-room-power_levels",
|
||||
"content": {
|
||||
"users": {
|
||||
"@alice:example.com": 100
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
Reference in New Issue
Block a user