Pass a config `tmp_dir: Path` to the runtime when testing
parent
5aaa7f47dc
commit
79b0db4449
|
@ -1 +0,0 @@
|
|||
TEST_CONFIG_DIR_PATH = '_testing'
|
|
@ -2,12 +2,10 @@ from contextlib import asynccontextmanager as acm
|
|||
from functools import partial
|
||||
import os
|
||||
from pathlib import Path
|
||||
from shutil import rmtree
|
||||
|
||||
import pytest
|
||||
import tractor
|
||||
from piker import (
|
||||
# log,
|
||||
config,
|
||||
)
|
||||
from piker.service import (
|
||||
|
@ -71,6 +69,7 @@ def ci_env() -> bool:
|
|||
|
||||
@acm
|
||||
async def _open_test_pikerd(
|
||||
tmpconfdir: str,
|
||||
reg_addr: tuple[str, int] | None = None,
|
||||
loglevel: str = 'warning',
|
||||
**kwargs,
|
||||
|
@ -97,6 +96,10 @@ async def _open_test_pikerd(
|
|||
maybe_open_pikerd(
|
||||
registry_addr=reg_addr,
|
||||
loglevel=loglevel,
|
||||
|
||||
tractor_runtime_overrides={
|
||||
'piker_test_dir': tmpconfdir,
|
||||
},
|
||||
**kwargs,
|
||||
) as service_manager,
|
||||
):
|
||||
|
@ -119,18 +122,40 @@ async def _open_test_pikerd(
|
|||
|
||||
@pytest.fixture
|
||||
def open_test_pikerd(
|
||||
request,
|
||||
request: pytest.FixtureRequest,
|
||||
tmp_path: Path,
|
||||
loglevel: str,
|
||||
):
|
||||
tmpconfdir: Path = tmp_path / '_testing'
|
||||
tmpconfdir.mkdir()
|
||||
tmpconfdir_str: str = str(tmpconfdir)
|
||||
|
||||
# NOTE: on linux the tmp config dir is generally located at:
|
||||
# /tmp/pytest-of-<username>/pytest-<run#>/test_<current_test_name>/
|
||||
# the default `pytest` config ensures that only the last 4 test
|
||||
# suite run's dirs will be persisted, otherwise they are removed:
|
||||
# https://docs.pytest.org/en/6.2.x/tmpdir.html#the-default-base-temporary-directory
|
||||
print(f'CURRENT TEST CONF DIR: {tmpconfdir}')
|
||||
|
||||
yield partial(
|
||||
_open_test_pikerd,
|
||||
|
||||
# pass in a unique temp dir for this test request
|
||||
# so that we can have multiple tests running (maybe in parallel)
|
||||
# bwitout clobbering each other's config state.
|
||||
tmpconfdir=tmpconfdir_str,
|
||||
|
||||
# bind in level from fixture, which is itself set by
|
||||
# `--ll <value>` cli flag.
|
||||
loglevel=loglevel,
|
||||
)
|
||||
|
||||
# NOTE: the `tmp_dir` fixture will wipe any files older then 3 test
|
||||
# sessions by default:
|
||||
# https://docs.pytest.org/en/6.2.x/tmpdir.html#the-default-base-temporary-directory
|
||||
# BUT, if we wanted to always wipe conf dir and all contained files,
|
||||
# rmtree(str(tmp_path))
|
||||
|
||||
# TODO: teardown checks such as,
|
||||
# - no leaked subprocs or shm buffers
|
||||
# - all requested container service are torn down
|
||||
|
@ -169,19 +194,3 @@ def open_test_pikerd_and_ems(
|
|||
loglevel,
|
||||
open_test_pikerd
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture(scope='module')
|
||||
def delete_testing_dir():
|
||||
'''
|
||||
This fixture removes the temp directory
|
||||
used for storing all config/ledger/pp data
|
||||
created during testing sessions. During test runs
|
||||
this file can be found in .config/piker/_testing
|
||||
|
||||
'''
|
||||
yield
|
||||
app_dir = Path(config.get_app_dir('piker')).resolve()
|
||||
if app_dir.is_dir():
|
||||
rmtree(str(app_dir))
|
||||
assert not app_dir.is_dir()
|
||||
|
|
|
@ -17,7 +17,6 @@ from functools import partial
|
|||
from piker.log import get_logger
|
||||
from piker.clearing._messages import Order
|
||||
from piker.pp import (
|
||||
open_trade_ledger,
|
||||
open_pps,
|
||||
)
|
||||
|
||||
|
@ -42,18 +41,19 @@ async def _async_main(
|
|||
price: int = 30000,
|
||||
executions: int = 1,
|
||||
size: float = 0.01,
|
||||
|
||||
# Assert options
|
||||
assert_entries: bool = False,
|
||||
assert_pps: bool = False,
|
||||
assert_zeroed_pps: bool = False,
|
||||
assert_msg: bool = False,
|
||||
|
||||
) -> None:
|
||||
'''
|
||||
Start piker, place a trade and assert data in
|
||||
pps stream, ledger and position table.
|
||||
|
||||
'''
|
||||
|
||||
oid: str = ''
|
||||
last_msg = {}
|
||||
|
||||
|
@ -136,7 +136,7 @@ def _assert(
|
|||
|
||||
|
||||
def _run_test_and_check(fn):
|
||||
'''
|
||||
'''
|
||||
Close position and assert empty position in pps
|
||||
|
||||
'''
|
||||
|
@ -150,8 +150,7 @@ def _run_test_and_check(fn):
|
|||
|
||||
|
||||
def test_buy(
|
||||
open_test_pikerd_and_ems: AsyncContextManager,
|
||||
delete_testing_dir
|
||||
open_test_pikerd_and_ems: AsyncContextManager,
|
||||
):
|
||||
'''
|
||||
Enter a trade and assert entries are made in pps and ledger files.
|
||||
|
@ -177,8 +176,7 @@ def test_buy(
|
|||
|
||||
|
||||
def test_sell(
|
||||
open_test_pikerd_and_ems: AsyncContextManager,
|
||||
delete_testing_dir
|
||||
open_test_pikerd_and_ems: AsyncContextManager,
|
||||
):
|
||||
'''
|
||||
Sell position and ensure pps are zeroed.
|
||||
|
@ -201,13 +199,13 @@ def test_sell(
|
|||
),
|
||||
)
|
||||
|
||||
|
||||
def test_multi_sell(
|
||||
open_test_pikerd_and_ems: AsyncContextManager,
|
||||
delete_testing_dir
|
||||
open_test_pikerd_and_ems: AsyncContextManager,
|
||||
):
|
||||
'''
|
||||
Make 5 market limit buy orders and
|
||||
then sell 5 slots at the same price.
|
||||
Make 5 market limit buy orders and
|
||||
then sell 5 slots at the same price.
|
||||
Finally, assert cleared positions.
|
||||
|
||||
'''
|
||||
|
|
Loading…
Reference in New Issue