Skip to content

Conversation

@nexy7574
Copy link

@nexy7574 nexy7574 commented Dec 22, 2025

Adds a test to prevent regressions fixed by element-hq/synapse#19321.

Reproduce element-hq/synapse#19120

Pull Request Checklist

Signed-off-by: timedout <git@nexy7574.co.uk>
doTestRestrictedRoomsLocalJoinNoCreatorsUsesPowerLevels(t, "12", "restricted")
}

func doTestRestrictedRoomsLocalJoinNoCreatorsUsesPowerLevels(t *testing.T, roomVersion string, joinRule string) {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It looks like the reason other tests are written this way is so that it can be shared with tests/knock_restricted_test.go. I'm guessing we should also have knock_restricted test there.

//
// ref: https://github.com/element-hq/synapse/issues/19120
func TestRestrictedRoomsLocalJoinNoCreatorsUsesPowerLevels(t *testing.T) {
doTestRestrictedRoomsLocalJoinNoCreatorsUsesPowerLevels(t, "12", "restricted")
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should also test with a room version before 12

Comment on lines +450 to +454
// A server will attempt to perform a local join to a room with creators (v12),
// using a creator as the authorising user, but falling back to power levels if
// an appropriate creator cannot be found.
//
// ref: https://github.com/element-hq/synapse/issues/19120
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this is explaining too many specifics of the Synapse implementation. Unless this is explained somewhere in the spec?

Here is an iteration:

Suggested change
// A server will attempt to perform a local join to a room with creators (v12),
// using a creator as the authorising user, but falling back to power levels if
// an appropriate creator cannot be found.
//
// ref: https://github.com/element-hq/synapse/issues/19120
// A homeserver should be able to do a local join (when someone else from the same
// homeserver is already joined to the room) to a room using any local user who has
// invite power levels.
//
// In the test case, there are no local room creators on hs2, so hs2 will need to use
// one of the local people listed in the power levels who can invite. While hs2, could
// do another remote join to get charlie in the room, we assert it was a local join by
// checking the `join_authorised_via_users_server` (homeservers should prefer a local
// join).
//
// This is a regression test for Synapse as it previously only looked for local room
// creators in v12 rooms, https://github.com/element-hq/synapse/issues/19120

Comment on lines +513 to +521
// Ensure the join was authorised by bob. The join should not be
// authorised by alice as hs2 should not have attempted a remote
// join given bob is a local user that can authorise the join.
bob.MustSyncUntil(t, client.SyncReq{}, client.SyncJoinedTo(charlie.UserID, room, func(ev gjson.Result) bool {
must.MatchGJSON(t, ev,
match.JSONKeyEqual("content.join_authorised_via_users_server", bob.UserID),
)
return true
}))
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great comment/assertion 👍

Comment on lines +504 to +508
// Charlie attempts to join the restricted room.
// hs2 should attempt to find a creator to authorise the room join,
// but can't as the only creator is remote. It should then fall back
// to checking the power levels for a user that can authorise the join.
// The end result should be that charlie is allowed to join.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Probably needs a slight adjustment like the main test description comment above.

// an appropriate creator cannot be found.
//
// ref: https://github.com/element-hq/synapse/issues/19120
func TestRestrictedRoomsLocalJoinNoCreatorsUsesPowerLevels(t *testing.T) {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for taking the time to write a test! It looks great overall 🤩

// an appropriate creator cannot be found.
//
// ref: https://github.com/element-hq/synapse/issues/19120
func TestRestrictedRoomsLocalJoinNoCreatorsUsesPowerLevels(t *testing.T) {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've tested to make sure it fails with the latest develop with Synapse and passes with element-hq/synapse#19321

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants