mirror of
				https://github.com/matrix-org/synapse.git
				synced 2025-11-04 10:11:05 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			75 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
from tests import unittest
 | 
						|
from twisted.internet import defer
 | 
						|
 | 
						|
from tests.utils import setup_test_homeserver
 | 
						|
 | 
						|
from mock import Mock
 | 
						|
 | 
						|
 | 
						|
class BackgroundUpdateTestCase(unittest.TestCase):
 | 
						|
 | 
						|
    @defer.inlineCallbacks
 | 
						|
    def setUp(self):
 | 
						|
        hs = yield setup_test_homeserver()
 | 
						|
        self.store = hs.get_datastore()
 | 
						|
        self.clock = hs.get_clock()
 | 
						|
 | 
						|
        self.update_handler = Mock()
 | 
						|
 | 
						|
        yield self.store.register_background_update_handler(
 | 
						|
            "test_update", self.update_handler
 | 
						|
        )
 | 
						|
 | 
						|
    @defer.inlineCallbacks
 | 
						|
    def test_do_background_update(self):
 | 
						|
        desired_count = 1000
 | 
						|
        duration_ms = 42
 | 
						|
 | 
						|
        @defer.inlineCallbacks
 | 
						|
        def update(progress, count):
 | 
						|
            self.clock.advance_time_msec(count * duration_ms)
 | 
						|
            progress = {"my_key": progress["my_key"] + 1}
 | 
						|
            yield self.store.runInteraction(
 | 
						|
                "update_progress",
 | 
						|
                self.store._background_update_progress_txn,
 | 
						|
                "test_update",
 | 
						|
                progress,
 | 
						|
            )
 | 
						|
            defer.returnValue(count)
 | 
						|
 | 
						|
        self.update_handler.side_effect = update
 | 
						|
 | 
						|
        yield self.store.start_background_update("test_update", {"my_key": 1})
 | 
						|
 | 
						|
        self.update_handler.reset_mock()
 | 
						|
        result = yield self.store.do_background_update(
 | 
						|
            duration_ms * desired_count
 | 
						|
        )
 | 
						|
        self.assertIsNotNone(result)
 | 
						|
        self.update_handler.assert_called_once_with(
 | 
						|
            {"my_key": 1}, self.store.DEFAULT_BACKGROUND_BATCH_SIZE
 | 
						|
        )
 | 
						|
 | 
						|
        @defer.inlineCallbacks
 | 
						|
        def update(progress, count):
 | 
						|
            yield self.store._end_background_update("test_update")
 | 
						|
            defer.returnValue(count)
 | 
						|
 | 
						|
        self.update_handler.side_effect = update
 | 
						|
 | 
						|
        self.update_handler.reset_mock()
 | 
						|
        result = yield self.store.do_background_update(
 | 
						|
            duration_ms * desired_count
 | 
						|
        )
 | 
						|
        self.assertIsNotNone(result)
 | 
						|
        self.update_handler.assert_called_once_with(
 | 
						|
            {"my_key": 2}, desired_count
 | 
						|
        )
 | 
						|
 | 
						|
        self.update_handler.reset_mock()
 | 
						|
        result = yield self.store.do_background_update(
 | 
						|
            duration_ms * desired_count
 | 
						|
        )
 | 
						|
        self.assertIsNone(result)
 | 
						|
        self.assertFalse(self.update_handler.called)
 |