import asyncio from restreamer.broadcaster import ChannelBroadcaster async def test_publish_fans_out_to_all_subscribers() -> None: broadcaster = ChannelBroadcaster("test") first = broadcaster.subscribe() second = broadcaster.subscribe() broadcaster.publish(b"chunk") assert await first.get() == b"chunk" assert await second.get() == b"chunk" async def test_unsubscribe_stops_receiving() -> None: broadcaster = ChannelBroadcaster("test") queue = broadcaster.subscribe() broadcaster.unsubscribe(queue) broadcaster.publish(b"chunk") assert queue.empty() async def test_full_queue_drops_slow_subscriber() -> None: broadcaster = ChannelBroadcaster("test") queue = broadcaster.subscribe() for _ in range(queue.maxsize + 1): broadcaster.publish(b"x") await asyncio.sleep(0) assert broadcaster.subscriber_count == 0