36 lines
897 B
Python
36 lines
897 B
Python
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
|