async def test_consistent_hash_group_router_removed_routees_no_longer_receive_messages( ): router, routee1, _, _ = create_broadcast_group_router_with3_routees() await context.send(router, RemoveRoutee(routee1)) await context.send(router, Message('message1')) assert await context.request_future(routee1, 'received?', timeout) == 0
async def test_round_robin_group_router_routees_can_be_removed(): router, routee1, routee2, routee3 = create_router_with3_routees() await context.send(router, RemoveRoutee(routee1)) routees = await context.request_async(router, GetRoutees(), timeout) assert routee1 not in routees.pids assert routee2 in routees.pids assert routee3 in routees.pids
async def test_random_group_router_removed_routees_do_not_receive_messages(): router, routee1, _, _ = create_router_with3_routees() await context.send(router, RemoveRoutee(routee1)) for i in range(100): await context.send(router, i) assert await context.request_future(routee1, 'received?', timeout) is None
async def test_consistent_hash_group_router_routees_can_be_removed(): router, routee1, routee2, routee3 = create_broadcast_group_router_with3_routees( ) await context.send(router, RemoveRoutee(routee1)) routees = await context.request_future(router, GetRoutees(), timeout) assert routee1 not in routees.pids assert routee2 in routees.pids assert routee3 in routees.pids
async def test_consistent_hash_group_router_message_is_reassigned_when_routee_removed( ): router, routee1, routee2, _ = create_broadcast_group_router_with3_routees() await context.send(router, Message('message1')) assert await context.request_future(routee1, 'received?', timeout) == 1 await context.send(router, RemoveRoutee(routee1)) await context.send(router, Message('message1')) assert await context.request_future(routee2, 'received?', timeout) == 1
async def test_broadcast_group_router_removed_routees_no_longer_receive_messages( ): router, routee1, routee2, routee3 = create_broadcast_group_router_with3_routees( ) await context.send(router, 'first message') await context.send(router, RemoveRoutee(routee1)) await context.send(router, 'second message') assert await context.request_future(routee1, 'received?', timeout) == 'first message' assert await context.request_future(routee2, 'received?', timeout) == 'second message' assert await context.request_future(routee3, 'received?', timeout) == 'second message'
async def test_round_robin_group_router_removed_routees_no_longer_receive_messages(): router, routee1, routee2, routee3 = create_router_with3_routees() await context.send(router, '0') await context.send(router, '0') await context.send(router, '0') await context.send(router, RemoveRoutee(routee1)) # we should have 2 routees, so send 3 messages to ensure round robin happens await context.send(router, '3') await context.send(router, '3') await context.send(router, '3') assert await context.request_future(routee1, 'received?', timeout) == '0' assert await context.request_future(routee2, 'received?', timeout) == '3' assert await context.request_future(routee3, 'received?', timeout) == '3'