diff options
author | Erik Johnston <erik@matrix.org> | 2023-03-29 14:37:06 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-03-29 13:37:06 +0000 |
commit | f0d8f66eaaacfa75bed65bc5d0c602fbc5339c85 (patch) | |
tree | ec056eecace1f460480e0e7334287dc876d82cf4 /tests/rest | |
parent | Revert "Reintroduce membership tables event stream ordering (#15128)" (#15347) (diff) | |
download | synapse-f0d8f66eaaacfa75bed65bc5d0c602fbc5339c85.tar.xz |
Fix registering a device on an account with lots of devices (#15348)
Fixes up #15183
Diffstat (limited to 'tests/rest')
-rw-r--r-- | tests/rest/client/test_register.py | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/tests/rest/client/test_register.py b/tests/rest/client/test_register.py index b228dba861..7ae84e3139 100644 --- a/tests/rest/client/test_register.py +++ b/tests/rest/client/test_register.py @@ -794,6 +794,53 @@ class RegisterRestServletTestCase(unittest.HomeserverTestCase): ApprovalNoticeMedium.NONE, channel.json_body["approval_notice_medium"] ) + def test_check_stale_devices_get_pruned(self) -> None: + """Check that if a user has some stale devices we log them out when they + log in a new device.""" + + # Register some devices, but not too many that we go over the threshold + # where we prune more aggressively. + user_id = self.register_user("user", "pass") + for _ in range(0, 50): + self.login(user_id, "pass") + + store = self.hs.get_datastores().main + + res = self.get_success(store.get_devices_by_user(user_id)) + self.assertEqual(len(res), 50) + + # Advance time so that the above devices are considered "old". + self.reactor.advance(30 * 24 * 60 * 60 * 1000) + + self.login(user_id, "pass") + + self.reactor.pump([60] * 10) # Ensure background job runs + + # We expect all old devices to have been logged out + res = self.get_success(store.get_devices_by_user(user_id)) + self.assertEqual(len(res), 1) + + def test_check_recent_devices_get_pruned(self) -> None: + """Check that if a user has many devices we log out the last oldest + ones. + + Note: this is similar to above, except if we lots of devices we prune + devices even if they're not old. + """ + + # Register a lot of devices in a short amount of time + user_id = self.register_user("user", "pass") + for _ in range(0, 100): + self.login(user_id, "pass") + self.reactor.advance(100) + + store = self.hs.get_datastores().main + + # We keep up to 50 devices that have been used in the last week, plus + # the device that was last logged in. + res = self.get_success(store.get_devices_by_user(user_id)) + self.assertEqual(len(res), 51) + class AccountValidityTestCase(unittest.HomeserverTestCase): servlets = [ |