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
23+ from synapse .util .async_helpers import DoneAwaitable
2224from synapse .util .background_queue import BackgroundQueue
2325from synapse .util .clock import Clock
2426
25- from tests .unittest import HomeserverTestCase
27+ from tests .unittest import HomeserverTestCase , logcontext_clean
2628
2729
2830class BackgroundQueueTests (HomeserverTestCase ):
@@ -38,11 +40,14 @@ def prepare(
3840 timeout_ms = 1000 ,
3941 )
4042
43+ @logcontext_clean
4144 def test_simple_call (self ) -> None :
4245 """Test that items added to the queue are processed."""
4346 # Register a deferred to be the return value of the callback.
4447 callback_result_deferred : Deferred [None ] = Deferred ()
45- self ._process_item_mock .side_effect = callback_result_deferred
48+ self ._process_item_mock .side_effect = lambda _ : make_deferred_yieldable (
49+ callback_result_deferred
50+ )
4651
4752 # Adding an item should cause the callback to be invoked.
4853 self .queue .add (1 )
@@ -57,16 +62,20 @@ def test_simple_call(self) -> None:
5762
5863 # Once the first callback completes, the second item should be
5964 # processed.
60- callback_result_deferred .callback (None )
65+ with PreserveLoggingContext ():
66+ callback_result_deferred .callback (None )
6167 self ._process_item_mock .assert_called_once_with (2 )
6268
69+ @logcontext_clean
6370 def test_timeout (self ) -> None :
6471 """Test that the background process wakes up if its idle, and that it
6572 times out after being idle."""
6673
6774 # Register a deferred to be the return value of the callback.
6875 callback_result_deferred : Deferred [None ] = Deferred ()
69- self ._process_item_mock .side_effect = callback_result_deferred
76+ self ._process_item_mock .side_effect = lambda _ : make_deferred_yieldable (
77+ callback_result_deferred
78+ )
7079
7180 # Adding an item should cause the callback to be invoked.
7281 self .queue .add (1 )
@@ -75,7 +84,8 @@ def test_timeout(self) -> None:
7584 self ._process_item_mock .reset_mock ()
7685
7786 # Let the callback complete.
78- callback_result_deferred .callback (None )
87+ with PreserveLoggingContext ():
88+ callback_result_deferred .callback (None )
7989
8090 # Advance the clock by less than the timeout, and add another item.
8191 self .reactor .advance (0.5 )
@@ -84,12 +94,15 @@ def test_timeout(self) -> None:
8494
8595 # The callback should be invoked again.
8696 callback_result_deferred = Deferred ()
87- self ._process_item_mock .side_effect = callback_result_deferred
97+ self ._process_item_mock .side_effect = lambda _ : make_deferred_yieldable (
98+ callback_result_deferred
99+ )
88100 self ._process_item_mock .assert_called_once_with (2 )
89101 self ._process_item_mock .reset_mock ()
90102
91103 # Let the callback complete.
92- callback_result_deferred .callback (None )
104+ with PreserveLoggingContext ():
105+ callback_result_deferred .callback (None )
93106
94107 # Advance the clock by more than the timeout.
95108 self .reactor .advance (1.5 )
0 commit comments