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()
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()
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()