Exemple #1
0
    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)
Exemple #2
0
    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)
Exemple #3
0
 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)
Exemple #4
0
 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)