Merge pull request #45 from tgoodlet/expose_tractor_test
Expose `tractor_test` for external useloglevel_to_tractor_tests
commit
58ebacf0f7
1
setup.py
1
setup.py
|
@ -35,6 +35,7 @@ setup(
|
|||
platforms=['linux'],
|
||||
packages=[
|
||||
'tractor',
|
||||
'tractor.testing',
|
||||
],
|
||||
install_requires=['msgpack', 'trio>0.8', 'async_generator', 'colorlog'],
|
||||
tests_require=['pytest'],
|
||||
|
|
|
@ -2,10 +2,10 @@
|
|||
``tractor`` testing!!
|
||||
"""
|
||||
import random
|
||||
from functools import partial, wraps
|
||||
|
||||
import pytest
|
||||
import tractor
|
||||
from tractor.testing import tractor_test
|
||||
|
||||
|
||||
pytest_plugins = ['pytester']
|
||||
|
@ -28,20 +28,3 @@ def loglevel(request):
|
|||
@pytest.fixture(scope='session')
|
||||
def arb_addr():
|
||||
return _arb_addr
|
||||
|
||||
|
||||
def tractor_test(fn):
|
||||
"""
|
||||
Use:
|
||||
|
||||
@tractor_test
|
||||
async def test_whatever():
|
||||
await ...
|
||||
"""
|
||||
@wraps(fn)
|
||||
def wrapper(*args, **kwargs):
|
||||
# __tracebackhide__ = True
|
||||
return tractor.run(
|
||||
partial(fn, *args, **kwargs), arbiter_addr=_arb_addr)
|
||||
|
||||
return wrapper
|
||||
|
|
|
@ -8,8 +8,6 @@ import subprocess
|
|||
|
||||
import pytest
|
||||
import tractor
|
||||
|
||||
|
||||
from conftest import tractor_test
|
||||
|
||||
|
||||
|
@ -72,14 +70,19 @@ async def test_cancel_remote_arbiter(daemon, arb_addr):
|
|||
pass
|
||||
|
||||
|
||||
@tractor_test
|
||||
async def test_register_duplicate_name(daemon):
|
||||
assert not tractor.current_actor().is_arbiter
|
||||
async with tractor.open_nursery() as n:
|
||||
p1 = await n.start_actor('doggy')
|
||||
p2 = await n.start_actor('doggy')
|
||||
async def test_register_duplicate_name(daemon, arb_addr):
|
||||
|
||||
async with tractor.wait_for_actor('doggy') as portal:
|
||||
assert portal.channel.uid in (p2.channel.uid, p1.channel.uid)
|
||||
async def main():
|
||||
assert not tractor.current_actor().is_arbiter
|
||||
async with tractor.open_nursery() as n:
|
||||
p1 = await n.start_actor('doggy')
|
||||
p2 = await n.start_actor('doggy')
|
||||
|
||||
await n.cancel()
|
||||
async with tractor.wait_for_actor('doggy') as portal:
|
||||
assert portal.channel.uid in (p2.channel.uid, p1.channel.uid)
|
||||
|
||||
await n.cancel()
|
||||
|
||||
# run it manually since we want to start **after**
|
||||
# the other "daemon" program
|
||||
tractor.run(main, arb_addr=arbiter_addr)
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
from ._tractor_test import tractor_test
|
|
@ -0,0 +1,29 @@
|
|||
import inspect
|
||||
from functools import partial, wraps
|
||||
|
||||
from .. import run
|
||||
|
||||
|
||||
__all__ = ['tractor_test']
|
||||
|
||||
|
||||
def tractor_test(fn):
|
||||
"""
|
||||
Use:
|
||||
|
||||
@tractor_test
|
||||
async def test_whatever():
|
||||
await ...
|
||||
|
||||
If an ``arb_addr`` (a socket addr tuple) is defined in the
|
||||
`pytest` fixture space it will be automatically injected.
|
||||
"""
|
||||
@wraps(fn)
|
||||
def wrapper(*args, arb_addr=None, **kwargs):
|
||||
# __tracebackhide__ = True
|
||||
if 'arb_addr' in inspect.signature(fn).parameters:
|
||||
kwargs['arb_addr'] = arb_addr
|
||||
return run(
|
||||
partial(fn, *args, **kwargs), arbiter_addr=arb_addr)
|
||||
|
||||
return wrapper
|
Loading…
Reference in New Issue