userver: en/testsuite/databases/rabbitmq/pytest_plugin.py Source File
Loading...
Searching...
No Matches
pytest_plugin.py
1import asyncio
2
3import pytest
4
5from . import classes, service
6
7
8def pytest_addoption(parser):
9 group = parser.getgroup('rabbitmq')
10 group.addoption('--rabbitmq')
11 group.addoption(
12 '--no-rabbitmq',
13 help='Disable use of RabbitMQ',
14 action='store_true',
15 )
16
17
18def pytest_configure(config):
19 config.addinivalue_line(
20 'markers',
21 'rabbitmq: per-test RabbitMQ initialization',
22 )
23
24
25def pytest_service_register(register_service):
26 register_service('rabbitmq', service.create_rabbitmq_service)
27
28
29@pytest.fixture
30def rabbitmq(_rabbitmq_connection) -> classes.Control:
31 return _rabbitmq_connection
32
33
34@pytest.fixture(scope='session')
35async def _rabbitmq_connection(
36 _rabbitmq_service,
37 _rabbitmq_service_settings,
38) -> classes.Control:
39 event_loop = asyncio.get_running_loop()
40 control = classes.Control(
41 enabled=_rabbitmq_service,
42 conn_info=_rabbitmq_service_settings.get_connection_info(),
43 )
44 yield control
45 await control.teardown()
46
47
48@pytest.fixture(scope='session')
49def rabbitmq_disabled(pytestconfig) -> bool:
50 return pytestconfig.option.no_rabbitmq
51
52
53@pytest.fixture(scope='session')
54def _rabbitmq_service_settings() -> service.ServiceSettings:
55 return service.get_service_settings()
56
57
58@pytest.fixture(scope='session')
59def _rabbitmq_service(
60 ensure_service_started,
61 rabbitmq_disabled,
62 pytestconfig,
63 _rabbitmq_service_settings,
64):
65 if rabbitmq_disabled:
66 return False
67 if not pytestconfig.option.rabbitmq:
68 ensure_service_started('rabbitmq', settings=_rabbitmq_service_settings)
69 return True