Example #1
0
    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)
Example #2
0
    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)
Example #3
0
    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)
Example #4
0
    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)
Example #5
0
    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)
Example #6
0
    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)