Пример #1
0
 async def test_ok(self, event_loop, exchange):
     connection = cabbage.AmqpConnection(hosts=[(HOST, 5672)],
                                         loop=event_loop)
     rpc = cabbage.AsyncAmqpRpc(connection=connection)
     rpc.callback_exchange = exchange
     with patch('cabbage.amqp.aioamqp_connect') as mock_connect:
         mock_connect.return_value = (MockTransport(), MockProtocol())
         await rpc.connect()
     mock_connect.assert_called_once()
     # check that client is set up correctly:
     assert isinstance(rpc.channel, aioamqp.channel.Channel
                       )  # actually it's a mock pretending to be a Channel
     rpc.channel.queue_declare.assert_called_with(exclusive=True)
     rpc.channel.basic_consume.assert_called_once_with(
         callback=rpc._on_response, queue_name=rpc.callback_queue)
     if rpc.callback_exchange != '':
         rpc.channel.exchange_declare.assert_called_once_with(
             exchange_name=rpc.callback_exchange,
             type_name='topic',
             durable=True)
         rpc.channel.queue_bind.assert_called_once_with(
             queue_name=rpc.callback_queue,
             exchange_name=rpc.callback_exchange,
             routing_key=rpc.callback_queue)
     else:
         rpc.channel.exchange_declare.assert_not_called()
         rpc.channel.queue_bind.assert_not_called()
Пример #2
0
    async def test_retry(self, event_loop):
        """Keep reconnecting if an error occurs."""
        attempts = 10

        async def faulty_connect(_attempts=[attempts], **kwargs):
            assert kwargs == dict(host=HOST,
                                  port=PORT,
                                  login=USERNAME,
                                  password=PASSWORD,
                                  virtualhost=VIRTUALHOST,
                                  loop=event_loop,
                                  ssl=False)
            _attempts[0] -= 1
            if _attempts[0]:
                raise OSError('[Errno 113] Connect call failed')
            return mock_transport, mock_protocol

        connection = cabbage.AmqpConnection(hosts=[(HOST, PORT)],
                                            username=USERNAME,
                                            password=PASSWORD,
                                            virtualhost=VIRTUALHOST,
                                            loop=event_loop)
        mock_transport, mock_protocol = MockTransport(), MockProtocol()

        with patch('cabbage.amqp.aioamqp_connect',
                   new=faulty_connect), patch('asyncio.sleep') as mock_sleep:
            await connection.connect()

        assert mock_sleep.call_count == attempts - 1
        assert connection.transport is mock_transport
        assert connection.protocol is mock_protocol
Пример #3
0
    async def test_called_twice(self, event_loop):
        """Check that calling the method twice has no effect."""
        connection = cabbage.AmqpConnection(loop=event_loop)
        mock_transport, mock_protocol = MockTransport(), MockProtocol()
        connection.transport = mock_transport
        connection.protocol = mock_protocol
        with patch('cabbage.amqp.aioamqp_connect') as mock_connect:
            await connection.connect()

        mock_connect.assert_not_called()
        assert connection.transport is mock_transport
        assert connection.protocol is mock_protocol
Пример #4
0
async def test_amqp_connection_with_default_port(event_loop):
    DEFAULT_PORT = 5672
    mock_transport, mock_protocol = MockTransport(), MockProtocol()
    with patch('asyncio.base_events.BaseEventLoop.create_connection'
               ) as mock_connect:
        mock_connect.return_value = (mock_transport, mock_protocol)
        await aioamqp_connect(host=HOST,
                              virtualhost=VIRTUALHOST,
                              login=USERNAME,
                              password=PASSWORD,
                              loop=event_loop,
                              ssl=False)
        mock_connect.assert_called_once_with(mock.ANY, HOST, DEFAULT_PORT)
Пример #5
0
async def test_amqp_connection_ssl_context(event_loop):
    mock_transport, mock_protocol = MockTransport(), MockProtocol()
    with patch('asyncio.base_events.BaseEventLoop.create_connection'
               ) as mock_connect:
        with patch('ssl.create_default_context') as mock_default_context:
            mock_connect.return_value = (mock_transport, mock_protocol)
            await aioamqp_connect(host=HOST,
                                  port=PORT,
                                  virtualhost=VIRTUALHOST,
                                  login=USERNAME,
                                  password=PASSWORD,
                                  verify_ssl=False,
                                  ssl=mock_default_context)
            assert mock_default_context.check_hostname is False
            assert mock_default_context.verify_mode == ssl.CERT_NONE
Пример #6
0
async def test_amqp_connection_exception(event_loop):
    ssl_context = mock.MagicMock()
    mock_transport, mock_protocol = MockTransport(), MockProtocol()
    mock_protocol.start_connection = mock.MagicMock(
        side_effect=ValueError('TestException'))
    with patch('asyncio.base_events.BaseEventLoop.create_connection'
               ) as mock_connect:
        mock_connect.return_value = (mock_transport, mock_protocol)
        with pytest.raises(ValueError, message='Expected ValueError'):
            await aioamqp_connect(host=HOST,
                                  port=PORT,
                                  virtualhost=VIRTUALHOST,
                                  login=USERNAME,
                                  password=PASSWORD,
                                  loop=event_loop,
                                  ssl=ssl_context)
Пример #7
0
async def test_amqp_connection_ssl(event_loop):
    ssl_context = mock.MagicMock()
    mock_transport, mock_protocol = MockTransport(), MockProtocol()
    with patch('asyncio.base_events.BaseEventLoop.create_connection'
               ) as mock_connect:
        mock_connect.return_value = (mock_transport, mock_protocol)
        await aioamqp_connect(host=HOST,
                              port=PORT,
                              virtualhost=VIRTUALHOST,
                              login=USERNAME,
                              password=PASSWORD,
                              loop=event_loop,
                              ssl=ssl_context)
        mock_connect.assert_called_once_with(mock.ANY,
                                             HOST,
                                             PORT,
                                             ssl=ssl_context)
Пример #8
0
    async def test_default_params(self, event_loop):
        """Check that AmqpConnection supplies reasonable defaults."""
        connection = cabbage.AmqpConnection(loop=event_loop)
        mock_transport, mock_protocol = MockTransport(), MockProtocol()
        with patch('cabbage.amqp.aioamqp_connect') as mock_connect:
            mock_connect.return_value = (mock_transport, mock_protocol)
            await connection.connect()

        mock_connect.assert_called_once_with(host='localhost',
                                             port=5672,
                                             login='******',
                                             password='******',
                                             virtualhost='/',
                                             loop=event_loop,
                                             ssl=False)
        assert connection.transport is mock_transport
        assert connection.protocol is mock_protocol
Пример #9
0
    async def test_connect(self, event_loop):
        """Check typical connection call."""
        mock_transport, mock_protocol = MockTransport(), MockProtocol()
        connection = cabbage.AmqpConnection(hosts=[(HOST, PORT)],
                                            username=USERNAME,
                                            password=PASSWORD,
                                            virtualhost=VIRTUALHOST,
                                            loop=event_loop)
        with patch('cabbage.amqp.aioamqp_connect') as mock_connect:
            mock_connect.return_value = (mock_transport, mock_protocol)
            await connection.connect()

        mock_connect.assert_called_once_with(host=HOST,
                                             port=PORT,
                                             login=USERNAME,
                                             password=PASSWORD,
                                             virtualhost=VIRTUALHOST,
                                             loop=event_loop,
                                             ssl=False)
        assert connection.transport is mock_transport
        assert connection.protocol is mock_protocol
Пример #10
0
 async def test_ok(self, connection: AmqpConnection):
     connection.protocol = MockProtocol()
     connection.protocol.state = OPEN
     assert connection.is_connected is True