Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit ce0cf7a

Browse files
gh-129874: improve test_tasks in asyncio to use correct internal functions (#129890)
1 parent 09fe550 commit ce0cf7a

File tree

1 file changed

+45
-19
lines changed

1 file changed

+45
-19
lines changed

Lib/test/test_asyncio/test_tasks.py

Lines changed: 45 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -546,7 +546,7 @@ async def task():
546546
try:
547547
await asyncio.sleep(10)
548548
except asyncio.CancelledError:
549-
asyncio.current_task().uncancel()
549+
self.current_task().uncancel()
550550
await asyncio.sleep(10)
551551

552552
try:
@@ -598,7 +598,7 @@ def test_uncancel_structured_blocks(self):
598598
loop = asyncio.new_event_loop()
599599

600600
async def make_request_with_timeout(*, sleep: float, timeout: float):
601-
task = asyncio.current_task()
601+
task = self.current_task()
602602
loop = task.get_loop()
603603

604604
timed_out = False
@@ -1987,41 +1987,41 @@ async def coro():
19871987
self.assertIsNone(t2.result())
19881988

19891989
def test_current_task(self):
1990-
self.assertIsNone(asyncio.current_task(loop=self.loop))
1990+
self.assertIsNone(self.current_task(loop=self.loop))
19911991

19921992
async def coro(loop):
1993-
self.assertIs(asyncio.current_task(), task)
1993+
self.assertIs(self.current_task(), task)
19941994

1995-
self.assertIs(asyncio.current_task(None), task)
1996-
self.assertIs(asyncio.current_task(), task)
1995+
self.assertIs(self.current_task(None), task)
1996+
self.assertIs(self.current_task(), task)
19971997

19981998
task = self.new_task(self.loop, coro(self.loop))
19991999
self.loop.run_until_complete(task)
2000-
self.assertIsNone(asyncio.current_task(loop=self.loop))
2000+
self.assertIsNone(self.current_task(loop=self.loop))
20012001

20022002
def test_current_task_with_interleaving_tasks(self):
2003-
self.assertIsNone(asyncio.current_task(loop=self.loop))
2003+
self.assertIsNone(self.current_task(loop=self.loop))
20042004

20052005
fut1 = self.new_future(self.loop)
20062006
fut2 = self.new_future(self.loop)
20072007

20082008
async def coro1(loop):
2009-
self.assertTrue(asyncio.current_task() is task1)
2009+
self.assertTrue(self.current_task() is task1)
20102010
await fut1
2011-
self.assertTrue(asyncio.current_task() is task1)
2011+
self.assertTrue(self.current_task() is task1)
20122012
fut2.set_result(True)
20132013

20142014
async def coro2(loop):
2015-
self.assertTrue(asyncio.current_task() is task2)
2015+
self.assertTrue(self.current_task() is task2)
20162016
fut1.set_result(True)
20172017
await fut2
2018-
self.assertTrue(asyncio.current_task() is task2)
2018+
self.assertTrue(self.current_task() is task2)
20192019

20202020
task1 = self.new_task(self.loop, coro1(self.loop))
20212021
task2 = self.new_task(self.loop, coro2(self.loop))
20222022

20232023
self.loop.run_until_complete(asyncio.wait((task1, task2)))
2024-
self.assertIsNone(asyncio.current_task(loop=self.loop))
2024+
self.assertIsNone(self.current_task(loop=self.loop))
20252025

20262026
# Some thorough tests for cancellation propagation through
20272027
# coroutines, tasks and wait().
@@ -2833,6 +2833,7 @@ class CTask_CFuture_Tests(BaseTaskTests, SetMethodsTest,
28332833
Task = getattr(tasks, '_CTask', None)
28342834
Future = getattr(futures, '_CFuture', None)
28352835
all_tasks = getattr(tasks, '_c_all_tasks', None)
2836+
current_task = staticmethod(getattr(tasks, '_c_current_task', None))
28362837

28372838
@support.refcount_test
28382839
def test_refleaks_in_task___init__(self):
@@ -2865,6 +2866,7 @@ class CTask_CFuture_SubclassTests(BaseTaskTests, test_utils.TestCase):
28652866
Task = getattr(tasks, '_CTask', None)
28662867
Future = getattr(futures, '_CFuture', None)
28672868
all_tasks = getattr(tasks, '_c_all_tasks', None)
2869+
current_task = staticmethod(getattr(tasks, '_c_current_task', None))
28682870

28692871

28702872
@unittest.skipUnless(hasattr(tasks, '_CTask'),
@@ -2875,6 +2877,7 @@ class CTaskSubclass_PyFuture_Tests(BaseTaskTests, test_utils.TestCase):
28752877
Task = getattr(tasks, '_CTask', None)
28762878
Future = futures._PyFuture
28772879
all_tasks = getattr(tasks, '_c_all_tasks', None)
2880+
current_task = staticmethod(getattr(tasks, '_c_current_task', None))
28782881

28792882

28802883
@unittest.skipUnless(hasattr(futures, '_CFuture'),
@@ -2885,6 +2888,7 @@ class PyTask_CFutureSubclass_Tests(BaseTaskTests, test_utils.TestCase):
28852888
Future = getattr(futures, '_CFuture', None)
28862889
Task = tasks._PyTask
28872890
all_tasks = staticmethod(tasks._py_all_tasks)
2891+
current_task = staticmethod(tasks._py_current_task)
28882892

28892893

28902894
@unittest.skipUnless(hasattr(tasks, '_CTask'),
@@ -2894,6 +2898,7 @@ class CTask_PyFuture_Tests(BaseTaskTests, test_utils.TestCase):
28942898
Task = getattr(tasks, '_CTask', None)
28952899
Future = futures._PyFuture
28962900
all_tasks = getattr(tasks, '_c_all_tasks', None)
2901+
current_task = staticmethod(getattr(tasks, '_c_current_task', None))
28972902

28982903

28992904
@unittest.skipUnless(hasattr(futures, '_CFuture'),
@@ -2903,6 +2908,7 @@ class PyTask_CFuture_Tests(BaseTaskTests, test_utils.TestCase):
29032908
Task = tasks._PyTask
29042909
Future = getattr(futures, '_CFuture', None)
29052910
all_tasks = staticmethod(tasks._py_all_tasks)
2911+
current_task = staticmethod(tasks._py_current_task)
29062912

29072913

29082914
class PyTask_PyFuture_Tests(BaseTaskTests, SetMethodsTest,
@@ -2911,13 +2917,15 @@ class PyTask_PyFuture_Tests(BaseTaskTests, SetMethodsTest,
29112917
Task = tasks._PyTask
29122918
Future = futures._PyFuture
29132919
all_tasks = staticmethod(tasks._py_all_tasks)
2920+
current_task = staticmethod(tasks._py_current_task)
29142921

29152922

29162923
@add_subclass_tests
29172924
class PyTask_PyFuture_SubclassTests(BaseTaskTests, test_utils.TestCase):
29182925
Task = tasks._PyTask
29192926
Future = futures._PyFuture
29202927
all_tasks = staticmethod(tasks._py_all_tasks)
2928+
current_task = staticmethod(tasks._py_current_task)
29212929

29222930
@unittest.skipUnless(hasattr(tasks, '_CTask'),
29232931
'requires the C _asyncio module')
@@ -3004,44 +3012,60 @@ def done(self):
30043012
def test__enter_task(self):
30053013
task = mock.Mock()
30063014
loop = mock.Mock()
3007-
self.assertIsNone(asyncio.current_task(loop))
3015+
# _enter_task is called by Task.__step while the loop
3016+
# is running, so set the loop as the running loop
3017+
# for a more realistic test.
3018+
asyncio._set_running_loop(loop)
3019+
self.assertIsNone(self.current_task(loop))
30083020
self._enter_task(loop, task)
3009-
self.assertIs(asyncio.current_task(loop), task)
3021+
self.assertIs(self.current_task(loop), task)
30103022
self._leave_task(loop, task)
3023+
asyncio._set_running_loop(None)
30113024

30123025
def test__enter_task_failure(self):
30133026
task1 = mock.Mock()
30143027
task2 = mock.Mock()
30153028
loop = mock.Mock()
3029+
asyncio._set_running_loop(loop)
30163030
self._enter_task(loop, task1)
30173031
with self.assertRaises(RuntimeError):
30183032
self._enter_task(loop, task2)
3019-
self.assertIs(asyncio.current_task(loop), task1)
3033+
self.assertIs(self.current_task(loop), task1)
30203034
self._leave_task(loop, task1)
3035+
asyncio._set_running_loop(None)
30213036

30223037
def test__leave_task(self):
30233038
task = mock.Mock()
30243039
loop = mock.Mock()
3040+
asyncio._set_running_loop(loop)
30253041
self._enter_task(loop, task)
30263042
self._leave_task(loop, task)
3027-
self.assertIsNone(asyncio.current_task(loop))
3043+
self.assertIsNone(self.current_task(loop))
3044+
asyncio._set_running_loop(None)
30283045

30293046
def test__leave_task_failure1(self):
30303047
task1 = mock.Mock()
30313048
task2 = mock.Mock()
30323049
loop = mock.Mock()
3050+
# _leave_task is called by Task.__step while the loop
3051+
# is running, so set the loop as the running loop
3052+
# for a more realistic test.
3053+
asyncio._set_running_loop(loop)
30333054
self._enter_task(loop, task1)
30343055
with self.assertRaises(RuntimeError):
30353056
self._leave_task(loop, task2)
3036-
self.assertIs(asyncio.current_task(loop), task1)
3057+
self.assertIs(self.current_task(loop), task1)
30373058
self._leave_task(loop, task1)
3059+
asyncio._set_running_loop(None)
30383060

30393061
def test__leave_task_failure2(self):
30403062
task = mock.Mock()
30413063
loop = mock.Mock()
3064+
asyncio._set_running_loop(loop)
30423065
with self.assertRaises(RuntimeError):
30433066
self._leave_task(loop, task)
3044-
self.assertIsNone(asyncio.current_task(loop))
3067+
self.assertIsNone(self.current_task(loop))
3068+
asyncio._set_running_loop(None)
30453069

30463070
def test__unregister_task(self):
30473071
task = mock.Mock()
@@ -3064,6 +3088,7 @@ class PyIntrospectionTests(test_utils.TestCase, BaseTaskIntrospectionTests):
30643088
_enter_task = staticmethod(tasks._py_enter_task)
30653089
_leave_task = staticmethod(tasks._py_leave_task)
30663090
all_tasks = staticmethod(tasks._py_all_tasks)
3091+
current_task = staticmethod(tasks._py_current_task)
30673092

30683093

30693094
@unittest.skipUnless(hasattr(tasks, '_c_register_task'),
@@ -3075,6 +3100,7 @@ class CIntrospectionTests(test_utils.TestCase, BaseTaskIntrospectionTests):
30753100
_enter_task = staticmethod(tasks._c_enter_task)
30763101
_leave_task = staticmethod(tasks._c_leave_task)
30773102
all_tasks = staticmethod(tasks._c_all_tasks)
3103+
current_task = staticmethod(tasks._c_current_task)
30783104
else:
30793105
_register_task = _unregister_task = _enter_task = _leave_task = None
30803106

0 commit comments

Comments
 (0)