diff --git a/tests/handlers/test_e2e_keys.py b/tests/handlers/test_e2e_keys.py
index 0e6352ff4b..8a3dfdcf75 100644
--- a/tests/handlers/test_e2e_keys.py
+++ b/tests/handlers/test_e2e_keys.py
@@ -43,9 +43,7 @@ from tests.unittest import override_config
class E2eKeysHandlerTestCase(unittest.HomeserverTestCase):
def make_homeserver(self, reactor: MemoryReactor, clock: Clock) -> HomeServer:
self.appservice_api = mock.AsyncMock()
- return self.setup_test_homeserver(
- federation_client=mock.Mock(), application_service_api=self.appservice_api
- )
+ return self.setup_test_homeserver(application_service_api=self.appservice_api)
def prepare(self, reactor: MemoryReactor, clock: Clock, hs: HomeServer) -> None:
self.handler = hs.get_e2e_keys_handler()
@@ -1224,6 +1222,61 @@ class E2eKeysHandlerTestCase(unittest.HomeserverTestCase):
},
)
+ def test_query_devices_remote_down(self) -> None:
+ """Tests that querying keys for a remote user on an unreachable server returns
+ results in the "failures" property
+ """
+
+ remote_user_id = "@test:other"
+ local_user_id = "@test:test"
+
+ # The backoff code treats time zero as special
+ self.reactor.advance(5)
+
+ self.hs.get_federation_http_client().agent.request = mock.AsyncMock( # type: ignore[method-assign]
+ side_effect=Exception("boop")
+ )
+
+ e2e_handler = self.hs.get_e2e_keys_handler()
+
+ query_result = self.get_success(
+ e2e_handler.query_devices(
+ {
+ "device_keys": {remote_user_id: []},
+ },
+ timeout=10,
+ from_user_id=local_user_id,
+ from_device_id="some_device_id",
+ )
+ )
+
+ self.assertEqual(
+ query_result["failures"],
+ {
+ "other": {
+ "message": "Failed to send request: Exception: boop",
+ "status": 503,
+ }
+ },
+ )
+
+ # Do it again: we should hit the backoff
+ query_result = self.get_success(
+ e2e_handler.query_devices(
+ {
+ "device_keys": {remote_user_id: []},
+ },
+ timeout=10,
+ from_user_id=local_user_id,
+ from_device_id="some_device_id",
+ )
+ )
+
+ self.assertEqual(
+ query_result["failures"],
+ {"other": {"message": "Not ready for retry", "status": 503}},
+ )
+
@parameterized.expand(
[
# The remote homeserver's response indicates that this user has 0/1/2 devices.
|