You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
1.8 KiB
Python
58 lines
1.8 KiB
Python
2 years ago
|
import amqpstorm
|
||
|
import pytest
|
||
|
from amqpworker.easyqueue.connection import AMQPConnection
|
||
|
from tests.easyqueue.test_queue import SubscriptableMock
|
||
|
|
||
|
|
||
|
@pytest.fixture
|
||
|
def connection(mocker):
|
||
|
mocked_connection = mocker.Mock(
|
||
|
return_value=mocker.Mock(channel=SubscriptableMock(return_value=mocker.Mock(basic=mocker.Mock(
|
||
|
publish=mocker.Mock(), qos=mocker.Mock(), consume=mocker.Mock(return_value='consumer_666')
|
||
|
)))))
|
||
|
mocker.patch.object(amqpstorm.Connection, '__new__', mocked_connection)
|
||
|
return mocked_connection, AMQPConnection(**dict(
|
||
|
host="money.que.é.good",
|
||
|
username="nós",
|
||
|
password="não",
|
||
|
virtual_host="have",
|
||
|
heartbeat=5,
|
||
|
))
|
||
|
|
||
|
|
||
|
from amqpstorm import Connection
|
||
|
|
||
|
|
||
|
def test_connection_lock_ensures_amqp_connect_is_only_called_once(
|
||
|
mocker, connection
|
||
|
):
|
||
|
Mock = mocker.Mock
|
||
|
protocol = Mock(channel=Mock(is_open=True))
|
||
|
connect = mocker.patch.object(Connection, "__new__",
|
||
|
return_value=protocol
|
||
|
)
|
||
|
[connection[1]._connect() for _ in range(100)]
|
||
|
assert connect.call_count == 1
|
||
|
|
||
|
|
||
|
def test_connects_with_correct_args(mocker, connection):
|
||
|
connection[1]._connect()
|
||
|
conn_params = dict(
|
||
|
host="money.que.é.good",
|
||
|
username="nós",
|
||
|
password="não",
|
||
|
virtual_host="have",
|
||
|
heartbeat=5,
|
||
|
)
|
||
|
assert connection[0].call_args_list == [
|
||
|
mocker.call(
|
||
|
amqpstorm.Connection,
|
||
|
hostname=conn_params["host"],
|
||
|
port=5672,
|
||
|
username=conn_params["username"],
|
||
|
password=conn_params["password"],
|
||
|
virtual_host=conn_params["virtual_host"],
|
||
|
heartbeat=conn_params["heartbeat"],
|
||
|
)
|
||
|
]
|