Ejemplo n.º 1
0
    async def test_sender__do_end_txn_create(self):
        sender = await self._setup_sender()
        add_handler = EndTxnHandler(sender, 0)

        req = add_handler.create_request()
        self.assertEqual(req.API_KEY, EndTxnRequest[0].API_KEY)
        self.assertEqual(req.API_VERSION, 0)
        self.assertEqual(req.transactional_id, "test_tid")
        self.assertEqual(req.producer_id, 120)
        self.assertEqual(req.producer_epoch, 22)
        self.assertEqual(req.transaction_result, 0)
Ejemplo n.º 2
0
    async def test_sender__do_end_txn_create(self):
        sender = await self._setup_sender()
        add_handler = EndTxnHandler(sender, 0)

        req = add_handler.create_request()
        self.assertEqual(req.API_KEY, EndTxnRequest[0].API_KEY)
        self.assertEqual(req.API_VERSION, 0)
        self.assertEqual(req.transactional_id, "test_tid")
        self.assertEqual(req.producer_id, 120)
        self.assertEqual(req.producer_epoch, 22)
        self.assertEqual(req.transaction_result, 0)
Ejemplo n.º 3
0
    async def test_sender__do_end_txn_ok(self):
        sender = await self._setup_sender()
        add_handler = EndTxnHandler(sender, 0)
        tm = sender._txn_manager
        tm.complete_transaction = mock.Mock()

        # Handle response
        cls = EndTxnResponse[0]
        resp = cls(throttle_time_ms=300, error_code=NoError.errno)
        backoff = add_handler.handle_response(resp)
        self.assertIsNone(backoff)
        tm.complete_transaction.assert_called_with()
Ejemplo n.º 4
0
    async def test_sender__do_end_txn_ok(self):
        sender = await self._setup_sender()
        add_handler = EndTxnHandler(sender, 0)
        tm = sender._txn_manager
        tm.complete_transaction = mock.Mock()

        # Handle response
        cls = EndTxnResponse[0]
        resp = cls(
            throttle_time_ms=300,
            error_code=NoError.errno
        )
        backoff = add_handler.handle_response(resp)
        self.assertIsNone(backoff)
        tm.complete_transaction.assert_called_with()
Ejemplo n.º 5
0
    async def test_sender__do_end_txn_not_ok(self):
        sender = await self._setup_sender()
        add_handler = EndTxnHandler(sender, 0)
        tm = sender._txn_manager
        tm.complete_transaction = mock.Mock()

        def create_response(error_type):
            cls = EndTxnResponse[0]
            resp = cls(
                throttle_time_ms=300,
                error_code=error_type.errno
            )
            return resp

        # Handle coordination errors
        for error_cls in [CoordinatorNotAvailableError, NotCoordinatorError]:
            with mock.patch.object(sender, "_coordinator_dead") as mocked:
                resp = create_response(error_cls)
                backoff = add_handler.handle_response(resp)
                self.assertEqual(backoff, 0.1)
                tm.complete_transaction.assert_not_called()
                mocked.assert_called_with(CoordinationType.TRANSACTION)

        # Not coordination retriable errors
        for error_cls in [
                CoordinatorLoadInProgressError, ConcurrentTransactions]:
            resp = create_response(error_cls)
            backoff = add_handler.handle_response(resp)
            self.assertEqual(backoff, 0.1)
            tm.complete_transaction.assert_not_called()

        # ProducerFenced case
        resp = create_response(InvalidProducerEpoch)
        with self.assertRaises(ProducerFenced):
            add_handler.handle_response(resp)
        tm.complete_transaction.assert_not_called()

        for error_type in [InvalidTxnState]:
            resp = create_response(error_type)
            with self.assertRaises(error_type):
                add_handler.handle_response(resp)
            tm.complete_transaction.assert_not_called()

        # Handle unknown error
        resp = create_response(UnknownError)
        with self.assertRaises(UnknownError):
            add_handler.handle_response(resp)
        tm.complete_transaction.assert_not_called()
Ejemplo n.º 6
0
    async def test_sender__do_end_txn_not_ok(self):
        sender = await self._setup_sender()
        add_handler = EndTxnHandler(sender, 0)
        tm = sender._txn_manager
        tm.complete_transaction = mock.Mock()

        def create_response(error_type):
            cls = EndTxnResponse[0]
            resp = cls(
                throttle_time_ms=300,
                error_code=error_type.errno
            )
            return resp

        # Handle coordination errors
        for error_cls in [CoordinatorNotAvailableError, NotCoordinatorError]:
            with mock.patch.object(sender, "_coordinator_dead") as mocked:
                resp = create_response(error_cls)
                backoff = add_handler.handle_response(resp)
                self.assertEqual(backoff, 0.1)
                tm.complete_transaction.assert_not_called()
                mocked.assert_called_with(CoordinationType.TRANSACTION)

        # Not coordination retriable errors
        for error_cls in [
                CoordinatorLoadInProgressError, ConcurrentTransactions]:
            resp = create_response(error_cls)
            backoff = add_handler.handle_response(resp)
            self.assertEqual(backoff, 0.1)
            tm.complete_transaction.assert_not_called()

        # ProducerFenced case
        resp = create_response(InvalidProducerEpoch)
        with self.assertRaises(ProducerFenced):
            add_handler.handle_response(resp)
        tm.complete_transaction.assert_not_called()

        for error_type in [InvalidTxnState]:
            resp = create_response(error_type)
            with self.assertRaises(error_type):
                add_handler.handle_response(resp)
            tm.complete_transaction.assert_not_called()

        # Handle unknown error
        resp = create_response(UnknownError)
        with self.assertRaises(UnknownError):
            add_handler.handle_response(resp)
        tm.complete_transaction.assert_not_called()