Skip to content

Commit 50656ca

Browse files
authored
Add benchmarks for sending masked WebSocket messages (#9559)
1 parent df0c461 commit 50656ca

File tree

1 file changed

+32
-13
lines changed

1 file changed

+32
-13
lines changed

tests/test_benchmarks_http_websocket.py

+32-13
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
def test_read_one_hundred_websocket_text_messages(
1818
loop: asyncio.AbstractEventLoop, benchmark: BenchmarkFixture
1919
) -> None:
20+
"""Benchmark reading 100 WebSocket text messages."""
2021
queue: DataQueue[WSMessage] = DataQueue(loop=loop)
2122
reader = WebSocketReader(queue, max_msg_size=2**16)
2223
raw_message = (
@@ -33,25 +34,27 @@ def _run() -> None:
3334
feed_data(raw_message)
3435

3536

36-
def test_send_one_hundred_websocket_text_messages(
37-
loop: asyncio.AbstractEventLoop, benchmark: BenchmarkFixture
38-
) -> None:
37+
class MockTransport(asyncio.Transport):
38+
"""Mock transport for testing that do no real I/O."""
3939

40-
class MockTransport(asyncio.Transport):
41-
"""Mock transport for testing that do no real I/O."""
40+
def is_closing(self) -> bool:
41+
"""Swallow is_closing."""
42+
return False
4243

43-
def is_closing(self) -> bool:
44-
"""Swallow is_closing."""
45-
return False
44+
def write(self, data: bytes) -> None:
45+
"""Swallow writes."""
4646

47-
def write(self, data: bytes) -> None:
48-
"""Swallow writes."""
4947

50-
class MockProtocol(BaseProtocol):
48+
class MockProtocol(BaseProtocol):
5149

52-
async def _drain_helper(self) -> None:
53-
"""Swallow drain."""
50+
async def _drain_helper(self) -> None:
51+
"""Swallow drain."""
5452

53+
54+
def test_send_one_hundred_websocket_text_messages(
55+
loop: asyncio.AbstractEventLoop, benchmark: BenchmarkFixture
56+
) -> None:
57+
"""Benchmark sending 100 WebSocket text messages."""
5558
writer = WebSocketWriter(MockProtocol(loop=loop), MockTransport())
5659
raw_message = b"Hello, World!" * 100
5760

@@ -62,3 +65,19 @@ async def _send_one_hundred_websocket_text_messages() -> None:
6265
@benchmark
6366
def _run() -> None:
6467
loop.run_until_complete(_send_one_hundred_websocket_text_messages())
68+
69+
70+
def test_send_one_hundred_websocket_text_messages_with_mask(
71+
loop: asyncio.AbstractEventLoop, benchmark: BenchmarkFixture
72+
) -> None:
73+
"""Benchmark sending 100 masked WebSocket text messages."""
74+
writer = WebSocketWriter(MockProtocol(loop=loop), MockTransport(), use_mask=True)
75+
raw_message = b"Hello, World!" * 100
76+
77+
async def _send_one_hundred_websocket_text_messages() -> None:
78+
for _ in range(100):
79+
await writer.send_frame(raw_message, WSMsgType.TEXT)
80+
81+
@benchmark
82+
def _run() -> None:
83+
loop.run_until_complete(_send_one_hundred_websocket_text_messages())

0 commit comments

Comments
 (0)