tractor/tests/test_local.py

53 lines
1.1 KiB
Python
Raw Permalink Normal View History

"""
Arbiter and "local" actor api
"""
2018-06-12 19:23:58 +00:00
import time
import pytest
2018-06-12 19:23:58 +00:00
import trio
import tractor
from conftest import tractor_test
2018-06-12 19:23:58 +00:00
@pytest.mark.trio
async def test_no_arbitter():
"""An arbitter must be established before any nurseries
can be created.
(In other words ``tractor.run`` must be used instead of ``trio.run`` as is
done by the ``pytest-trio`` plugin.)
"""
with pytest.raises(RuntimeError):
with tractor.open_nursery():
2018-06-12 19:23:58 +00:00
pass
def test_no_main():
"""An async function **must** be passed to ``tractor.run()``.
"""
with pytest.raises(TypeError):
tractor.run(None)
def test_local_actor_async_func(arb_addr):
2018-06-12 19:23:58 +00:00
"""Verify a simple async function in-process.
"""
nums = []
async def print_loop():
# arbiter is started in-proc if dne
assert tractor.current_actor().is_arbiter
2018-06-12 19:23:58 +00:00
for i in range(10):
nums.append(i)
2018-06-12 19:23:58 +00:00
await trio.sleep(0.1)
start = time.time()
tractor.run(print_loop, arbiter_addr=arb_addr)
2018-06-12 19:23:58 +00:00
# ensure the sleeps were actually awaited
assert time.time() - start >= 1
assert nums == list(range(10))