Пример #1
0
    async def test_acker_batches_are_retried_next_time(subscriber_client):
        mock = MagicMock()

        async def f(*args, **kwargs):
            await asyncio.sleep(0)
            mock(*args, **kwargs)
            raise TimeoutError
        subscriber_client.acknowledge = f

        queue = asyncio.Queue()
        acker_task = asyncio.ensure_future(
            acker(
                'fake_subscription',
                queue,
                subscriber_client,
                0.1,
                MagicMock()
            )
        )
        await queue.put('ack_id_1')
        await queue.put('ack_id_2')
        await asyncio.sleep(0.3)
        acker_task.cancel()
        assert queue.qsize() == 0
        mock.assert_has_calls(
            [
                call('fake_subscription', ack_ids=['ack_id_1', 'ack_id_2']),
                call('fake_subscription', ack_ids=['ack_id_1', 'ack_id_2']),
            ]
        )
Пример #2
0
    async def test_acker_handles_exception(subscriber_client):
        mock = MagicMock()

        async def f(*args, **kwargs):
            await asyncio.sleep(0)
            mock(*args, **kwargs)
            raise RuntimeError
        subscriber_client.acknowledge = f

        queue = asyncio.Queue()
        acker_task = asyncio.ensure_future(
            acker(
                'fake_subscription',
                queue,
                subscriber_client,
                0.0,
                MagicMock()
            )
        )
        await queue.put('ack_id')
        await asyncio.sleep(0)
        await asyncio.sleep(0)
        mock.assert_called_once()
        assert queue.qsize() == 0
        assert not acker_task.done()
        acker_task.cancel()
Пример #3
0
    async def test_acker_batches_not_retried_on_400(caplog, subscriber_client):
        caplog.set_level(logging.WARNING,
                         logger='gcloud.aio.pubsub.subscriber')
        mock = MagicMock()

        async def f(*args, **kwargs):
            await asyncio.sleep(0)
            mock(*args, **kwargs)
            raise aiohttp.client_exceptions.ClientResponseError(None,
                                                                None,
                                                                status=400)

        subscriber_client.acknowledge = f

        queue = asyncio.Queue()
        acker_task = asyncio.ensure_future(
            acker('fake_subscription', queue, subscriber_client, 0.1,
                  MagicMock()))
        await queue.put('ack_id_1')
        await queue.put('ack_id_2')
        await asyncio.sleep(0.3)
        acker_task.cancel()
        assert queue.qsize() == 0
        mock.assert_has_calls([
            call('fake_subscription', ack_ids=['ack_id_1', 'ack_id_2']),
            call('fake_subscription', ack_ids=['ack_id_1']),
            call('fake_subscription', ack_ids=['ack_id_2']),
        ])
        assert ('gcloud.aio.pubsub.subscriber', logging.WARNING,
                'Ack failed for ack_id=ack_id_1') in caplog.record_tuples
        assert ('gcloud.aio.pubsub.subscriber', logging.WARNING,
                'Ack failed for ack_id=ack_id_2') in caplog.record_tuples
Пример #4
0
 async def test_acker_does_ack(subscriber_client):
     queue = asyncio.Queue()
     acker_task = asyncio.ensure_future(
         acker('fake_subscription', queue, subscriber_client, 0.0,
               MagicMock()))
     await queue.put('ack_id')
     await queue.join()
     subscriber_client.acknowledge.assert_called_once_with(
         'fake_subscription', ack_ids=['ack_id'])
     assert queue.qsize() == 0
     acker_task.cancel()
Пример #5
0
 async def test_acker_does_batching(subscriber_client):
     queue = asyncio.Queue()
     acker_task = asyncio.ensure_future(
         acker('fake_subscription', queue, subscriber_client, 0.1,
               MagicMock()))
     await queue.put('ack_id_1')
     await queue.put('ack_id_2')
     await asyncio.sleep(0.2)
     acker_task.cancel()
     subscriber_client.acknowledge.assert_called_once_with(
         'fake_subscription', ack_ids=['ack_id_1', 'ack_id_2'])
     assert queue.qsize() == 0