1818from twisted .internet .defer import Deferred
1919from twisted .internet .testing import MemoryReactor
2020
21+ from synapse .logging .context import PreserveLoggingContext , make_deferred_yieldable
2122from synapse .server import HomeServer
2223from synapse .util .background_queue import BackgroundQueue
2324from synapse .util .clock import Clock
2425
25- from tests .unittest import HomeserverTestCase
26+ from tests .unittest import HomeserverTestCase , logcontext_clean
2627
2728
2829class BackgroundQueueTests (HomeserverTestCase ):
@@ -38,11 +39,14 @@ def prepare(
3839 timeout_ms = 1000 ,
3940 )
4041
42+ @logcontext_clean
4143 def test_simple_call (self ) -> None :
4244 """Test that items added to the queue are processed."""
4345 # Register a deferred to be the return value of the callback.
4446 callback_result_deferred : Deferred [None ] = Deferred ()
45- self ._process_item_mock .side_effect = callback_result_deferred
47+ self ._process_item_mock .side_effect = lambda _ : make_deferred_yieldable (
48+ callback_result_deferred
49+ )
4650
4751 # Adding an item should cause the callback to be invoked.
4852 self .queue .add (1 )
@@ -57,16 +61,20 @@ def test_simple_call(self) -> None:
5761
5862 # Once the first callback completes, the second item should be
5963 # processed.
60- callback_result_deferred .callback (None )
64+ with PreserveLoggingContext ():
65+ callback_result_deferred .callback (None )
6166 self ._process_item_mock .assert_called_once_with (2 )
6267
68+ @logcontext_clean
6369 def test_timeout (self ) -> None :
6470 """Test that the background process wakes up if its idle, and that it
6571 times out after being idle."""
6672
6773 # Register a deferred to be the return value of the callback.
6874 callback_result_deferred : Deferred [None ] = Deferred ()
69- self ._process_item_mock .side_effect = callback_result_deferred
75+ self ._process_item_mock .side_effect = lambda _ : make_deferred_yieldable (
76+ callback_result_deferred
77+ )
7078
7179 # Adding an item should cause the callback to be invoked.
7280 self .queue .add (1 )
@@ -75,7 +83,8 @@ def test_timeout(self) -> None:
7583 self ._process_item_mock .reset_mock ()
7684
7785 # Let the callback complete.
78- callback_result_deferred .callback (None )
86+ with PreserveLoggingContext ():
87+ callback_result_deferred .callback (None )
7988
8089 # Advance the clock by less than the timeout, and add another item.
8190 self .reactor .advance (0.5 )
@@ -84,12 +93,15 @@ def test_timeout(self) -> None:
8493
8594 # The callback should be invoked again.
8695 callback_result_deferred = Deferred ()
87- self ._process_item_mock .side_effect = callback_result_deferred
96+ self ._process_item_mock .side_effect = lambda _ : make_deferred_yieldable (
97+ callback_result_deferred
98+ )
8899 self ._process_item_mock .assert_called_once_with (2 )
89100 self ._process_item_mock .reset_mock ()
90101
91102 # Let the callback complete.
92- callback_result_deferred .callback (None )
103+ with PreserveLoggingContext ():
104+ callback_result_deferred .callback (None )
93105
94106 # Advance the clock by more than the timeout.
95107 self .reactor .advance (1.5 )
0 commit comments