Skip to content

Commit

Permalink
bpo-37137: Fix test_asyncio: use TestCase.set_event_loop() (GH-13779)
Browse files Browse the repository at this point in the history
Replace asyncio.set_event_loop() with TestCase.set_event_loop() of
test_asyncio.utils: this method calls TestCase.close_loop() which
waits until the executor completes, to avoid leaking dangling
threads.

Inherit from test_asyncio.utils.TestCase rather than
unittest.TestCase.
  • Loading branch information
vstinner committed Jun 3, 2019
1 parent 0b9956e commit 49a7e34
Showing 1 changed file with 8 additions and 13 deletions.
21 changes: 8 additions & 13 deletions Lib/test/test_asyncio/test_tasks.py
Expand Up @@ -2775,7 +2775,7 @@ def test__unregister_task_not_registered(self):
self.assertEqual(asyncio.all_tasks(loop), set())


class PyIntrospectionTests(unittest.TestCase, BaseTaskIntrospectionTests):
class PyIntrospectionTests(test_utils.TestCase, BaseTaskIntrospectionTests):
_register_task = staticmethod(tasks._py_register_task)
_unregister_task = staticmethod(tasks._py_unregister_task)
_enter_task = staticmethod(tasks._py_enter_task)
Expand All @@ -2784,7 +2784,7 @@ class PyIntrospectionTests(unittest.TestCase, BaseTaskIntrospectionTests):

@unittest.skipUnless(hasattr(tasks, '_c_register_task'),
'requires the C _asyncio module')
class CIntrospectionTests(unittest.TestCase, BaseTaskIntrospectionTests):
class CIntrospectionTests(test_utils.TestCase, BaseTaskIntrospectionTests):
if hasattr(tasks, '_c_register_task'):
_register_task = staticmethod(tasks._c_register_task)
_unregister_task = staticmethod(tasks._c_unregister_task)
Expand All @@ -2799,12 +2799,7 @@ class BaseCurrentLoopTests:
def setUp(self):
super().setUp()
self.loop = asyncio.new_event_loop()
asyncio.set_event_loop(self.loop)

def tearDown(self):
self.loop.close()
asyncio.set_event_loop(None)
super().tearDown()
self.set_event_loop(self.loop)

def new_task(self, coro):
raise NotImplementedError
Expand All @@ -2828,15 +2823,15 @@ async def coro():
self.assertIsNone(asyncio.current_task(loop=self.loop))


class PyCurrentLoopTests(BaseCurrentLoopTests, unittest.TestCase):
class PyCurrentLoopTests(BaseCurrentLoopTests, test_utils.TestCase):

def new_task(self, coro):
return tasks._PyTask(coro, loop=self.loop)


@unittest.skipUnless(hasattr(tasks, '_CTask'),
'requires the C _asyncio module')
class CCurrentLoopTests(BaseCurrentLoopTests, unittest.TestCase):
class CCurrentLoopTests(BaseCurrentLoopTests, test_utils.TestCase):

def new_task(self, coro):
return getattr(tasks, '_CTask')(coro, loop=self.loop)
Expand Down Expand Up @@ -3245,7 +3240,7 @@ class SleepTests(test_utils.TestCase):
def setUp(self):
super().setUp()
self.loop = asyncio.new_event_loop()
asyncio.set_event_loop(None)
self.set_event_loop(self.loop)

def tearDown(self):
self.loop.close()
Expand Down Expand Up @@ -3279,7 +3274,7 @@ class WaitTests(test_utils.TestCase):
def setUp(self):
super().setUp()
self.loop = asyncio.new_event_loop()
asyncio.set_event_loop(None)
self.set_event_loop(self.loop)

def tearDown(self):
self.loop.close()
Expand All @@ -3306,7 +3301,7 @@ class CompatibilityTests(test_utils.TestCase):
def setUp(self):
super().setUp()
self.loop = asyncio.new_event_loop()
asyncio.set_event_loop(None)
self.set_event_loop(self.loop)

def tearDown(self):
self.loop.close()
Expand Down

0 comments on commit 49a7e34

Please sign in to comment.