Beispiel #1
0
async def test_broker_rebind_fail_limit():
    broker = AMQPBroker('amqp://localhost')
    broker.bind = AsyncMock()
    broker._bind_attempts['test_queue'] = 4
    try:
        assert await broker.rebind('test_queue') is False
    except AttributeError:  # for travis
        pass
    broker.bind.assert_not_called()
Beispiel #2
0
async def test_broker_putout_ok():
    broker = AMQPBroker('amqp://localhost')
    broker.get_channel = AsyncMock(return_value=MagicMock())
    amqp = MagicMock(channel=MagicMock(basic_client_ack=AsyncMock(),
                                       is_open=True),
                     envelope=MagicMock(delivery_tag=1))

    await broker.putout(amqp)

    amqp.channel.basic_client_ack.assert_called_once_with(delivery_tag=1)
Beispiel #3
0
async def test_broker_wrapper_fail_timeout(amqp_connection):
    queue = Queue(name='test_queue')
    consumer = Consumer(agent=None,
                        handler=AsyncMock(side_effect=asyncio.TimeoutError),
                        queue=queue,
                        timeout=1,
                        options={})
    channel, connection = amqp_connection

    broker = AMQPBroker('amqp://localhost')
    wrapper = broker._amqp_wrapper(consumer)
    await wrapper(channel, '{"a":1}', MagicMock(delivery_tag=1), MagicMock())

    channel.basic_client_ack.assert_not_called()
Beispiel #4
0
async def test_broker_wrapper_fail_empty_body(amqp_connection):
    queue = Queue(name='test_queue')
    consumer = Consumer(agent=None,
                        handler=1,
                        queue=queue,
                        timeout=1,
                        options={})
    channel, connection = amqp_connection

    broker = AMQPBroker('amqp://localhost')
    wrapper = broker._amqp_wrapper(consumer)
    await wrapper(channel, 'null', MagicMock(delivery_tag=1), MagicMock())

    channel.basic_client_ack.assert_not_called()
Beispiel #5
0
async def test_broker_wrapper_noack_ok(amqp_connection):
    queue = Queue(name='test_queue')
    consumer = Consumer(agent=None,
                        handler=AsyncMock(),
                        queue=queue,
                        timeout=1,
                        options={'autoack': False})
    channel, connection = amqp_connection

    broker = AMQPBroker('amqp://localhost')
    wrapper = broker._amqp_wrapper(consumer)
    await wrapper(channel, '{"a":1}', MagicMock(delivery_tag=1), MagicMock())

    consumer.handler.assert_called_once()
    assert consumer.handler.call_args.kwargs['a'] == 1
    assert consumer.handler.call_args.kwargs['amqp']
    channel.basic_client_ack.assert_not_called()
Beispiel #6
0
async def test_broker_declare_queue_ok(amqp_connection):
    channel, connection = amqp_connection

    broker = AMQPBroker('amqp://localhost')
    await broker.declare_queue('test_queue')

    channel.queue_declare.assert_called_once_with('test_queue')
    channel.close.assert_called()
    assert broker.protocol is connection
Beispiel #7
0
async def test_broker_queue_length_ok(amqp_connection):
    channel, connection = amqp_connection
    channel.queue_declare.return_value = {'message_count': '7'}

    broker = AMQPBroker('amqp://localhost')
    assert await broker.queue_length('test_queue') == 7

    channel.queue_declare.assert_called_once_with('test_queue')
    channel.close.assert_called()
    assert broker.protocol is connection
Beispiel #8
0
async def test_broker_send_ok(amqp_connection):
    channel, connection = amqp_connection

    broker = AMQPBroker('amqp://localhost')
    await broker.send('test_queue', '{}')

    channel.basic_publish.assert_called_once_with('{}',
                                                  routing_key='test_queue',
                                                  exchange_name='')
    channel.close.assert_called()
    assert broker.protocol is connection
Beispiel #9
0
async def test_broker_consume_ok(amqp_connection):
    queue = Queue(name='test_queue')
    consumer = Consumer(agent=None,
                        handler=AsyncMock(),
                        queue=queue,
                        timeout=1,
                        options={})
    channel, connection = amqp_connection

    broker = AMQPBroker('amqp://localhost')
    await broker.bind_consumer(consumer)

    connection.channel.assert_called()
    channel.basic_consume.assert_called()
Beispiel #10
0
async def test_broker_consume_fail(amqp_connection):
    queue = Queue(name='test_queue')
    consumer = Consumer(agent=None,
                        handler=AsyncMock(),
                        queue=queue,
                        timeout=1,
                        options={})
    channel, connection = amqp_connection
    channel.basic_consume.side_effect = aioamqp.ChannelClosed(code=500)

    broker = AMQPBroker('amqp://localhost')

    with pytest.raises(aioamqp.ChannelClosed):
        await broker.bind_consumer(consumer)
Beispiel #11
0
async def test_broker_consume_new_channel_ok(amqp_connection):
    queue = Queue(name='test_queue')
    consumer = Consumer(agent=None,
                        handler=AsyncMock(),
                        queue=queue,
                        timeout=1,
                        options={})
    channel, connection = amqp_connection
    channel.basic_consume.side_effect = [aioamqp.ChannelClosed(code=404), None]

    broker = AMQPBroker('amqp://localhost')
    await broker.bind_consumer(consumer)

    connection.channel.assert_called()
    channel.queue_declare.assert_called_once_with(queue.name)
    assert channel.basic_consume.call_count == 2
Beispiel #12
0
async def test_broker_consume_on_error_ok(amqp_connection):
    queue = Queue(name='test_queue')
    consumer = Consumer(agent=None,
                        handler=AsyncMock(),
                        queue=queue,
                        timeout=1,
                        options={})
    channel, connection = amqp_connection

    broker = AMQPBroker('amqp://localhost')
    broker.rebind = AsyncMock()
    await broker.bind_consumer(consumer)
    broker._on_amqp_error(queue.name, Exception())
    broker._on_amqp_error('no_so_queue', Exception())
    broker.rebind.assert_called_once_with(queue.name)
Beispiel #13
0
async def test_broker_channel_ok(amqp_connection):
    channel, connection = amqp_connection
    channel.basic_consume.side_effect = aioamqp.ChannelClosed(code=500)

    broker = AMQPBroker('amqp://localhost')
    assert await broker.get_channel()
    connection.channel.assert_called()
    conn_id = id(broker.protocol)

    assert await broker.get_channel()
    assert connection.channel.call_count == 2
    assert id(broker.protocol) == conn_id
    assert broker.channels == {}

    connection.channel.side_effect = aioamqp.AmqpClosedConnection

    with pytest.raises(aioamqp.AmqpClosedConnection):
        await broker.get_channel()

    assert not broker.protocol
    assert broker.channels == {}
Beispiel #14
0
async def test_broker_rebind_fail_limit():
    broker = AMQPBroker('amqp://localhost')
    broker.bind = AsyncMock()
    broker._bind_attempts['test_queue'] = 4
    assert await broker.rebind('test_queue') is None
    broker.bind.assert_not_called()
Beispiel #15
0
async def test_broker_rebind_ok():
    broker = AMQPBroker('amqp://localhost')
    broker._bind_attempts['test_queue'] = 0
    broker.bind = AsyncMock()
    assert await broker.rebind('test_queue')
    broker.bind.assert_called_once_with('test_queue')
Beispiel #16
0
async def test_broker_rebind_fail_close_channel():
    broker = AMQPBroker('amqp://localhost')
    broker.bind = AsyncMock(side_effect=aioamqp.ChannelClosed())
    broker._bind_attempts['test_queue'] = 0
    assert not await broker.rebind('test_queue')
Beispiel #17
0
async def test_broker_rebind_fail_oserror():
    broker = AMQPBroker('amqp://localhost')
    broker.bind = AsyncMock(side_effect=OSError())
    broker._bind_attempts['test_queue'] = 0
    assert not await broker.rebind('test_queue')