Skip to content

Commit 50184ea

Browse files
committed
Add test case
1 parent b9fa0ed commit 50184ea

File tree

1 file changed

+32
-0
lines changed

1 file changed

+32
-0
lines changed

Lib/test/test_asyncio/test_unix_events.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,38 @@ def test_close_on_finalizing(self, m_signal, m_sys):
267267
self.assertEqual(len(self.loop._signal_handlers), 0)
268268
self.assertFalse(m_signal.signal.called)
269269

270+
def test_wakeup_pipe_overflow(self):
271+
# On Linux, we find the self-socket can hold 278 bytes
272+
# (when those bytes are written in individual write() calls).
273+
# But let us test a bit harder than that.
274+
# Since Linux 2.6.11, pipe buffers default to 64K.
275+
COUNT_TO=64*1024
276+
277+
class SignalCounter:
278+
def __init__(self):
279+
self.n = 0
280+
281+
def handler(self):
282+
self.n += 1
283+
usr1 = SignalCounter()
284+
usr2 = SignalCounter()
285+
286+
async def test():
287+
loop = asyncio.events.get_running_loop()
288+
loop.add_signal_handler(signal.SIGUSR1, usr1.handler)
289+
loop.add_signal_handler(signal.SIGUSR2, usr2.handler)
290+
291+
pid = os.getpid()
292+
for i in range(COUNT_TO):
293+
os.kill(pid, signal.SIGUSR1)
294+
os.kill(pid, signal.SIGUSR2)
295+
asyncio.run(test())
296+
297+
# Note multiple instances of the same signal may be coalesced into 1.
298+
self.assertGreater(usr1.n, 0)
299+
300+
self.assertEqual(usr2.n, 1)
301+
270302

271303
@unittest.skipUnless(hasattr(socket, 'AF_UNIX'),
272304
'UNIX Sockets are not supported')

0 commit comments

Comments
 (0)