Skip to content

Commit ebc7409

Browse files
youtuxolegpidsadnyi
authored andcommitted
Add request to watcher_getter (#21)
* Add request to watcher_getter * Update CHANGES.rst * Fix typo * Pass request to watcher_getter usages * Do not use conflicting database name that conflict with the mysql default one
1 parent 47e5ae4 commit ebc7409

File tree

6 files changed

+36
-13
lines changed

6 files changed

+36
-13
lines changed

CHANGES.rst

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
Changelog
22
=========
33

4+
1.3.0
5+
-----
6+
7+
- Add `request` param to watcher_getter to have proper execution order
8+
of finalizers (youtux).
9+
410
1.2.1
511
-----
612

README.rst

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,10 @@ Infrastructure fixtures
6868
return watcher_getter(
6969
name='memcached',
7070
arguments=['-s', memcached_socket],
71-
checker=lambda: os.path.exists(memcached_socket))
71+
checker=lambda: os.path.exists(memcached_socket),
72+
# Needed for the correct execution order of finalizers
73+
request=request,
74+
)
7275
7376
* services_log
7477
Logger used for debug logging when managing test services.

pytest_services/memcached.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,15 @@ def memcached_socket(run_dir, run_services):
1111

1212

1313
@pytest.fixture(scope='session')
14-
def memcached(run_services, memcached_socket, watcher_getter):
14+
def memcached(request, run_services, memcached_socket, watcher_getter):
1515
"""The memcached instance which is ready to be used by the tests."""
1616
if run_services:
1717
return watcher_getter(
1818
name='memcached',
1919
arguments=['-s', memcached_socket],
20-
checker=lambda: os.path.exists(memcached_socket))
20+
checker=lambda: os.path.exists(memcached_socket),
21+
request=request,
22+
)
2123

2224

2325
@pytest.fixture(scope='session')

pytest_services/mysql.py

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -103,19 +103,24 @@ def mysql_watcher(
103103
mysql_defaults_file):
104104
"""The mysqld process watcher."""
105105
if run_services:
106-
return watcher_getter('mysqld', [
107-
'--defaults-file={0}'.format(mysql_defaults_file),
108-
'--datadir={mysql_data_dir}'.format(mysql_data_dir=mysql_data_dir),
109-
'--pid-file={mysql_pid}'.format(mysql_pid=mysql_pid),
110-
'--socket={mysql_socket}'.format(mysql_socket=mysql_socket),
111-
'--skip-networking',
112-
], checker=lambda: os.path.exists(mysql_socket))
106+
return watcher_getter(
107+
'mysqld',
108+
[
109+
'--defaults-file={0}'.format(mysql_defaults_file),
110+
'--datadir={mysql_data_dir}'.format(mysql_data_dir=mysql_data_dir),
111+
'--pid-file={mysql_pid}'.format(mysql_pid=mysql_pid),
112+
'--socket={mysql_socket}'.format(mysql_socket=mysql_socket),
113+
'--skip-networking',
114+
],
115+
checker=lambda: os.path.exists(mysql_socket),
116+
request=request,
117+
)
113118

114119

115120
@pytest.fixture(scope='session')
116121
def mysql_database_name():
117122
"""Name of test database to be created."""
118-
return 'test'
123+
return 'pytest_services_test'
119124

120125

121126
@pytest.fixture(scope='session')

pytest_services/service.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
"""Service fixtures."""
22
import time
33
import re
4+
import warnings
45
try:
56
import subprocess32 as subprocess
67
except ImportError: # pragma: no cover
@@ -56,7 +57,12 @@ def watcher_getter(request, services_log):
5657
Wait for the process to start.
5758
Add finalizer to properly stop it.
5859
"""
59-
def watcher_getter_function(name, arguments=None, kwargs=None, timeout=20, checker=None):
60+
orig_request = request
61+
def watcher_getter_function(name, arguments=None, kwargs=None, timeout=20, checker=None, request=None):
62+
if request is None:
63+
warnings.warn('Omitting the `request` parameter will result in an '
64+
'unstable order of finalizers.')
65+
request = orig_request
6066
executable = find_executable(name)
6167
assert executable, 'You have to install {0} executable.'.format(name)
6268

@@ -80,7 +86,7 @@ def finalize():
8086
watcher.communicate(timeout=timeout / 2)
8187
request.addfinalizer(finalize)
8288

83-
# Wait for memcached to accept connections.
89+
# Wait for the service to start.
8490
times = 0
8591
while not checker():
8692
if watcher.returncode is not None:

pytest_services/xvfb.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,4 +91,5 @@ def checker():
9191
'+extension', 'RANDR'
9292
] + listen_args,
9393
checker=checker,
94+
request=request,
9495
)

0 commit comments

Comments
 (0)