diff options
author | Erik Johnston <erikj@element.io> | 2024-05-30 12:33:48 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-05-30 11:33:48 +0000 |
commit | 4e3868dc46df08e56efbad11b9a583ed4ec699ff (patch) | |
tree | 3a3c1f06edc55ee85c4f3cedc022169a50779b09 /tests/handlers | |
parent | Replaces all usages of `StreamIdGenerator` with `MultiWriterIdGenerator` (#17... (diff) | |
download | synapse-4e3868dc46df08e56efbad11b9a583ed4ec699ff.tar.xz |
Fix deduplicating of membership events to not create unused state groups. (#17164)
We try and deduplicate in two places: 1) really early on, and 2) just before we persist the event. The first case was broken due to it occuring before the profile information was added, and so it thought the event contents were different. The second case did catch it and handle it correctly, however doing so creates a redundant state group leading to bloat. Fixes #3791
Diffstat (limited to 'tests/handlers')
-rw-r--r-- | tests/handlers/test_room_member.py | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/tests/handlers/test_room_member.py b/tests/handlers/test_room_member.py index df43ce581c..213a66ed1a 100644 --- a/tests/handlers/test_room_member.py +++ b/tests/handlers/test_room_member.py @@ -407,3 +407,24 @@ class RoomMemberMasterHandlerTestCase(HomeserverTestCase): self.assertFalse( self.get_success(self.store.did_forget(self.alice, self.room_id)) ) + + def test_deduplicate_joins(self) -> None: + """ + Test that calling /join multiple times does not store a new state group. + """ + + self.helper.join(self.room_id, user=self.bob, tok=self.bob_token) + + sql = "SELECT COUNT(*) FROM state_groups WHERE room_id = ?" + rows = self.get_success( + self.store.db_pool.execute("test_deduplicate_joins", sql, self.room_id) + ) + initial_count = rows[0][0] + + self.helper.join(self.room_id, user=self.bob, tok=self.bob_token) + rows = self.get_success( + self.store.db_pool.execute("test_deduplicate_joins", sql, self.room_id) + ) + new_count = rows[0][0] + + self.assertEqual(initial_count, new_count) |