async def test_sender__do_init_pid_create(self): sender = await self._setup_sender(no_init=True) init_handler = InitPIDHandler(sender) # Form request req = init_handler.create_request() self.assertEqual(req.API_KEY, InitProducerIdRequest[0].API_KEY) self.assertEqual(req.API_VERSION, 0) self.assertEqual(req.transactional_id, "test_tid") self.assertEqual(req.transaction_timeout_ms, 30000)
async def test_sender__do_init_pid_handle_not_ok(self): sender = await self._setup_sender(no_init=True) init_handler = InitPIDHandler(sender) self.assertEqual(sender._txn_manager.producer_id, -1) self.assertEqual(sender._txn_manager.producer_epoch, -1) # Handle coordination errors for error_cls in [CoordinatorNotAvailableError, NotCoordinatorError]: with mock.patch.object(sender, "_coordinator_dead") as mocked: cls = InitProducerIdResponse[0] resp = cls( throttle_time_ms=300, error_code=error_cls.errno, producer_id=17, producer_epoch=1 ) backoff = init_handler.handle_response(resp) self.assertEqual(backoff, 0.1) self.assertEqual(sender._txn_manager.producer_id, -1) self.assertEqual(sender._txn_manager.producer_epoch, -1) mocked.assert_called_with(CoordinationType.TRANSACTION) # Not coordination errors for error_cls in [ CoordinatorLoadInProgressError, ConcurrentTransactions]: cls = InitProducerIdResponse[0] resp = cls( throttle_time_ms=300, error_code=error_cls.errno, producer_id=17, producer_epoch=1 ) backoff = init_handler.handle_response(resp) self.assertEqual(backoff, 0.1) self.assertEqual(sender._txn_manager.producer_id, -1) self.assertEqual(sender._txn_manager.producer_epoch, -1) # Handle unknown error cls = InitProducerIdResponse[0] resp = cls( throttle_time_ms=300, error_code=UnknownError.errno, producer_id=17, producer_epoch=1 ) with self.assertRaises(UnknownError): init_handler.handle_response(resp) self.assertEqual(sender._txn_manager.producer_id, -1) self.assertEqual(sender._txn_manager.producer_epoch, -1)
async def test_sender__do_init_pid_handle_ok(self): sender = await self._setup_sender(no_init=True) init_handler = InitPIDHandler(sender) # Handle response self.assertEqual(sender._txn_manager.producer_id, -1) self.assertEqual(sender._txn_manager.producer_epoch, -1) cls = InitProducerIdResponse[0] resp = cls(throttle_time_ms=300, error_code=NoError.errno, producer_id=17, producer_epoch=1) backoff = init_handler.handle_response(resp) self.assertIsNone(backoff) self.assertEqual(sender._txn_manager.producer_id, 17) self.assertEqual(sender._txn_manager.producer_epoch, 1)
async def test_sender__do_init_pid_handle_ok(self): sender = await self._setup_sender(no_init=True) init_handler = InitPIDHandler(sender) # Handle response self.assertEqual(sender._txn_manager.producer_id, -1) self.assertEqual(sender._txn_manager.producer_epoch, -1) cls = InitProducerIdResponse[0] resp = cls( throttle_time_ms=300, error_code=NoError.errno, producer_id=17, producer_epoch=1 ) backoff = init_handler.handle_response(resp) self.assertIsNone(backoff) self.assertEqual(sender._txn_manager.producer_id, 17) self.assertEqual(sender._txn_manager.producer_epoch, 1)