mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 21:51:50 +00:00 
			
		
		
		
	gh-129874: improve test_tasks in asyncio to use correct internal functions (#129890)
				
					
				
			This commit is contained in:
		
							parent
							
								
									09fe550ecc
								
							
						
					
					
						commit
						ce0cf7a73a
					
				
					 1 changed files with 45 additions and 19 deletions
				
			
		|  | @ -546,7 +546,7 @@ async def task(): | |||
|             try: | ||||
|                 await asyncio.sleep(10) | ||||
|             except asyncio.CancelledError: | ||||
|                 asyncio.current_task().uncancel() | ||||
|                 self.current_task().uncancel() | ||||
|                 await asyncio.sleep(10) | ||||
| 
 | ||||
|         try: | ||||
|  | @ -598,7 +598,7 @@ def test_uncancel_structured_blocks(self): | |||
|         loop = asyncio.new_event_loop() | ||||
| 
 | ||||
|         async def make_request_with_timeout(*, sleep: float, timeout: float): | ||||
|             task = asyncio.current_task() | ||||
|             task = self.current_task() | ||||
|             loop = task.get_loop() | ||||
| 
 | ||||
|             timed_out = False | ||||
|  | @ -1987,41 +1987,41 @@ async def coro(): | |||
|         self.assertIsNone(t2.result()) | ||||
| 
 | ||||
|     def test_current_task(self): | ||||
|         self.assertIsNone(asyncio.current_task(loop=self.loop)) | ||||
|         self.assertIsNone(self.current_task(loop=self.loop)) | ||||
| 
 | ||||
|         async def coro(loop): | ||||
|             self.assertIs(asyncio.current_task(), task) | ||||
|             self.assertIs(self.current_task(), task) | ||||
| 
 | ||||
|             self.assertIs(asyncio.current_task(None), task) | ||||
|             self.assertIs(asyncio.current_task(), task) | ||||
|             self.assertIs(self.current_task(None), task) | ||||
|             self.assertIs(self.current_task(), task) | ||||
| 
 | ||||
|         task = self.new_task(self.loop, coro(self.loop)) | ||||
|         self.loop.run_until_complete(task) | ||||
|         self.assertIsNone(asyncio.current_task(loop=self.loop)) | ||||
|         self.assertIsNone(self.current_task(loop=self.loop)) | ||||
| 
 | ||||
|     def test_current_task_with_interleaving_tasks(self): | ||||
|         self.assertIsNone(asyncio.current_task(loop=self.loop)) | ||||
|         self.assertIsNone(self.current_task(loop=self.loop)) | ||||
| 
 | ||||
|         fut1 = self.new_future(self.loop) | ||||
|         fut2 = self.new_future(self.loop) | ||||
| 
 | ||||
|         async def coro1(loop): | ||||
|             self.assertTrue(asyncio.current_task() is task1) | ||||
|             self.assertTrue(self.current_task() is task1) | ||||
|             await fut1 | ||||
|             self.assertTrue(asyncio.current_task() is task1) | ||||
|             self.assertTrue(self.current_task() is task1) | ||||
|             fut2.set_result(True) | ||||
| 
 | ||||
|         async def coro2(loop): | ||||
|             self.assertTrue(asyncio.current_task() is task2) | ||||
|             self.assertTrue(self.current_task() is task2) | ||||
|             fut1.set_result(True) | ||||
|             await fut2 | ||||
|             self.assertTrue(asyncio.current_task() is task2) | ||||
|             self.assertTrue(self.current_task() is task2) | ||||
| 
 | ||||
|         task1 = self.new_task(self.loop, coro1(self.loop)) | ||||
|         task2 = self.new_task(self.loop, coro2(self.loop)) | ||||
| 
 | ||||
|         self.loop.run_until_complete(asyncio.wait((task1, task2))) | ||||
|         self.assertIsNone(asyncio.current_task(loop=self.loop)) | ||||
|         self.assertIsNone(self.current_task(loop=self.loop)) | ||||
| 
 | ||||
|     # Some thorough tests for cancellation propagation through | ||||
|     # coroutines, tasks and wait(). | ||||
|  | @ -2833,6 +2833,7 @@ class CTask_CFuture_Tests(BaseTaskTests, SetMethodsTest, | |||
|     Task = getattr(tasks, '_CTask', None) | ||||
|     Future = getattr(futures, '_CFuture', None) | ||||
|     all_tasks = getattr(tasks, '_c_all_tasks', None) | ||||
|     current_task = staticmethod(getattr(tasks, '_c_current_task', None)) | ||||
| 
 | ||||
|     @support.refcount_test | ||||
|     def test_refleaks_in_task___init__(self): | ||||
|  | @ -2865,6 +2866,7 @@ class CTask_CFuture_SubclassTests(BaseTaskTests, test_utils.TestCase): | |||
|     Task = getattr(tasks, '_CTask', None) | ||||
|     Future = getattr(futures, '_CFuture', None) | ||||
|     all_tasks = getattr(tasks, '_c_all_tasks', None) | ||||
|     current_task = staticmethod(getattr(tasks, '_c_current_task', None)) | ||||
| 
 | ||||
| 
 | ||||
| @unittest.skipUnless(hasattr(tasks, '_CTask'), | ||||
|  | @ -2875,6 +2877,7 @@ class CTaskSubclass_PyFuture_Tests(BaseTaskTests, test_utils.TestCase): | |||
|     Task = getattr(tasks, '_CTask', None) | ||||
|     Future = futures._PyFuture | ||||
|     all_tasks = getattr(tasks, '_c_all_tasks', None) | ||||
|     current_task = staticmethod(getattr(tasks, '_c_current_task', None)) | ||||
| 
 | ||||
| 
 | ||||
| @unittest.skipUnless(hasattr(futures, '_CFuture'), | ||||
|  | @ -2885,6 +2888,7 @@ class PyTask_CFutureSubclass_Tests(BaseTaskTests, test_utils.TestCase): | |||
|     Future = getattr(futures, '_CFuture', None) | ||||
|     Task = tasks._PyTask | ||||
|     all_tasks = staticmethod(tasks._py_all_tasks) | ||||
|     current_task = staticmethod(tasks._py_current_task) | ||||
| 
 | ||||
| 
 | ||||
| @unittest.skipUnless(hasattr(tasks, '_CTask'), | ||||
|  | @ -2894,6 +2898,7 @@ class CTask_PyFuture_Tests(BaseTaskTests, test_utils.TestCase): | |||
|     Task = getattr(tasks, '_CTask', None) | ||||
|     Future = futures._PyFuture | ||||
|     all_tasks = getattr(tasks, '_c_all_tasks', None) | ||||
|     current_task = staticmethod(getattr(tasks, '_c_current_task', None)) | ||||
| 
 | ||||
| 
 | ||||
| @unittest.skipUnless(hasattr(futures, '_CFuture'), | ||||
|  | @ -2903,6 +2908,7 @@ class PyTask_CFuture_Tests(BaseTaskTests, test_utils.TestCase): | |||
|     Task = tasks._PyTask | ||||
|     Future = getattr(futures, '_CFuture', None) | ||||
|     all_tasks = staticmethod(tasks._py_all_tasks) | ||||
|     current_task = staticmethod(tasks._py_current_task) | ||||
| 
 | ||||
| 
 | ||||
| class PyTask_PyFuture_Tests(BaseTaskTests, SetMethodsTest, | ||||
|  | @ -2911,6 +2917,7 @@ class PyTask_PyFuture_Tests(BaseTaskTests, SetMethodsTest, | |||
|     Task = tasks._PyTask | ||||
|     Future = futures._PyFuture | ||||
|     all_tasks = staticmethod(tasks._py_all_tasks) | ||||
|     current_task = staticmethod(tasks._py_current_task) | ||||
| 
 | ||||
| 
 | ||||
| @add_subclass_tests | ||||
|  | @ -2918,6 +2925,7 @@ class PyTask_PyFuture_SubclassTests(BaseTaskTests, test_utils.TestCase): | |||
|     Task = tasks._PyTask | ||||
|     Future = futures._PyFuture | ||||
|     all_tasks = staticmethod(tasks._py_all_tasks) | ||||
|     current_task = staticmethod(tasks._py_current_task) | ||||
| 
 | ||||
| @unittest.skipUnless(hasattr(tasks, '_CTask'), | ||||
|                      'requires the C _asyncio module') | ||||
|  | @ -3004,44 +3012,60 @@ def done(self): | |||
|     def test__enter_task(self): | ||||
|         task = mock.Mock() | ||||
|         loop = mock.Mock() | ||||
|         self.assertIsNone(asyncio.current_task(loop)) | ||||
|         # _enter_task is called by Task.__step while the loop | ||||
|         # is running, so set the loop as the running loop | ||||
|         # for a more realistic test. | ||||
|         asyncio._set_running_loop(loop) | ||||
|         self.assertIsNone(self.current_task(loop)) | ||||
|         self._enter_task(loop, task) | ||||
|         self.assertIs(asyncio.current_task(loop), task) | ||||
|         self.assertIs(self.current_task(loop), task) | ||||
|         self._leave_task(loop, task) | ||||
|         asyncio._set_running_loop(None) | ||||
| 
 | ||||
|     def test__enter_task_failure(self): | ||||
|         task1 = mock.Mock() | ||||
|         task2 = mock.Mock() | ||||
|         loop = mock.Mock() | ||||
|         asyncio._set_running_loop(loop) | ||||
|         self._enter_task(loop, task1) | ||||
|         with self.assertRaises(RuntimeError): | ||||
|             self._enter_task(loop, task2) | ||||
|         self.assertIs(asyncio.current_task(loop), task1) | ||||
|         self.assertIs(self.current_task(loop), task1) | ||||
|         self._leave_task(loop, task1) | ||||
|         asyncio._set_running_loop(None) | ||||
| 
 | ||||
|     def test__leave_task(self): | ||||
|         task = mock.Mock() | ||||
|         loop = mock.Mock() | ||||
|         asyncio._set_running_loop(loop) | ||||
|         self._enter_task(loop, task) | ||||
|         self._leave_task(loop, task) | ||||
|         self.assertIsNone(asyncio.current_task(loop)) | ||||
|         self.assertIsNone(self.current_task(loop)) | ||||
|         asyncio._set_running_loop(None) | ||||
| 
 | ||||
|     def test__leave_task_failure1(self): | ||||
|         task1 = mock.Mock() | ||||
|         task2 = mock.Mock() | ||||
|         loop = mock.Mock() | ||||
|         # _leave_task is called by Task.__step while the loop | ||||
|         # is running, so set the loop as the running loop | ||||
|         # for a more realistic test. | ||||
|         asyncio._set_running_loop(loop) | ||||
|         self._enter_task(loop, task1) | ||||
|         with self.assertRaises(RuntimeError): | ||||
|             self._leave_task(loop, task2) | ||||
|         self.assertIs(asyncio.current_task(loop), task1) | ||||
|         self.assertIs(self.current_task(loop), task1) | ||||
|         self._leave_task(loop, task1) | ||||
|         asyncio._set_running_loop(None) | ||||
| 
 | ||||
|     def test__leave_task_failure2(self): | ||||
|         task = mock.Mock() | ||||
|         loop = mock.Mock() | ||||
|         asyncio._set_running_loop(loop) | ||||
|         with self.assertRaises(RuntimeError): | ||||
|             self._leave_task(loop, task) | ||||
|         self.assertIsNone(asyncio.current_task(loop)) | ||||
|         self.assertIsNone(self.current_task(loop)) | ||||
|         asyncio._set_running_loop(None) | ||||
| 
 | ||||
|     def test__unregister_task(self): | ||||
|         task = mock.Mock() | ||||
|  | @ -3064,6 +3088,7 @@ class PyIntrospectionTests(test_utils.TestCase, BaseTaskIntrospectionTests): | |||
|     _enter_task = staticmethod(tasks._py_enter_task) | ||||
|     _leave_task = staticmethod(tasks._py_leave_task) | ||||
|     all_tasks = staticmethod(tasks._py_all_tasks) | ||||
|     current_task = staticmethod(tasks._py_current_task) | ||||
| 
 | ||||
| 
 | ||||
| @unittest.skipUnless(hasattr(tasks, '_c_register_task'), | ||||
|  | @ -3075,6 +3100,7 @@ class CIntrospectionTests(test_utils.TestCase, BaseTaskIntrospectionTests): | |||
|         _enter_task = staticmethod(tasks._c_enter_task) | ||||
|         _leave_task = staticmethod(tasks._c_leave_task) | ||||
|         all_tasks = staticmethod(tasks._c_all_tasks) | ||||
|         current_task = staticmethod(tasks._c_current_task) | ||||
|     else: | ||||
|         _register_task = _unregister_task = _enter_task = _leave_task = None | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Kumar Aditya
						Kumar Aditya