Esempio n. 1
0
    def run(self):
        """Main function of benchmarking."""
        log.info('Start benchmarking ...')
        log.info('Spawning %d worker threads ...' % self.workers)
        sqs_talk = sqs.SQSTalk()
        queue_info_obj = queue_info.QueueInfo(self.config_file, sqs_talk)
        worker_threads = []
        for i in range(self.workers):
            worker_thread = WorkerThread(queue_info_obj, self.iterations)
            worker_threads.append(worker_thread)
            worker_thread.setDaemon(True)
        for worker_thread in worker_threads:
            worker_thread.start()
        for worker_thread in worker_threads:
            worker_thread.join()

        all_check_time = []
        while not checking_sqs_time.empty():
            check_time = checking_sqs_time.get()
            all_check_time.append(check_time)
        log.info('=== Benchmark results ===')
        count = len(all_check_time)
        sum_time = sum(all_check_time)
        avg_time = sum_time / count
        median_time = sorted(all_check_time)[count / 2]
        max_time = max(all_check_time)
        log.info('Average Check Time: %f' % avg_time)
        log.info('Median Check time: %f' % median_time)
        log.info('Max Check Time: %f' % max_time)
Esempio n. 2
0
    def test_publish_messages_to_dead_letter_queue(self):
        """Test publisher to DLQ logic."""

        sqs_inst = sqs.SQSTalk()
        sqs_inst._connection = mock.MagicMock()
        mock_publisher = publisher.Publisher(sqs_inst)
        mock_queue = mock.MagicMock()
        mock_publisher._get_or_create_queue = mock.MagicMock(
            return_value=mock_queue)

        payload = {'args': [], 'kwargs': {}}
        sqs_msg = message.KaleMessage.create_message(
            task_class=test_utils.MockTask,
            task_id=test_utils.MockTask._get_task_id(),
            payload=payload,
            queue='queue',
            current_retry_num=5)
        sqs_msg.id = 'test-id'
        test_body = 'test-body'
        sqs_msg.get_body_encoded = mock.MagicMock(return_value=test_body)
        mock_messages = [sqs_msg]

        with mock.patch.object(mock_queue, 'write_batch') as mock_write:
            mock_publisher.publish_messages_to_dead_letter_queue(
                'dlq_name', mock_messages)
            expected_args = [(sqs_msg.id, test_body, 0)]
            mock_write.assert_called_once_with(expected_args)
Esempio n. 3
0
    def test_publish_messages_to_dead_letter_queue(self):
        """Test publisher to DLQ logic."""

        sqs_inst = sqs.SQSTalk()
        mock_publisher = publisher.Publisher(sqs_inst)
        mock_queue = mock.MagicMock()
        mock_publisher._get_or_create_queue = mock.MagicMock(
            return_value=mock_queue)

        payload = {'args': [], 'kwargs': {}}
        kale_msg = message.KaleMessage(
            task_class=test_utils.MockTask,
            task_id=test_utils.MockTask._get_task_id(),
            payload=payload,
            current_retry_num=5)
        kale_msg.id = 'test-id'
        test_body = 'test-body'
        kale_msg.encode = mock.MagicMock(return_value=test_body)
        mock_messages = [kale_msg]

        with mock.patch.object(mock_queue, 'send_messages') as mock_write:
            mock_publisher.publish_messages_to_dead_letter_queue(
                'dlq_name', mock_messages)
            expected_args = [{
                'Id': kale_msg.id,
                'MessageBody': test_body,
                'DelaySeconds': 0
            }]
            mock_write.assert_called_once_with(Entries=expected_args)
Esempio n. 4
0
    def _build_queue_info(self):
        sqs_inst = sqs.SQSTalk()

        queue_config = tempfile.NamedTemporaryFile(delete=True)
        queue_config.write(self.test_string.encode('utf8'))
        queue_config.seek(0)
        queue_info.QueueInfo._queues = None
        queue_info.QueueInfo._simple_name_queues_map = None
        qinfo = queue_info.QueueInfo(queue_config.name, sqs_inst,
                                     queue_info.TaskQueue)
        return qinfo
Esempio n. 5
0
    def _get_sqs_connection(self):
        with mock.patch('boto.sqs') as mock_sqs:
            mock_connection = mock.MagicMock()
            mock_sqs.connection.SQSConnection.return_value = mock_connection
            mock_sqs.connect_to_region.return_value = mock_connection

            mock_connection.lookup.return_value = self.mock_queue
            mock_connection.create_queue.return_value = self.mock_queue
            mock_connection.get_all_queues = self.mock_all_queues

            sqs_inst = sqs.SQSTalk()
            sqs_inst._connection = mock_connection
            return sqs_inst
Esempio n. 6
0
    def test_get_queues(self):
        boto3.setup_default_session()
        sqs_inst = sqs.SQSTalk()

        sqs_inst._get_or_create_queue('LowPriorityTest3')
        sqs_inst._get_or_create_queue('HighPriorityTest4')

        queues = sqs_inst.get_all_queues()
        print(queues)
        self.assertEqual(len(queues), 2)

        queues = sqs_inst.get_all_queues('Low')
        self.assertEqual(len(queues), 1)

        sqs_inst.get_all_queues('High')
        self.assertEqual(len(queues), 1)
Esempio n. 7
0
    def test_create_queue(self):
        boto3.setup_default_session()

        sqs_inst = sqs.SQSTalk()

        sqs_inst._get_or_create_queue('LowPriorityTest1')
        sqs_inst._get_or_create_queue('HighPriorityTest2')

        expected_low_queue = sqs_inst._sqs.Queue('https://queue.amazonaws.com/123456789012/'
                                                 'LowPriorityTest1')
        expected_hi_queue = sqs_inst._sqs.Queue('https://queue.amazonaws.com/123456789012/'
                                                'HighPriorityTest2')

        self.assertEqual(len(sqs_inst._queues), 2)

        self.assertEqual(expected_low_queue, sqs_inst._queues['LowPriorityTest1'])
        self.assertEqual(expected_hi_queue, sqs_inst._queues['HighPriorityTest2'])
Esempio n. 8
0
    def test_publish_with_app_data(self):
        """Test publisher logic."""

        sqs_inst = sqs.SQSTalk()

        with mock.patch(
                'kale.queue_info.QueueInfo.get_queue') as mock_get_queue:
            mock_queue = mock.MagicMock()
            mock_queue.visibility_timeout_sec = 10
            mock_get_queue.return_value = mock_queue
            mock_publisher = publisher.Publisher(sqs_inst)
            mock_publisher._get_or_create_queue = mock.MagicMock()
            payload = {'args': [], 'kwargs': {}, 'app_data': {}}
            mock_task_class = mock.MagicMock()
            mock_task_class.time_limit = 2
            mock_task_class.__name__ = 'task'
            with mock.patch('kale.message.KaleMessage') as mock_message:
                mock_message.create_message.return_value = mock.MagicMock()
                mock_publisher.publish(mock_task_class, 1, payload)
Esempio n. 9
0
    def test_publish_invalid_delay_sec(self):
        """Test publish with invalid delay_sec value."""

        sqs_inst = sqs.SQSTalk()
        sqs_inst._connection = mock.MagicMock()

        mock_publisher = publisher.Publisher(sqs_inst)
        mock_publisher._get_or_create_queue = mock.MagicMock()
        payload = {'args': [], 'kwargs': {}}

        mock_task_class = mock.MagicMock()
        mock_task_class.time_limit = 2

        delay_sec = settings.SQS_MAX_TASK_DELAY_SEC + 1
        with mock.patch('kale.message.KaleMessage') as mock_message:
            mock_message.create_message.return_value = mock.MagicMock()
            with self.assertRaises(exceptions.InvalidTaskDelayException):
                mock_publisher.publish(mock_task_class, 1, payload,
                                       delay_sec=delay_sec)
Esempio n. 10
0
    def test_publish_bad_time_limit_greater(self):
        """Test publish with bad time limit (greater than timeout)."""

        sqs_inst = sqs.SQSTalk()

        with mock.patch(
                'kale.queue_info.QueueInfo.get_queue') as mock_get_queue:
            mock_queue = mock.MagicMock()
            mock_queue.visibility_timeout_sec = 600
            mock_get_queue.return_value = mock_queue
            mock_publisher = publisher.Publisher(sqs_inst)
            mock_publisher._get_or_create_queue = mock.MagicMock()
            payload = {'args': [], 'kwargs': {}}
            mock_task_class = mock.MagicMock()
            mock_task_class.time_limit = 601
            with mock.patch('kale.message.KaleMessage') as mock_message:
                mock_message.create_message.return_value = mock.MagicMock()
                with self.assertRaises(
                        exceptions.InvalidTimeLimitTaskException):
                    mock_publisher.publish(mock_task_class, 1, payload)
Esempio n. 11
0
    def _build_queue_info(self):
        with mock.patch('boto.sqs') as mock_sqs:
            mock_sqs_connection = mock.MagicMock()
            mock_queue = mock.MagicMock()

            mock_sqs_connection.lookup.return_value = mock_queue
            mock_sqs_connection.create_queue.return_value = mock_queue

            conn = mock_sqs.connection
            conn.SQSConnection.return_value = mock_sqs_connection
            mock_sqs.connect_to_region.return_value = mock_sqs_connection

            sqs_inst = sqs.SQSTalk()
            sqs_inst._connection = mock_sqs_connection

            queue_config = tempfile.NamedTemporaryFile(delete=True)
            queue_config.write(self.test_string.encode('utf8'))
            queue_config.seek(0)
            queue_info.QueueInfo._queues = None
            queue_info.QueueInfo._simple_name_queues_map = None
            qinfo = queue_info.QueueInfo(queue_config.name, sqs_inst,
                                         queue_info.TaskQueue)
        return qinfo
Esempio n. 12
0
 def test_get_improperly_configured(self):
     with mock.patch('kale.sqs.settings') as mock_settings:
         mock_settings.PROPERLY_CONFIGURED = False
         with self.assertRaises(exceptions.ImproperlyConfiguredException):
             sqs.SQSTalk()