async def test_lock_cancels_existing_task(self): with rate_limits.ManualRateLimiter() as limiter: limiter.throttle_task = asyncio.get_running_loop().create_future() old_task = limiter.throttle_task limiter.throttle(0) assert old_task.cancelled() assert old_task is not limiter.throttle_task
async def test_throttle_chews_queue_completing_futures(self, event_loop): with rate_limits.ManualRateLimiter() as limiter: futures = [event_loop.create_future() for _ in range(10)] limiter.queue = list(futures) await limiter.unlock_later(0.01) for i, future in enumerate(futures): assert future.done(), f"future {i} was not done"
async def test_acquire_places_future_on_queue_if_lock_task_is_not_None( self): with rate_limits.ManualRateLimiter() as limiter: limiter.throttle_task = asyncio.get_running_loop().create_future() assert len(limiter.queue) == 0 future = limiter.acquire() assert len(limiter.queue) == 1 assert future in limiter.queue assert not future.done()
async def test_acquire_returns_incomplete_future_if_throttle_task_is_not_None( self, event_loop): with rate_limits.ManualRateLimiter() as limiter: limiter.throttle_task = event_loop.create_future() future = MockFuture() event_loop.create_future = mock.Mock(return_value=future) await limiter.acquire() future.set_result.assert_not_called()
async def test_acquire_places_future_on_queue_if_throttle_task_is_not_None( self, event_loop): with rate_limits.ManualRateLimiter() as limiter: limiter.throttle_task = event_loop.create_future() future = MockFuture() event_loop.create_future = mock.Mock(return_value=future) assert len(limiter.queue) == 0 await limiter.acquire() assert len(limiter.queue) == 1 assert future in limiter.queue future.set_result.assert_not_called()
async def test_throttle_clears_throttle_task(self, event_loop): with rate_limits.ManualRateLimiter() as limiter: limiter.throttle_task = event_loop.create_future() await limiter.unlock_later(0) assert limiter.throttle_task is None
async def test_acquire_returns_incomplete_future_if_lock_task_is_not_None( self): with rate_limits.ManualRateLimiter() as limiter: limiter.throttle_task = asyncio.get_running_loop().create_future() future = limiter.acquire() assert not future.done()
async def test_acquire_returns_completed_future_if_lock_task_is_None(self): with rate_limits.ManualRateLimiter() as limiter: limiter.throttle_task = None future = limiter.acquire() assert future.done()