userver
C++ Async Framework
Toggle main menu visibility
Loading...
Searching...
No Matches
dumps.py
1
# pylint: disable=redefined-outer-name
2
import
pathlib
3
import
shutil
4
5
import
pytest
6
7
USERVER_CONFIG_HOOKS = [
'_userver_config_dumps'
]
8
9
10
@pytest.fixture(scope='session')
11
def
userver_dumps_root(tmp_path_factory) -> pathlib.Path:
12
"""
13
The directory which the service will use for cache dumps.
14
Dumps of individual components will be stored in
15
`{userver_dumps_root}/{component-name}/{datetime}-v{format-version}`
16
17
@see userver::dump::Dumper
18
@ingroup userver_testsuite_fixtures
19
"""
20
path = tmp_path_factory.mktemp(
'userver-cache-dumps'
, numbered=
False
)
21
return
path.resolve()
22
23
24
@pytest.fixture
25
def
read_latest_dump(userver_dumps_root):
26
"""
27
Read the latest dump produced by a specified dumper.
28
29
@see userver::dump::Dumper
30
@ingroup userver_testsuite_fixtures
31
"""
32
33
def
read(dumper_name: str) -> bytes |
None
:
34
specific_dir = userver_dumps_root.joinpath(dumper_name)
35
if
not
specific_dir.is_dir():
36
return
None
37
latest_dump_filename = max(
38
(f
for
f
in
specific_dir.iterdir()
if
specific_dir.joinpath(f).is_file()),
39
default=
None
,
40
)
41
if
not
latest_dump_filename:
42
return
None
43
with
open(specific_dir.joinpath(latest_dump_filename),
'rb'
)
as
dump:
44
return
dump.read()
45
46
return
read
47
48
49
@pytest.fixture
50
def
cleanup_userver_dumps(userver_dumps_root, request):
51
"""
52
To avoid leaking dumps between tests, cache_dump_dir must be cleaned after
53
each test. To observe the dumps, add a final `time.sleep(1000000)` to your
54
test locally. The returned function may also be used to clean dumps
55
manually as appropriate.
56
57
@see userver::dump::Dumper
58
@ingroup userver_testsuite_fixtures
59
"""
60
61
def
cleanup() -> None:
62
shutil.rmtree(userver_dumps_root, ignore_errors=
True
)
63
userver_dumps_root.mkdir()
64
65
request.addfinalizer(cleanup)
66
return
cleanup
67
68
69
@pytest.fixture(scope='session')
70
def
_userver_config_dumps(pytestconfig, userver_dumps_root):
71
def
patch_config(_config, config_vars) -> None:
72
config_vars[
'userver-dumps-root'
] = str(userver_dumps_root)
73
if
not
pytestconfig.option.service_runner_mode:
74
config_vars[
'userver-dumps-periodic'
] =
False
75
76
return
patch_config
testsuite
pytest_plugins
pytest_userver
plugins
dumps.py
Generated on
for userver by
Doxygen
1.17.0