diff --git a/tests/handlers/test_appservice.py b/tests/handlers/test_appservice.py
index a2c541317c..06cb1dd4cf 100644
--- a/tests/handlers/test_appservice.py
+++ b/tests/handlers/test_appservice.py
@@ -27,10 +27,11 @@ class AppServiceHandlerTestCase(unittest.TestCase):
def setUp(self):
self.mock_store = Mock()
self.mock_as_api = Mock()
+ self.mock_scheduler = Mock()
hs = Mock()
hs.get_datastore = Mock(return_value=self.mock_store)
self.handler = ApplicationServicesHandler(
- hs, self.mock_as_api
+ hs, self.mock_as_api, self.mock_scheduler
)
@defer.inlineCallbacks
@@ -52,7 +53,9 @@ class AppServiceHandlerTestCase(unittest.TestCase):
)
self.mock_as_api.push = Mock()
yield self.handler.notify_interested_services(event)
- self.mock_as_api.push.assert_called_once_with(interested_service, event)
+ self.mock_scheduler.submit_event_for_as.assert_called_once_with(
+ interested_service, event
+ )
@defer.inlineCallbacks
def test_query_room_alias_exists(self):
diff --git a/tests/handlers/test_federation.py b/tests/handlers/test_federation.py
index c13ade3286..08d2404b6c 100644
--- a/tests/handlers/test_federation.py
+++ b/tests/handlers/test_federation.py
@@ -87,6 +87,15 @@ class FederationTestCase(unittest.TestCase):
self.datastore.get_room.return_value = defer.succeed(True)
self.auth.check_host_in_room.return_value = defer.succeed(True)
+ retry_timings_res = {
+ "destination": "",
+ "retry_last_ts": 0,
+ "retry_interval": 0,
+ }
+ self.datastore.get_destination_retry_timings.return_value = (
+ defer.succeed(retry_timings_res)
+ )
+
def have_events(event_ids):
return defer.succeed({})
self.datastore.have_events.side_effect = have_events
diff --git a/tests/handlers/test_presence.py b/tests/handlers/test_presence.py
index 04eba4289e..70147b017e 100644
--- a/tests/handlers/test_presence.py
+++ b/tests/handlers/test_presence.py
@@ -194,8 +194,13 @@ class MockedDatastorePresenceTestCase(PresenceTestCase):
return datastore
def setUp_datastore_federation_mocks(self, datastore):
+ retry_timings_res = {
+ "destination": "",
+ "retry_last_ts": 0,
+ "retry_interval": 0,
+ }
datastore.get_destination_retry_timings.return_value = (
- defer.succeed(DestinationsTable.EntryType("", 0, 0))
+ defer.succeed(retry_timings_res)
)
def get_received_txn_response(*args):
@@ -879,6 +884,71 @@ class PresencePushTestCase(MockedDatastorePresenceTestCase):
)
@defer.inlineCallbacks
+ def test_recv_remote_offline(self):
+ """ Various tests relating to SYN-261 """
+ potato_set = self.handler._remote_recvmap.setdefault(self.u_potato,
+ set())
+ potato_set.add(self.u_apple)
+
+ self.room_members = [self.u_banana, self.u_potato]
+
+ self.assertEquals(self.event_source.get_current_key(), 0)
+
+ yield self.mock_federation_resource.trigger("PUT",
+ "/_matrix/federation/v1/send/1000000/",
+ _make_edu_json("elsewhere", "m.presence",
+ content={
+ "push": [
+ {"user_id": "@potato:remote",
+ "presence": "offline"},
+ ],
+ }
+ )
+ )
+
+ self.assertEquals(self.event_source.get_current_key(), 1)
+
+ (events, _) = yield self.event_source.get_new_events_for_user(
+ self.u_apple, 0, None
+ )
+ self.assertEquals(events,
+ [
+ {"type": "m.presence",
+ "content": {
+ "user_id": "@potato:remote",
+ "presence": OFFLINE,
+ }}
+ ]
+ )
+
+ yield self.mock_federation_resource.trigger("PUT",
+ "/_matrix/federation/v1/send/1000001/",
+ _make_edu_json("elsewhere", "m.presence",
+ content={
+ "push": [
+ {"user_id": "@potato:remote",
+ "presence": "online"},
+ ],
+ }
+ )
+ )
+
+ self.assertEquals(self.event_source.get_current_key(), 2)
+
+ (events, _) = yield self.event_source.get_new_events_for_user(
+ self.u_apple, 0, None
+ )
+ self.assertEquals(events,
+ [
+ {"type": "m.presence",
+ "content": {
+ "user_id": "@potato:remote",
+ "presence": ONLINE,
+ }}
+ ]
+ )
+
+ @defer.inlineCallbacks
def test_join_room_local(self):
self.room_members = [self.u_apple, self.u_banana]
diff --git a/tests/handlers/test_typing.py b/tests/handlers/test_typing.py
index bf34b7ccbd..b318d4944a 100644
--- a/tests/handlers/test_typing.py
+++ b/tests/handlers/test_typing.py
@@ -96,8 +96,13 @@ class TypingNotificationsTestCase(unittest.TestCase):
self.event_source = hs.get_event_sources().sources["typing"]
self.datastore = hs.get_datastore()
+ retry_timings_res = {
+ "destination": "",
+ "retry_last_ts": 0,
+ "retry_interval": 0,
+ }
self.datastore.get_destination_retry_timings.return_value = (
- defer.succeed(DestinationsTable.EntryType("", 0, 0))
+ defer.succeed(retry_timings_res)
)
def get_received_txn_response(*args):
@@ -126,6 +131,13 @@ class TypingNotificationsTestCase(unittest.TestCase):
return defer.succeed([])
self.room_member_handler.get_room_members = get_room_members
+ def get_joined_rooms_for_user(user):
+ if user in self.room_members:
+ return defer.succeed([self.room_id])
+ else:
+ return defer.succeed([])
+ self.room_member_handler.get_joined_rooms_for_user = get_joined_rooms_for_user
+
@defer.inlineCallbacks
def fetch_room_distributions_into(room_id, localusers=None,
remotedomains=None, ignore_user=None):
@@ -175,8 +187,9 @@ class TypingNotificationsTestCase(unittest.TestCase):
])
self.assertEquals(self.event_source.get_current_key(), 1)
+ events = yield self.event_source.get_new_events_for_user(self.u_apple, 0, None)
self.assertEquals(
- self.event_source.get_new_events_for_user(self.u_apple, 0, None)[0],
+ events[0],
[
{"type": "m.typing",
"room_id": self.room_id,
@@ -237,8 +250,9 @@ class TypingNotificationsTestCase(unittest.TestCase):
])
self.assertEquals(self.event_source.get_current_key(), 1)
+ events = yield self.event_source.get_new_events_for_user(self.u_apple, 0, None)
self.assertEquals(
- self.event_source.get_new_events_for_user(self.u_apple, 0, None)[0],
+ events[0],
[
{"type": "m.typing",
"room_id": self.room_id,
@@ -292,8 +306,9 @@ class TypingNotificationsTestCase(unittest.TestCase):
yield put_json.await_calls()
self.assertEquals(self.event_source.get_current_key(), 1)
+ events = yield self.event_source.get_new_events_for_user(self.u_apple, 0, None)
self.assertEquals(
- self.event_source.get_new_events_for_user(self.u_apple, 0, None)[0],
+ events[0],
[
{"type": "m.typing",
"room_id": self.room_id,
@@ -322,8 +337,9 @@ class TypingNotificationsTestCase(unittest.TestCase):
self.on_new_user_event.reset_mock()
self.assertEquals(self.event_source.get_current_key(), 1)
+ events = yield self.event_source.get_new_events_for_user(self.u_apple, 0, None)
self.assertEquals(
- self.event_source.get_new_events_for_user(self.u_apple, 0, None)[0],
+ events[0],
[
{"type": "m.typing",
"room_id": self.room_id,
@@ -340,8 +356,9 @@ class TypingNotificationsTestCase(unittest.TestCase):
])
self.assertEquals(self.event_source.get_current_key(), 2)
+ events = yield self.event_source.get_new_events_for_user(self.u_apple, 1, None)
self.assertEquals(
- self.event_source.get_new_events_for_user(self.u_apple, 1, None)[0],
+ events[0],
[
{"type": "m.typing",
"room_id": self.room_id,
@@ -366,8 +383,9 @@ class TypingNotificationsTestCase(unittest.TestCase):
self.on_new_user_event.reset_mock()
self.assertEquals(self.event_source.get_current_key(), 3)
+ events = yield self.event_source.get_new_events_for_user(self.u_apple, 0, None)
self.assertEquals(
- self.event_source.get_new_events_for_user(self.u_apple, 0, None)[0],
+ events[0],
[
{"type": "m.typing",
"room_id": self.room_id,
|