summaryrefslogtreecommitdiff
path: root/tests/asgi
diff options
context:
space:
mode:
authorCarlton Gibson <carlton.gibson@noumenal.es>2024-05-28 19:36:34 +0200
committerGitHub <noreply@github.com>2024-05-28 14:36:34 -0300
commitf4a08b6ddfcacadfe9ff8364bf1c6c54f5dd370f (patch)
treede5172d63a0df63b364bc16e7de34940fe3c1bf1 /tests/asgi
parent99f23eaabd8da653f046dc1d19f5008c030a4f79 (diff)
Refs #35059 -- Used asyncio.Event in ASGITest.test_asyncio_cancel_error to enforce specific interleaving.
Sleep call leads to a hard to trace error in CI. Using an Event is more deterministic, and should be less prone to environment variations. Bug in 11393ab1316f973c5fbb534305750740d909b4e4.
Diffstat (limited to 'tests/asgi')
-rw-r--r--tests/asgi/tests.py9
1 files changed, 6 insertions, 3 deletions
diff --git a/tests/asgi/tests.py b/tests/asgi/tests.py
index 963f45f798..658e9d853e 100644
--- a/tests/asgi/tests.py
+++ b/tests/asgi/tests.py
@@ -475,6 +475,7 @@ class ASGITest(SimpleTestCase):
sync_waiter.active_threads.clear()
async def test_asyncio_cancel_error(self):
+ view_started = asyncio.Event()
# Flag to check if the view was cancelled.
view_did_cancel = False
# Track request_finished signal.
@@ -484,9 +485,10 @@ class ASGITest(SimpleTestCase):
# A view that will listen for the cancelled error.
async def view(request):
- nonlocal view_did_cancel
+ nonlocal view_started, view_did_cancel
+ view_started.set()
try:
- await asyncio.sleep(0.2)
+ await asyncio.sleep(0.1)
return HttpResponse("Hello World!")
except asyncio.CancelledError:
# Set the flag.
@@ -522,6 +524,7 @@ class ASGITest(SimpleTestCase):
self.assertNotEqual(handler_call["thread"], threading.current_thread())
# The signal sender is the handler class.
self.assertEqual(handler_call["kwargs"], {"sender": TestASGIHandler})
+ view_started.clear()
# Request cycle with a disconnect before the view can respond.
application = TestASGIHandler()
@@ -529,7 +532,7 @@ class ASGITest(SimpleTestCase):
communicator = ApplicationCommunicator(application, scope)
await communicator.send_input({"type": "http.request"})
# Let the view actually start.
- await asyncio.sleep(0.1)
+ await view_started.wait()
# Disconnect the client.
await communicator.send_input({"type": "http.disconnect"})
# The handler should not send a response.