forked from goodboy/tractor
				
			Add a simpler cancel test
							parent
							
								
									d9aa6119e1
								
							
						
					
					
						commit
						590267ded2
					
				| 
						 | 
				
			
			@ -3,6 +3,7 @@ Actor model API testing
 | 
			
		|||
"""
 | 
			
		||||
import time
 | 
			
		||||
from functools import partial, wraps
 | 
			
		||||
from itertools import repeat
 | 
			
		||||
import random
 | 
			
		||||
 | 
			
		||||
import pytest
 | 
			
		||||
| 
						 | 
				
			
			@ -64,10 +65,12 @@ def test_local_actor_async_func():
 | 
			
		|||
    assert nums == list(range(10))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
statespace = {'doggy': 10, 'kitty': 4}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# NOTE: this func must be defined at module level in order for the
 | 
			
		||||
# interal pickling infra of the forkserver to work
 | 
			
		||||
async def spawn(is_arbiter):
 | 
			
		||||
    statespace = {'doggy': 10, 'kitty': 4}
 | 
			
		||||
    namespaces = [__name__]
 | 
			
		||||
 | 
			
		||||
    await trio.sleep(0.1)
 | 
			
		||||
| 
						 | 
				
			
			@ -97,7 +100,6 @@ async def spawn(is_arbiter):
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
def test_local_arbiter_subactor_global_state():
 | 
			
		||||
    statespace = {'doggy': 10, 'kitty': 4}
 | 
			
		||||
    result = tractor.run(
 | 
			
		||||
        spawn,
 | 
			
		||||
        True,
 | 
			
		||||
| 
						 | 
				
			
			@ -187,6 +189,30 @@ def test_remote_error():
 | 
			
		|||
        tractor.run(main, arbiter_addr=_arb_addr)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
async def stream_forever():
 | 
			
		||||
    for i in repeat("I can see these little future bubble things"):
 | 
			
		||||
        yield i
 | 
			
		||||
        await trio.sleep(0.01)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@tractor_test
 | 
			
		||||
async def test_cancel_infinite_streamer():
 | 
			
		||||
 | 
			
		||||
    # stream for at most 5 seconds
 | 
			
		||||
    with trio.move_on_after(1) as cancel_scope:
 | 
			
		||||
        async with tractor.open_nursery() as n:
 | 
			
		||||
            portal = await n.start_actor(
 | 
			
		||||
                f'donny',
 | 
			
		||||
                rpc_module_paths=[__name__],
 | 
			
		||||
                outlive_main=True
 | 
			
		||||
            )
 | 
			
		||||
            async for letter in await portal.run(__name__, 'stream_forever'):
 | 
			
		||||
                print(letter)
 | 
			
		||||
 | 
			
		||||
    assert cancel_scope.cancelled_caught
 | 
			
		||||
    assert n.cancelled
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@tractor_test
 | 
			
		||||
async def test_one_cancels_all():
 | 
			
		||||
    """Verify one failed actor causes all others in the nursery
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue