diff options
| author | Carlton Gibson <carlton.gibson@noumenal.es> | 2024-05-28 19:36:34 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-05-28 14:36:34 -0300 |
| commit | f4a08b6ddfcacadfe9ff8364bf1c6c54f5dd370f (patch) | |
| tree | de5172d63a0df63b364bc16e7de34940fe3c1bf1 /tests/asgi | |
| parent | 99f23eaabd8da653f046dc1d19f5008c030a4f79 (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.py | 9 |
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. |
