mirror of
https://github.com/django/django.git
synced 2025-01-10 10:26:34 +00:00
[5.0.x] 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 in11393ab131
. Backport off4a08b6ddf
from main.
This commit is contained in:
parent
3a4a44978a
commit
dd3d0483ab
@ -477,6 +477,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.
|
||||
@ -486,9 +487,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.
|
||||
@ -524,6 +526,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()
|
||||
@ -531,7 +534,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.
|
||||
|
Loading…
Reference in New Issue
Block a user