Skip to content

Commit

Permalink
Add test for #265: "msg sent before stream opened"
Browse files Browse the repository at this point in the history
This always triggered the mentioned race condition.
We need to figure out the best approach to avoid this case.
  • Loading branch information
goodboy committed Nov 30, 2021
1 parent e17ed53 commit af8f54b
Showing 1 changed file with 54 additions and 0 deletions.
54 changes: 54 additions & 0 deletions tests/test_context_streams.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
'''
``async with ():`` inlined context-stream cancellation testing.
Verify the we raise errors when streams are opened prior to sync-opening
a ``tractor.Context`` beforehand.
'''
import trio
from trio.lowlevel import current_task
import tractor


@tractor.context
async def never_open_stream(

ctx: tractor.Context,

) -> None:
'''Bidir streaming endpoint which will stream
back any sequence it is sent item-wise.
'''
await ctx.started()
await trio.sleep_forever()


def test_no_far_end_stream_opened():
'''
This should exemplify the bug from:
https://github.com/goodboy/tractor/issues/265
'''
async def main():
async with tractor.open_nursery() as n:
portal = await n.start_actor(
'starts_no_stream',
enable_modules=[__name__],
)

async with (
portal.open_context(
never_open_stream,) as (ctx, sent),
ctx.open_stream() as stream,
):
assert sent is None

# XXX: so the question is whether
# this should error if the far end
# has not yet called `ctx.open_stream()`?
# If we decide to do that we need a synchronization
# message which is sent from that call?
await stream.send('yo')

trio.run(main)

0 comments on commit af8f54b

Please sign in to comment.