userver: /data/code/userver/testsuite/pytest_plugins/pytest_userver/plugins/mongo.py Source File
⚠️ This is the documentation for an old userver version. Click here to switch to the latest version.
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages Concepts
mongo.py
1"""
2Plugin that imports the required fixtures to start the database
3and adjusts the mongo "dbconnection" static config value.
4"""
5
6import re
7
8import pytest
9
10
11pytest_plugins = [
12 'testsuite.databases.mongo.pytest_plugin',
13 'pytest_userver.plugins.core',
14]
15
16
17USERVER_CONFIG_HOOKS = ['userver_mongo_config']
18
19
20@pytest.fixture(scope='session')
21def userver_mongo_config(mongo_connection_info):
22 """
23 Returns a function that adjusts the static configuration file for
24 the testsuite.
25 Sets the `dbconnection` to the testsuite started MongoDB credentials if
26 the `dbconnection` starts with `mongodb://`. Additionally
27 increases MongoDB connection timeouts to 30 seconds.
28
29 @ingroup userver_testsuite_fixtures
30 """
31
32 port = mongo_connection_info.port
33 host = mongo_connection_info.host
34 new_uri = f'mongodb://{host}:{port}/'
35
36 def _patch_config(config_yaml, config_vars):
37 components = config_yaml['components_manager']['components']
38 for _, params in components.items():
39 uri = ''
40
41 if params and 'dbconnection#fallback' in params:
42 uri = params['dbconnection#fallback']
43
44 if params and 'dbconnection' in params:
45 uri = params['dbconnection']
46
47 if not uri or not uri.startswith('mongodb://'):
48 continue
49
50 uri = re.sub('mongodb://[^:]+:\\d+/', new_uri, uri)
51 uri = re.sub('mongodb://[^:]+/', new_uri, uri)
52
53 params['dbconnection'] = uri
54 params['conn_timeout'] = '30s'
55 params['so_timeout'] = '30s'
56 params.pop('dbalias', None)
57
58 return _patch_config