예제 #1
0
    def test_listen_for_messages(self, mock_process_message):
        """Test to listen for kafka messages."""
        mock_process_message.return_value = True

        test_matrix = [{
            "test_value": {
                "account": "10001",
                "category": "tar",
                "metadata": {
                    "reporter": "",
                    "stale_timestamp": "0001-01-01T00:00:00Z"
                },
            },
            "expected_process": True,
        }]
        for test in test_matrix:
            msg = MockMessage(
                topic="platform.upload.hccm",
                offset=5,
                url="https://insights-quarantine.s3.amazonaws.com/myfile",
                value_dict=test.get("test_value"),
            )

            mock_consumer = MockKafkaConsumer([msg])

            msg_handler.listen_for_messages(msg, mock_consumer)
            if test.get("expected_process"):
                mock_process_message.assert_called()
            else:
                mock_process_message.assert_not_called()
예제 #2
0
    def test_listen_for_messages_error(self, mock_process_message):
        """Test to listen for kafka messages with errors."""
        mock_process_message.return_value = False

        test_matrix = [
            {
                "test_value": {
                    "account": "10001",
                    "category": "tar",
                    "metadata": {
                        "reporter": "",
                        "stale_timestamp": "0001-01-01T00:00:00Z"
                    },
                },
                "side_effect": KafkaMsgHandlerError,
            },
            {
                "test_value": {
                    "account": "10001",
                    "category": "tar",
                    "metadata": {
                        "reporter": "",
                        "stale_timestamp": "0001-01-01T00:00:00Z"
                    },
                },
                "side_effect": ReportProcessorError,
            },
        ]
        for test in test_matrix:
            msg = MockMessage(
                topic="platform.upload.hccm",
                offset=5,
                url="https://insights-quarantine.s3.amazonaws.com/myfile",
                value_dict=test.get("test_value"),
            )

            mock_consumer = MockKafkaConsumer([msg])

            mock_process_message.side_effect = test.get("side_effect")
            with patch(
                    "masu.external.kafka_msg_handler.close_and_set_db_connection"
            ) as close_mock:
                with patch.object(Config, "RETRY_SECONDS", 0):
                    msg_handler.listen_for_messages(msg, mock_consumer)
                    close_mock.assert_not_called()
예제 #3
0
    def test_listen_for_messages_error(self, mock_process_message):
        """Test to listen for kafka messages with errors."""
        future_mock = asyncio.Future()
        future_mock.set_result("test result")
        mock_process_message.return_value = future_mock

        run_loop = asyncio.new_event_loop()

        test_matrix = [
            {
                "test_value":
                json.dumps({
                    "account": "10001",
                    "category": "tar",
                    "metadata": {
                        "reporter": "",
                        "stale_timestamp": "0001-01-01T00:00:00Z"
                    },
                }),
                "side_effect":
                KafkaMsgHandlerError,
            },
            {
                "test_value":
                json.dumps({
                    "account": "10001",
                    "category": "tar",
                    "metadata": {
                        "reporter": "",
                        "stale_timestamp": "0001-01-01T00:00:00Z"
                    },
                }),
                "side_effect":
                ReportProcessorError,
            },
        ]
        for test in test_matrix:
            msg = ConsumerRecord(
                topic="platform.upload.hccm",
                offset=5,
                url="https://insights-quarantine.s3.amazonaws.com/myfile",
                value=bytes(test.get("test_value"), encoding="utf-8"),
            )

            mock_consumer = MockKafkaConsumer([msg])

            mock_process_message.side_effect = test.get("side_effect")
            with patch("masu.external.kafka_msg_handler.connection.close"
                       ) as close_mock:
                with patch.object(Config, "RETRY_SECONDS", 0):
                    run_loop.run_until_complete(
                        msg_handler.listen_for_messages(mock_consumer))
                    close_mock.assert_not_called()
예제 #4
0
    def test_listen_for_messages(self, mock_process_message):
        """Test to listen for kafka messages."""
        future_mock = asyncio.Future()
        future_mock.set_result("test result")
        mock_process_message.return_value = future_mock

        run_loop = asyncio.new_event_loop()

        test_matrix = [{
            "test_value":
            json.dumps({
                "account": "10001",
                "category": "tar",
                "metadata": {
                    "reporter": "",
                    "stale_timestamp": "0001-01-01T00:00:00Z"
                },
            }),
            "expected_process":
            True,
        }]
        for test in test_matrix:
            msg = ConsumerRecord(
                topic="platform.upload.hccm",
                offset=5,
                url="https://insights-quarantine.s3.amazonaws.com/myfile",
                value=bytes(test.get("test_value"), encoding="utf-8"),
            )

            mock_consumer = MockKafkaConsumer([msg])

            run_loop.run_until_complete(
                msg_handler.listen_for_messages(mock_consumer))
            if test.get("expected_process"):
                mock_process_message.assert_called()
            else:
                mock_process_message.assert_not_called()