diff --git a/tests/rest/client/v1/test_events.py b/tests/rest/client/v1/test_events.py
index 852bda408c..2789d51546 100644
--- a/tests/rest/client/v1/test_events.py
+++ b/tests/rest/client/v1/test_events.py
@@ -23,7 +23,7 @@ from tests import unittest
class EventStreamPermissionsTestCase(unittest.HomeserverTestCase):
- """ Tests event streaming (GET /events). """
+ """Tests event streaming (GET /events)."""
servlets = [
events.register_servlets,
diff --git a/tests/rest/client/v1/test_presence.py b/tests/rest/client/v1/test_presence.py
index 409f3949dc..597e4c67de 100644
--- a/tests/rest/client/v1/test_presence.py
+++ b/tests/rest/client/v1/test_presence.py
@@ -24,7 +24,7 @@ from tests import unittest
class PresenceTestCase(unittest.HomeserverTestCase):
- """ Tests presence REST API. """
+ """Tests presence REST API."""
user_id = "@sid:red"
diff --git a/tests/rest/client/v1/test_rooms.py b/tests/rest/client/v1/test_rooms.py
index 5b1096d091..e94566ffd7 100644
--- a/tests/rest/client/v1/test_rooms.py
+++ b/tests/rest/client/v1/test_rooms.py
@@ -64,7 +64,7 @@ class RoomBase(unittest.HomeserverTestCase):
class RoomPermissionsTestCase(RoomBase):
- """ Tests room permissions. """
+ """Tests room permissions."""
user_id = "@sid1:red"
rmcreator_id = "@notme:red"
@@ -377,7 +377,7 @@ class RoomPermissionsTestCase(RoomBase):
class RoomsMemberListTestCase(RoomBase):
- """ Tests /rooms/$room_id/members/list REST events."""
+ """Tests /rooms/$room_id/members/list REST events."""
user_id = "@sid1:red"
@@ -416,7 +416,7 @@ class RoomsMemberListTestCase(RoomBase):
class RoomsCreateTestCase(RoomBase):
- """ Tests /rooms and /rooms/$room_id REST events. """
+ """Tests /rooms and /rooms/$room_id REST events."""
user_id = "@sid1:red"
@@ -502,7 +502,7 @@ class RoomsCreateTestCase(RoomBase):
class RoomTopicTestCase(RoomBase):
- """ Tests /rooms/$room_id/topic REST events. """
+ """Tests /rooms/$room_id/topic REST events."""
user_id = "@sid1:red"
@@ -566,7 +566,7 @@ class RoomTopicTestCase(RoomBase):
class RoomMemberStateTestCase(RoomBase):
- """ Tests /rooms/$room_id/members/$user_id/state REST events. """
+ """Tests /rooms/$room_id/members/$user_id/state REST events."""
user_id = "@sid1:red"
@@ -790,7 +790,7 @@ class RoomJoinRatelimitTestCase(RoomBase):
class RoomMessagesTestCase(RoomBase):
- """ Tests /rooms/$room_id/messages/$user_id/$msg_id REST events. """
+ """Tests /rooms/$room_id/messages/$user_id/$msg_id REST events."""
user_id = "@sid1:red"
@@ -838,7 +838,7 @@ class RoomMessagesTestCase(RoomBase):
class RoomInitialSyncTestCase(RoomBase):
- """ Tests /rooms/$room_id/initialSync. """
+ """Tests /rooms/$room_id/initialSync."""
user_id = "@sid1:red"
@@ -879,7 +879,7 @@ class RoomInitialSyncTestCase(RoomBase):
class RoomMessageListTestCase(RoomBase):
- """ Tests /rooms/$room_id/messages REST events. """
+ """Tests /rooms/$room_id/messages REST events."""
user_id = "@sid1:red"
diff --git a/tests/rest/client/v1/test_typing.py b/tests/rest/client/v1/test_typing.py
index 0aad48a162..44e22ca999 100644
--- a/tests/rest/client/v1/test_typing.py
+++ b/tests/rest/client/v1/test_typing.py
@@ -26,7 +26,7 @@ PATH_PREFIX = "/_matrix/client/api/v1"
class RoomTypingTestCase(unittest.HomeserverTestCase):
- """ Tests /rooms/$room_id/typing/$user_id REST API. """
+ """Tests /rooms/$room_id/typing/$user_id REST API."""
user_id = "@sid:red"
diff --git a/tests/rest/client/v2_alpha/test_sync.py b/tests/rest/client/v2_alpha/test_sync.py
index fdab520c5f..726a22f90c 100644
--- a/tests/rest/client/v2_alpha/test_sync.py
+++ b/tests/rest/client/v2_alpha/test_sync.py
@@ -339,7 +339,7 @@ class SyncKnockTestCase(
self.room_id = self.helper.create_room_as(
self.user_id,
is_public=False,
- room_version=RoomVersions.V7.identifier,
+ room_version="7",
tok=self.tok,
)
@@ -369,7 +369,7 @@ class SyncKnockTestCase(
# Knock on a room
channel = self.make_request(
"POST",
- "/_matrix/client/unstable/xyz.amorgan.knock/%s" % (self.room_id,),
+ "/_matrix/client/r0/knock/%s" % (self.room_id,),
b"{}",
self.knocker_tok,
)
@@ -377,7 +377,7 @@ class SyncKnockTestCase(
# We expect to see the knock event in the stripped room state later
self.expected_room_state[EventTypes.Member] = {
- "content": {"membership": Membership.KNOCK, "displayname": "knocker"},
+ "content": {"membership": "knock", "displayname": "knocker"},
"state_key": "@knocker:test",
}
@@ -390,7 +390,7 @@ class SyncKnockTestCase(
self.assertEqual(channel.code, 200, channel.json_body)
# Extract the stripped room state events from /sync
- knock_entry = channel.json_body["rooms"][Membership.KNOCK]
+ knock_entry = channel.json_body["rooms"]["knock"]
room_state_events = knock_entry[self.room_id]["knock_state"]["events"]
# Validate that the knock membership event came last
@@ -564,3 +564,53 @@ class UnreadMessagesTestCase(unittest.HomeserverTestCase):
# Store the next batch for the next request.
self.next_batch = channel.json_body["next_batch"]
+
+
+class SyncCacheTestCase(unittest.HomeserverTestCase):
+ servlets = [
+ synapse.rest.admin.register_servlets,
+ login.register_servlets,
+ sync.register_servlets,
+ ]
+
+ def test_noop_sync_does_not_tightloop(self):
+ """If the sync times out, we shouldn't cache the result
+
+ Essentially a regression test for #8518.
+ """
+ self.user_id = self.register_user("kermit", "monkey")
+ self.tok = self.login("kermit", "monkey")
+
+ # we should immediately get an initial sync response
+ channel = self.make_request("GET", "/sync", access_token=self.tok)
+ self.assertEqual(channel.code, 200, channel.json_body)
+
+ # now, make an incremental sync request, with a timeout
+ next_batch = channel.json_body["next_batch"]
+ channel = self.make_request(
+ "GET",
+ f"/sync?since={next_batch}&timeout=10000",
+ access_token=self.tok,
+ await_result=False,
+ )
+ # that should block for 10 seconds
+ with self.assertRaises(TimedOutException):
+ channel.await_result(timeout_ms=9900)
+ channel.await_result(timeout_ms=200)
+ self.assertEqual(channel.code, 200, channel.json_body)
+
+ # we expect the next_batch in the result to be the same as before
+ self.assertEqual(channel.json_body["next_batch"], next_batch)
+
+ # another incremental sync should also block.
+ channel = self.make_request(
+ "GET",
+ f"/sync?since={next_batch}&timeout=10000",
+ access_token=self.tok,
+ await_result=False,
+ )
+ # that should block for 10 seconds
+ with self.assertRaises(TimedOutException):
+ channel.await_result(timeout_ms=9900)
+ channel.await_result(timeout_ms=200)
+ self.assertEqual(channel.code, 200, channel.json_body)
|