def test_clean_large_registry(self): """ clean_registry() splits invalid_keys into multiple lists for set removal to avoid sending more than redis can receive """ MAX_WORKERS = 41 MAX_KEYS = 37 # srem is called twice per invalid key batch: once for WORKERS_BY_QUEUE_KEY; once for REDIS_WORKER_KEYS SREM_CALL_COUNT = 2 queue = Queue(name='foo') for i in range(MAX_WORKERS): worker = Worker([queue]) register(worker) with patch('rq.worker_registration.MAX_KEYS', MAX_KEYS), \ patch.object(queue.connection, 'pipeline', wraps=queue.connection.pipeline) as pipeline_mock: # clean_worker_registry creates a pipeline with a context manager. Configure the mock using the context # manager entry method __enter__ pipeline_mock.return_value.__enter__.return_value.srem.return_value = None pipeline_mock.return_value.__enter__.return_value.execute.return_value = [ 0 ] * MAX_WORKERS clean_worker_registry(queue) expected_call_count = (ceildiv(MAX_WORKERS, MAX_KEYS)) * SREM_CALL_COUNT self.assertEqual( pipeline_mock.return_value.__enter__.return_value.srem. call_count, expected_call_count)
def test_split_list(self): """Ensure split_list works properly""" BIG_LIST_SIZE = 42 SEGMENT_SIZE = 5 big_list = ['1'] * BIG_LIST_SIZE small_lists = list(split_list(big_list, SEGMENT_SIZE)) expected_small_list_count = ceildiv(BIG_LIST_SIZE, SEGMENT_SIZE) self.assertEqual(len(small_lists), expected_small_list_count)
def test_ceildiv_uneven(self): """When a number is not evenly divisible by another ceildiv returns the quotient plus one""" dividend = 13 divisor = 4 self.assertEqual(ceildiv(dividend, divisor), dividend // divisor + 1)
def test_ceildiv_even(self): """When a number is evenly divisible by another ceildiv returns the quotient""" dividend = 12 divisor = 4 self.assertEqual(ceildiv(dividend, divisor), dividend // divisor)