forked from goodboy/tractor
Adjust multi-daemon test to be more deterministic
parent
347591c348
commit
c0dd5d7ffc
|
@ -27,6 +27,17 @@ async def main():
|
||||||
|
|
||||||
# retreive results
|
# retreive results
|
||||||
async with p0.open_stream_from(breakpoint_forever) as stream:
|
async with p0.open_stream_from(breakpoint_forever) as stream:
|
||||||
|
|
||||||
|
# triggers the first name error
|
||||||
|
try:
|
||||||
|
await p1.run(name_error)
|
||||||
|
except tractor.RemoteActorError as rae:
|
||||||
|
assert rae.type is NameError
|
||||||
|
|
||||||
|
async for i in stream:
|
||||||
|
|
||||||
|
# a second time try the failing subactor and this tie
|
||||||
|
# let error propagate up to the parent/nursery.
|
||||||
await p1.run(name_error)
|
await p1.run(name_error)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -582,14 +582,14 @@ def test_multi_daemon_subactors(
|
||||||
|
|
||||||
child.expect(r"\(Pdb\+\+\)")
|
child.expect(r"\(Pdb\+\+\)")
|
||||||
|
|
||||||
# there is a race for which subactor will acquire
|
# there can be a race for which subactor will acquire
|
||||||
# the root's tty lock first
|
# the root's tty lock first so anticipate either crash
|
||||||
|
# message on the first entry.
|
||||||
before = str(child.before.decode())
|
|
||||||
|
|
||||||
bp_forever_msg = "Attaching pdb to actor: ('bp_forever'"
|
bp_forever_msg = "Attaching pdb to actor: ('bp_forever'"
|
||||||
name_error_msg = "NameError"
|
name_error_msg = "NameError: name 'doggypants' is not defined"
|
||||||
|
|
||||||
|
before = str(child.before.decode())
|
||||||
if bp_forever_msg in before:
|
if bp_forever_msg in before:
|
||||||
next_msg = name_error_msg
|
next_msg = name_error_msg
|
||||||
|
|
||||||
|
@ -611,9 +611,7 @@ def test_multi_daemon_subactors(
|
||||||
|
|
||||||
child.sendline('c')
|
child.sendline('c')
|
||||||
child.expect(r"\(Pdb\+\+\)")
|
child.expect(r"\(Pdb\+\+\)")
|
||||||
before = str(child.before.decode())
|
assert_before(child, [next_msg])
|
||||||
|
|
||||||
assert next_msg in before
|
|
||||||
|
|
||||||
# XXX: hooray the root clobbering the child here was fixed!
|
# XXX: hooray the root clobbering the child here was fixed!
|
||||||
# IMO, this demonstrates the true power of SC system design.
|
# IMO, this demonstrates the true power of SC system design.
|
||||||
|
@ -632,31 +630,49 @@ def test_multi_daemon_subactors(
|
||||||
if ctlc:
|
if ctlc:
|
||||||
do_ctlc(child)
|
do_ctlc(child)
|
||||||
|
|
||||||
# wait for final error in root
|
# expect another breakpoint actor entry
|
||||||
while True:
|
|
||||||
|
|
||||||
child.sendline('c')
|
child.sendline('c')
|
||||||
child.expect(r"\(Pdb\+\+\)")
|
child.expect(r"\(Pdb\+\+\)")
|
||||||
before = str(child.before.decode())
|
assert_before(child, [bp_forever_msg])
|
||||||
try:
|
|
||||||
|
|
||||||
# root error should be packed as remote error
|
|
||||||
assert "_exceptions.RemoteActorError: ('name_error'" in before
|
|
||||||
break
|
|
||||||
|
|
||||||
except AssertionError:
|
|
||||||
assert bp_forever_msg in before
|
|
||||||
|
|
||||||
if ctlc:
|
if ctlc:
|
||||||
do_ctlc(child)
|
do_ctlc(child)
|
||||||
|
|
||||||
|
# should crash with the 2nd name error (simulates
|
||||||
|
# a retry) and then the root eventually (boxed) errors
|
||||||
|
# after 1 or more further bp actor entries.
|
||||||
|
|
||||||
|
child.sendline('c')
|
||||||
|
child.expect(r"\(Pdb\+\+\)")
|
||||||
|
assert_before(child, [name_error_msg])
|
||||||
|
|
||||||
|
# wait for final error in root
|
||||||
|
# where it crashs with boxed error
|
||||||
|
while True:
|
||||||
try:
|
try:
|
||||||
child.sendline('c')
|
child.sendline('c')
|
||||||
child.expect(pexpect.EOF)
|
child.expect(r"\(Pdb\+\+\)")
|
||||||
|
assert_before(
|
||||||
|
child,
|
||||||
|
[bp_forever_msg]
|
||||||
|
)
|
||||||
|
except AssertionError:
|
||||||
|
break
|
||||||
|
|
||||||
except TIMEOUT:
|
# child.sendline('c')
|
||||||
# Failed to exit using continue..?
|
# assert_before(
|
||||||
child.sendline('q')
|
|
||||||
|
# child.sendline('c')
|
||||||
|
assert_before(
|
||||||
|
child,
|
||||||
|
[
|
||||||
|
# boxed error raised in root task
|
||||||
|
"Attaching to pdb in crashed actor: ('root'",
|
||||||
|
"_exceptions.RemoteActorError: ('name_error'",
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
child.sendline('c')
|
||||||
child.expect(pexpect.EOF)
|
child.expect(pexpect.EOF)
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue