mirror of
https://github.com/django/django.git
synced 2025-03-14 03:10:45 +00:00
[5.1.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 in 11393ab1316f973c5fbb534305750740d909b4e4. Backport of f4a08b6ddfcacadfe9ff8364bf1c6c54f5dd370f from main.
This commit is contained in:
parent
3fb3b8a4fd
commit
38248588f6
@ -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.
|
||||
|
Loading…
x
Reference in New Issue
Block a user