summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorHelmut Grohne <helmut@subdivi.de>2024-02-16 15:20:00 +0100
committerHelmut Grohne <helmut@subdivi.de>2024-02-16 15:20:00 +0100
commit12f32219ff6a7e0eef6b914589d47066480404de (patch)
tree790ae738e5a0b2117143d5cec508ec4b37ea2a7d /tests
parentd8ecc510108426fba8f9a53e0d5fa54d5942e75f (diff)
downloadpython-linuxnamespaces-12f32219ff6a7e0eef6b914589d47066480404de.tar.gz
add an async read method to EventFD
Adding an async write does not work for values larger than 1, because the fd becomes writable once a value of 1 can be written, but a larger value might still cause EAGAIN putting us into a busy loop. Hitting the limit with writing ones is implausible, so async code can just use the synchronous write method.
Diffstat (limited to 'tests')
-rw-r--r--tests/test_simple.py15
1 files changed, 15 insertions, 0 deletions
diff --git a/tests/test_simple.py b/tests/test_simple.py
index 960bf02..5889e25 100644
--- a/tests/test_simple.py
+++ b/tests/test_simple.py
@@ -1,6 +1,7 @@
# Copyright 2024 Helmut Grohne <helmut@subdivi.de>
# SPDX-License-Identifier: GPL-3
+import asyncio
import functools
import os
import pathlib
@@ -48,6 +49,20 @@ class IDAllocationTest(unittest.TestCase):
self.assertIn(alloc.allocate(3), (1, 2))
+class EventFDTest(unittest.IsolatedAsyncioTestCase):
+ async def test_async(self) -> None:
+ efd = linuxnamespaces.EventFD(1, linuxnamespaces.EventFDFlags.NONBLOCK)
+ fut = efd.aread()
+ await asyncio.sleep(0.000001) # Let the loop run
+ self.assertTrue(fut.done())
+ self.assertEqual(await fut, 1)
+ fut = efd.aread()
+ await asyncio.sleep(0.000001) # Let the loop run
+ self.assertFalse(fut.done())
+ efd.write()
+ self.assertEqual(await fut, 1)
+
+
class UnshareTest(unittest.TestCase):
@pytest.mark.forked
def test_unshare_user(self) -> None: