96 lines
2.2 KiB
Python
96 lines
2.2 KiB
Python
'''
|
|
Verify the `enable_transports` param drives various
|
|
per-root/sub-actor IPC endpoint/server settings.
|
|
|
|
'''
|
|
from __future__ import annotations
|
|
|
|
import pytest
|
|
import trio
|
|
import tractor
|
|
from tractor import (
|
|
Actor,
|
|
Portal,
|
|
ipc,
|
|
msg,
|
|
_state,
|
|
_addr,
|
|
)
|
|
|
|
@tractor.context
|
|
async def chk_tpts(
|
|
ctx: tractor.Context,
|
|
tpt_proto_key: str,
|
|
):
|
|
rtvars = _state._runtime_vars
|
|
assert (
|
|
tpt_proto_key
|
|
in
|
|
rtvars['_enable_tpts']
|
|
)
|
|
actor: Actor = tractor.current_actor()
|
|
spec: msg.types.SpawnSpec = actor._spawn_spec
|
|
assert spec._runtime_vars == rtvars
|
|
|
|
# ensure individual IPC ep-addr types
|
|
serv: ipc._server.Server = actor.ipc_server
|
|
addr: ipc._types.Address
|
|
for addr in serv.addrs:
|
|
assert addr.proto_key == tpt_proto_key
|
|
|
|
# Actor delegate-props enforcement
|
|
assert (
|
|
actor.accept_addrs
|
|
==
|
|
serv.accept_addrs
|
|
)
|
|
|
|
await ctx.started(serv.accept_addrs)
|
|
|
|
|
|
# TODO, parametrize over mis-matched-proto-typed `registry_addrs`
|
|
# since i seems to work in `piker` but not exactly sure if both tcp
|
|
# & uds are being deployed then?
|
|
#
|
|
@pytest.mark.parametrize(
|
|
'tpt_proto_key',
|
|
['tcp', 'uds'],
|
|
ids=lambda item: f'ipc_tpt={item!r}'
|
|
)
|
|
def test_root_passes_tpt_to_sub(
|
|
tpt_proto_key: str,
|
|
reg_addr: tuple,
|
|
debug_mode: bool,
|
|
):
|
|
async def main():
|
|
async with tractor.open_nursery(
|
|
enable_transports=[tpt_proto_key],
|
|
registry_addrs=[reg_addr],
|
|
debug_mode=debug_mode,
|
|
) as an:
|
|
|
|
assert (
|
|
tpt_proto_key
|
|
in
|
|
_state._runtime_vars['_enable_tpts']
|
|
)
|
|
|
|
ptl: Portal = await an.start_actor(
|
|
name='sub',
|
|
enable_modules=[__name__],
|
|
)
|
|
async with ptl.open_context(
|
|
chk_tpts,
|
|
tpt_proto_key=tpt_proto_key,
|
|
) as (ctx, accept_addrs):
|
|
|
|
uw_addr: tuple
|
|
for uw_addr in accept_addrs:
|
|
addr = _addr.wrap_address(uw_addr)
|
|
assert addr.is_valid
|
|
|
|
# shudown sub-actor(s)
|
|
await an.cancel()
|
|
|
|
trio.run(main)
|