]> granicus.if.org Git - python/commitdiff
bpo-33562: Check the global asyncio event loop policy isn't set after any tests ...
authorBrett Cannon <brettcannon@users.noreply.github.com>
Sat, 2 Jun 2018 03:34:09 +0000 (20:34 -0700)
committerGitHub <noreply@github.com>
Sat, 2 Jun 2018 03:34:09 +0000 (20:34 -0700)
26 files changed:
Lib/test/libregrtest/save_env.py
Lib/test/support/__init__.py
Lib/test/test_asyncgen.py
Lib/test/test_asyncio/test_base_events.py
Lib/test/test_asyncio/test_buffered_proto.py
Lib/test/test_asyncio/test_context.py
Lib/test/test_asyncio/test_events.py
Lib/test/test_asyncio/test_futures.py
Lib/test/test_asyncio/test_locks.py
Lib/test/test_asyncio/test_pep492.py
Lib/test/test_asyncio/test_proactor_events.py
Lib/test/test_asyncio/test_queues.py
Lib/test/test_asyncio/test_selector_events.py
Lib/test/test_asyncio/test_server.py
Lib/test/test_asyncio/test_sslproto.py
Lib/test/test_asyncio/test_streams.py
Lib/test/test_asyncio/test_subprocess.py
Lib/test/test_asyncio/test_tasks.py
Lib/test/test_asyncio/test_unix_events.py
Lib/test/test_asyncio/test_windows_events.py
Lib/test/test_asyncio/test_windows_utils.py
Lib/test/test_contextlib_async.py
Lib/test/test_coroutines.py
Lib/test/test_pdb.py
Lib/test/test_sys_settrace.py
Misc/NEWS.d/next/Tests/2018-06-01-14-25-31.bpo-33562.GutEHf.rst [new file with mode: 0644]

index 45b365d456336a3b062227c77ad251129a7178aa..2313b71ec893b1e52d6fca47e2310c7933eac87a 100644 (file)
@@ -1,3 +1,4 @@
+import asyncio
 import builtins
 import locale
 import logging
@@ -65,8 +66,14 @@ class saved_test_environment:
                  'sysconfig._CONFIG_VARS', 'sysconfig._INSTALL_SCHEMES',
                  'files', 'locale', 'warnings.showwarning',
                  'shutil_archive_formats', 'shutil_unpack_formats',
+                 'asyncio.events._event_loop_policy',
                 )
 
+    def get_asyncio_events__event_loop_policy(self):
+        return support.maybe_get_event_loop_policy()
+    def restore_asyncio_events__event_loop_policy(self, policy):
+        asyncio.set_event_loop_policy(policy)
+
     def get_sys_argv(self):
         return id(sys.argv), sys.argv, sys.argv[:]
     def restore_sys_argv(self, saved_argv):
index a6fcb1bc14378406608b9a66f5c86c862b4ec5ab..1015dd9af202728e37d051484e2f8df72dee13ea 100644 (file)
@@ -3,6 +3,7 @@
 if __name__ != 'test.support':
     raise ImportError('support must be imported from the test package')
 
+import asyncio.events
 import collections.abc
 import contextlib
 import errno
@@ -2878,3 +2879,8 @@ class FakePath:
             raise self.path
         else:
             return self.path
+
+
+def maybe_get_event_loop_policy():
+    """Return the global event loop policy if one is set, else return None."""
+    return asyncio.events._event_loop_policy
index 5a36423dc97afa3e8e22ea50f390243d14d823b6..8dc76ce5c9a173c20688d5d0e138abad8043fb02 100644 (file)
@@ -328,6 +328,7 @@ class AsyncGenAsyncioTest(unittest.TestCase):
     def tearDown(self):
         self.loop.close()
         self.loop = None
+        asyncio.set_event_loop_policy(None)
 
     async def to_list(self, gen):
         res = []
index 11e9465d392179697657fbcfe221b7f3e6849cab..e333950e1e1c81250263dd32cbf3dc88ae8f8210 100644 (file)
@@ -24,6 +24,10 @@ MOCK_ANY = mock.ANY
 PY34 = sys.version_info >= (3, 4)
 
 
+def tearDownModule():
+    asyncio.set_event_loop_policy(None)
+
+
 def mock_socket_module():
     m_socket = mock.MagicMock(spec=socket)
     for name in (
index 89d3df72d98b6201090e55d8d6569f67f24b05d4..5a5e198b58f7466bd590ba20a639f6201b283f92 100644 (file)
@@ -4,6 +4,10 @@ import unittest
 from test.test_asyncio import functional as func_tests
 
 
+def tearDownModule():
+    asyncio.set_event_loop_policy(None)
+
+
 class ReceiveStuffProto(asyncio.BufferedProtocol):
     def __init__(self, cb, con_lost_fut):
         self.cb = cb
index 6abddd9f2515e1eca86428081c979a94d1bcce73..c309faa90062e1e8ee05bbf5ec9f5cb438e69f2d 100644 (file)
@@ -3,6 +3,10 @@ import decimal
 import unittest
 
 
+def tearDownModule():
+    asyncio.set_event_loop_policy(None)
+
+
 class DecimalContextTest(unittest.TestCase):
 
     def test_asyncio_task_decimal_context(self):
index 01ed47b3649558035b4d0c35b5b7e25f6417276e..11cd950df1cedb663a97a007559280229664a5f1 100644 (file)
@@ -37,6 +37,10 @@ from test.test_asyncio import utils as test_utils
 from test import support
 
 
+def tearDownModule():
+    asyncio.set_event_loop_policy(None)
+
+
 def osx_tiger():
     """Return True if the platform is Mac OS 10.4 or older."""
     if sys.platform != 'darwin':
index 8c837ad6b620b6380d4c5ca06494b68f9bc1882d..333935620909860fcf1fea15eaa9f52017e13d9b 100644 (file)
@@ -14,6 +14,10 @@ from test.test_asyncio import utils as test_utils
 from test import support
 
 
+def tearDownModule():
+    asyncio.set_event_loop_policy(None)
+
+
 def _fakefunc(f):
     return f
 
index b8d155e1d0340c98b37beb056bb5e06a7d7c815c..63bcb03a5371a9fe2a22640623ff62370d5b9c27 100644 (file)
@@ -16,6 +16,10 @@ STR_RGX_REPR = (
 RGX_REPR = re.compile(STR_RGX_REPR)
 
 
+def tearDownModule():
+    asyncio.set_event_loop_policy(None)
+
+
 class LockTests(test_utils.TestCase):
 
     def setUp(self):
index f2d588f54445a2cc939bb2674ec5f10888efb453..5edd36eb4c6b26544c4b7685decac53dc4eba412 100644 (file)
@@ -11,6 +11,10 @@ import asyncio
 from test.test_asyncio import utils as test_utils
 
 
+def tearDownModule():
+    asyncio.set_event_loop_policy(None)
+
+
 # Test that asyncio.iscoroutine() uses collections.abc.Coroutine
 class FakeCoro:
     def send(self, value):
index 6da6b4a34db81e352c53db952aab0fb3fc8266e1..26588634de04a7bb3ef2d048c4d12eda01b51fa8 100644 (file)
@@ -16,6 +16,10 @@ from test import support
 from test.test_asyncio import utils as test_utils
 
 
+def tearDownModule():
+    asyncio.set_event_loop_policy(None)
+
+
 def close_transport(transport):
     # Don't call transport.close() because the event loop and the IOCP proactor
     # are mocked
index efe719ed39a989707c46f993e0a5fb02591a57b0..eba66e790dcd0b09ff1369de4f5b84efc58f1f16 100644 (file)
@@ -7,6 +7,10 @@ import asyncio
 from test.test_asyncio import utils as test_utils
 
 
+def tearDownModule():
+    asyncio.set_event_loop_policy(None)
+
+
 class _QueueTestBase(test_utils.TestCase):
 
     def setUp(self):
index 68b6ee9abbf11a69f4ff29547ddbb7af1791177f..d380aa4138f8e90ba649c649208ae6f5327132e0 100644 (file)
@@ -22,6 +22,10 @@ from test.test_asyncio import utils as test_utils
 MOCK_ANY = mock.ANY
 
 
+def tearDownModule():
+    asyncio.set_event_loop_policy(None)
+
+
 class TestBaseSelectorEventLoop(BaseSelectorEventLoop):
 
     def _make_self_pipe(self):
index 034293cb3f596156b76b0cdd48a54d86e2e0e028..6de058a1e9bff5cadf31554557609c4f61d6d523 100644 (file)
@@ -9,6 +9,10 @@ from test.test_asyncio import utils as test_utils
 from test.test_asyncio import functional as func_tests
 
 
+def tearDownModule():
+    asyncio.set_event_loop_policy(None)
+
+
 class BaseStartServer(func_tests.FunctionalTestCaseMixin):
 
     def new_loop(self):
index fa9cbd56ed424b7f6a6a0a47322271bad856ca35..fb823f8b0ca43525a9b493a0944f15297e00a4a0 100644 (file)
@@ -17,6 +17,10 @@ from test.test_asyncio import utils as test_utils
 from test.test_asyncio import functional as func_tests
 
 
+def tearDownModule():
+    asyncio.set_event_loop_policy(None)
+
+
 @unittest.skipIf(ssl is None, 'No ssl module')
 class SslProtoHandshakeTests(test_utils.TestCase):
 
index 63fa13f79e2871fe5109917d5818defd69bc6d22..66d18738b316269ff282a3781afbfb17e5f468bb 100644 (file)
@@ -19,6 +19,10 @@ import asyncio
 from test.test_asyncio import utils as test_utils
 
 
+def tearDownModule():
+    asyncio.set_event_loop_policy(None)
+
+
 class StreamTests(test_utils.TestCase):
 
     DATA = b'line1\nline2\nline3\n'
index 235813aa977c1e625cad5a3ba5e9a393e529a952..2be311d97a93cfa8b986b309d04c27c783ebd8bf 100644 (file)
@@ -23,6 +23,11 @@ PROGRAM_CAT = [
               'data = sys.stdin.buffer.read()',
               'sys.stdout.buffer.write(data)'))]
 
+
+def tearDownModule():
+    asyncio.set_event_loop_policy(None)
+
+
 class TestSubprocessTransport(base_subprocess.BaseSubprocessTransport):
     def _start(self, *args, **kwargs):
         self._proc = mock.Mock()
index d95c98f0a6179516f96bc24e5d1a89c2aa4ceece..1c1a0ac01f5c16ee81165fc6b3f78fb66d111a5f 100644 (file)
@@ -24,6 +24,10 @@ from test import support
 from test.support.script_helper import assert_python_ok
 
 
+def tearDownModule():
+    asyncio.set_event_loop_policy(None)
+
+
 @asyncio.coroutine
 def coroutine_function():
     pass
index a01efedf66d909ffa67af444558c810353216445..29b345b142e8540e8c0501fa18f99a0c4ce7def5 100644 (file)
@@ -31,6 +31,10 @@ from test.test_asyncio import utils as test_utils
 MOCK_ANY = mock.ANY
 
 
+def tearDownModule():
+    asyncio.set_event_loop_policy(None)
+
+
 def close_pipe_transport(transport):
     # Don't call transport.close() because the event loop and the selector
     # are mocked
index e4ff7fc7dd4ee888138de51ea08e4defdb80b432..f92911ea3ba29c3db708838adb7ae2ccb3bf7f69 100644 (file)
@@ -15,6 +15,10 @@ from asyncio import windows_events
 from test.test_asyncio import utils as test_utils
 
 
+def tearDownModule():
+    asyncio.set_event_loop_policy(None)
+
+
 class UpperProto(asyncio.Protocol):
     def __init__(self):
         self.buf = []
index 9fc38586ab0023779e747d8fb91345020e528946..45c09bb4a2d3a0805e5c7b51455f2726cfe4a7a5 100644 (file)
@@ -10,10 +10,15 @@ if sys.platform != 'win32':
 import _overlapped
 import _winapi
 
+import asyncio
 from asyncio import windows_utils
 from test import support
 
 
+def tearDownModule():
+    asyncio.set_event_loop_policy(None)
+
+
 class PipeTests(unittest.TestCase):
 
     def test_pipe_overlapped(self):
index 879ddbe0e11853cef504f8111ed8762a51ba17d8..355955f9ab85bed5f6f893de7c5ba68328fee697 100644 (file)
@@ -18,7 +18,7 @@ def _async_test(func):
             return loop.run_until_complete(coro)
         finally:
             loop.close()
-            asyncio.set_event_loop(None)
+            asyncio.set_event_loop_policy(None)
     return wrapper
 
 
@@ -295,6 +295,7 @@ class TestAsyncExitStack(TestBaseExitStack, unittest.TestCase):
         self.loop = asyncio.new_event_loop()
         asyncio.set_event_loop(self.loop)
         self.addCleanup(self.loop.close)
+        self.addCleanup(asyncio.set_event_loop_policy, None)
 
     @_async_test
     async def test_async_callback(self):
index 47753e2ef03fef97690491229acb4cb5c74a0ab0..091b6626dcc8be328173635e9bf86224d37b123d 100644 (file)
@@ -2142,7 +2142,7 @@ class CoroAsyncIOCompatTest(unittest.TestCase):
             pass
         finally:
             loop.close()
-            asyncio.set_event_loop(None)
+            asyncio.set_event_loop_policy(None)
 
         self.assertEqual(buffer, [1, 2, 'MyException'])
 
index 9aa38e08dd6e6c204a9585d25adf0ed6d3a15823..4f9d28afd3b5b4976681c13dff4ccdc788f8c4da 100644 (file)
@@ -745,6 +745,7 @@ def test_pdb_next_command_for_coroutine():
     ...     loop = asyncio.new_event_loop()
     ...     loop.run_until_complete(test_main())
     ...     loop.close()
+    ...     asyncio.set_event_loop_policy(None)
     ...     print("finished")
 
     >>> with PdbTestInput(['step',
@@ -804,6 +805,7 @@ def test_pdb_next_command_for_asyncgen():
     ...     loop = asyncio.new_event_loop()
     ...     loop.run_until_complete(test_main())
     ...     loop.close()
+    ...     asyncio.set_event_loop_policy(None)
     ...     print("finished")
 
     >>> with PdbTestInput(['step',
@@ -915,6 +917,7 @@ def test_pdb_return_command_for_coroutine():
     ...     loop = asyncio.new_event_loop()
     ...     loop.run_until_complete(test_main())
     ...     loop.close()
+    ...     asyncio.set_event_loop_policy(None)
     ...     print("finished")
 
     >>> with PdbTestInput(['step',
@@ -1005,6 +1008,7 @@ def test_pdb_until_command_for_coroutine():
     ...     loop = asyncio.new_event_loop()
     ...     loop.run_until_complete(test_main())
     ...     loop.close()
+    ...     asyncio.set_event_loop_policy(None)
     ...     print("finished")
 
     >>> with PdbTestInput(['step',
index f5125a450511d2d56693bba60cbf21e82024f942..112ea877205abc03fa9c02da4f8e63fc649d7b05 100644 (file)
@@ -667,6 +667,7 @@ class JumpTestCase(unittest.TestCase):
             with self.assertRaisesRegex(*error):
                 asyncio.run(func(output))
         sys.settrace(None)
+        asyncio.set_event_loop_policy(None)
         self.compare_jump_output(expected, output)
 
     def jump_test(jumpFrom, jumpTo, expected, error=None, event='line'):
diff --git a/Misc/NEWS.d/next/Tests/2018-06-01-14-25-31.bpo-33562.GutEHf.rst b/Misc/NEWS.d/next/Tests/2018-06-01-14-25-31.bpo-33562.GutEHf.rst
new file mode 100644 (file)
index 0000000..f63e263
--- /dev/null
@@ -0,0 +1,2 @@
+Check that a global asyncio event loop policy is not left behind by any
+tests.