async def test_stream_buffer_complete(event_loop: asyncio.AbstractEventLoop) -> None: stream_buffer = StreamBuffer(EventWrapper) await stream_buffer.push(b"a" * 10) assert not stream_buffer.complete stream_buffer.set_complete() assert not stream_buffer.complete await stream_buffer.pop(20) assert stream_buffer.complete
async def test_stream_buffer_closed(event_loop: asyncio.AbstractEventLoop) -> None: stream_buffer = StreamBuffer(EventWrapper) await stream_buffer.close() await stream_buffer._is_empty.wait() await stream_buffer._paused.wait() assert True with pytest.raises(BufferCompleteError): await stream_buffer.push(b"a")
async def test_stream_buffer_drain(event_loop: asyncio.AbstractEventLoop) -> None: stream_buffer = StreamBuffer(EventWrapper) await stream_buffer.push(b"a" * 10) async def _drain() -> bool: await stream_buffer.drain() return True task = event_loop.create_task(_drain()) assert not task.done() # Blocked await stream_buffer.pop(20) assert (await task) is True
async def test_stream_buffer_push_and_pop(event_loop: asyncio.AbstractEventLoop) -> None: stream_buffer = StreamBuffer(EventWrapper) async def _push_over_limit() -> bool: await stream_buffer.push(b"a" * (BUFFER_HIGH_WATER + 1)) return True task = event_loop.create_task(_push_over_limit()) assert not task.done() # Blocked as over high water await stream_buffer.pop(BUFFER_HIGH_WATER // 4) assert not task.done() # Blocked as over low water await stream_buffer.pop(BUFFER_HIGH_WATER // 4) assert (await task) is True