|
32 | 32 | from synapse.api.constants import EduTypes |
33 | 33 | from synapse.api.errors import AuthError |
34 | 34 | from synapse.federation.transport.server import TransportLayerServer |
35 | | -from synapse.handlers.typing import TypingWriterHandler |
| 35 | +from synapse.handlers.typing import FORGET_TIMEOUT, TypingWriterHandler |
36 | 36 | from synapse.http.federation.matrix_federation_agent import MatrixFederationAgent |
37 | 37 | from synapse.server import HomeServer |
38 | 38 | from synapse.types import JsonDict, Requester, StreamKeyType, UserID, create_requester |
@@ -501,3 +501,54 @@ def test_typing_timeout(self) -> None: |
501 | 501 | } |
502 | 502 | ], |
503 | 503 | ) |
| 504 | + |
| 505 | + def test_prune_typing_replication(self) -> None: |
| 506 | + """Regression test for `get_all_typing_updates` breaking when we prune |
| 507 | + old updates |
| 508 | + """ |
| 509 | + self.room_members = [U_APPLE, U_BANANA] |
| 510 | + |
| 511 | + instance_name = self.hs.get_instance_name() |
| 512 | + |
| 513 | + self.get_success( |
| 514 | + self.handler.started_typing( |
| 515 | + target_user=U_APPLE, |
| 516 | + requester=create_requester(U_APPLE), |
| 517 | + room_id=ROOM_ID, |
| 518 | + timeout=10000, |
| 519 | + ) |
| 520 | + ) |
| 521 | + |
| 522 | + rows, _, _ = self.get_success( |
| 523 | + self.handler.get_all_typing_updates( |
| 524 | + instance_name=instance_name, |
| 525 | + last_id=0, |
| 526 | + current_id=self.handler.get_current_token(), |
| 527 | + limit=100, |
| 528 | + ) |
| 529 | + ) |
| 530 | + self.assertEqual(rows, [(1, [ROOM_ID, [U_APPLE.to_string()]])]) |
| 531 | + |
| 532 | + self.reactor.advance(20000) |
| 533 | + |
| 534 | + rows, _, _ = self.get_success( |
| 535 | + self.handler.get_all_typing_updates( |
| 536 | + instance_name=instance_name, |
| 537 | + last_id=1, |
| 538 | + current_id=self.handler.get_current_token(), |
| 539 | + limit=100, |
| 540 | + ) |
| 541 | + ) |
| 542 | + self.assertEqual(rows, [(2, [ROOM_ID, []])]) |
| 543 | + |
| 544 | + self.reactor.advance(FORGET_TIMEOUT) |
| 545 | + |
| 546 | + rows, _, _ = self.get_success( |
| 547 | + self.handler.get_all_typing_updates( |
| 548 | + instance_name=instance_name, |
| 549 | + last_id=1, |
| 550 | + current_id=self.handler.get_current_token(), |
| 551 | + limit=100, |
| 552 | + ) |
| 553 | + ) |
| 554 | + self.assertEqual(rows, []) |
0 commit comments