mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2025-12-15 08:04:50 -05:00
Fix presence timeouts when synchrotron restarts. (#6212)
* Fix presence timeouts when synchrotron restarts. Handling timeouts would fail if there was an external process that had timed out, e.g. a synchrotron restarting. This was due to a couple of variable name typoes. Fixes #3715.
This commit is contained in:
parent
6fb0a3da07
commit
5859a5c569
4 changed files with 50 additions and 5 deletions
|
|
@ -22,6 +22,7 @@ from synapse.api.constants import EventTypes, Membership, PresenceState
|
|||
from synapse.events import room_version_to_event_format
|
||||
from synapse.events.builder import EventBuilder
|
||||
from synapse.handlers.presence import (
|
||||
EXTERNAL_PROCESS_EXPIRY,
|
||||
FEDERATION_PING_INTERVAL,
|
||||
FEDERATION_TIMEOUT,
|
||||
IDLE_TIMER,
|
||||
|
|
@ -413,6 +414,44 @@ class PresenceTimeoutTestCase(unittest.TestCase):
|
|||
self.assertEquals(state, new_state)
|
||||
|
||||
|
||||
class PresenceHandlerTestCase(unittest.HomeserverTestCase):
|
||||
def prepare(self, reactor, clock, hs):
|
||||
self.presence_handler = hs.get_presence_handler()
|
||||
self.clock = hs.get_clock()
|
||||
|
||||
def test_external_process_timeout(self):
|
||||
"""Test that if an external process doesn't update the records for a while
|
||||
we time out their syncing users presence.
|
||||
"""
|
||||
process_id = 1
|
||||
user_id = "@test:server"
|
||||
|
||||
# Notify handler that a user is now syncing.
|
||||
self.get_success(
|
||||
self.presence_handler.update_external_syncs_row(
|
||||
process_id, user_id, True, self.clock.time_msec()
|
||||
)
|
||||
)
|
||||
|
||||
# Check that if we wait a while without telling the handler the user has
|
||||
# stopped syncing that their presence state doesn't get timed out.
|
||||
self.reactor.advance(EXTERNAL_PROCESS_EXPIRY / 2)
|
||||
|
||||
state = self.get_success(
|
||||
self.presence_handler.get_state(UserID.from_string(user_id))
|
||||
)
|
||||
self.assertEqual(state.state, PresenceState.ONLINE)
|
||||
|
||||
# Check that if the external process timeout fires, then the syncing
|
||||
# user gets timed out
|
||||
self.reactor.advance(EXTERNAL_PROCESS_EXPIRY)
|
||||
|
||||
state = self.get_success(
|
||||
self.presence_handler.get_state(UserID.from_string(user_id))
|
||||
)
|
||||
self.assertEqual(state.state, PresenceState.OFFLINE)
|
||||
|
||||
|
||||
class PresenceJoinTestCase(unittest.HomeserverTestCase):
|
||||
"""Tests remote servers get told about presence of users in the room when
|
||||
they join and when new local users join.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue