Commit 33cb0396 authored by Victor Stinner's avatar Victor Stinner

Issue #23243: Close explicitly event loops in asyncio tests

parent 41ed958e
...@@ -590,6 +590,7 @@ class BaseEventLoopTests(test_utils.TestCase): ...@@ -590,6 +590,7 @@ class BaseEventLoopTests(test_utils.TestCase):
raise ValueError('spam') raise ValueError('spam')
loop = Loop() loop = Loop()
self.addCleanup(loop.close)
asyncio.set_event_loop(loop) asyncio.set_event_loop(loop)
def run_loop(): def run_loop():
......
...@@ -16,6 +16,7 @@ class ProactorSocketTransportTests(test_utils.TestCase): ...@@ -16,6 +16,7 @@ class ProactorSocketTransportTests(test_utils.TestCase):
def setUp(self): def setUp(self):
self.loop = self.new_test_loop() self.loop = self.new_test_loop()
self.addCleanup(self.loop.close)
self.proactor = mock.Mock() self.proactor = mock.Mock()
self.loop._proactor = self.proactor self.loop._proactor = self.proactor
self.protocol = test_utils.make_test_protocol(asyncio.Protocol) self.protocol = test_utils.make_test_protocol(asyncio.Protocol)
...@@ -459,6 +460,9 @@ class BaseProactorEventLoopTests(test_utils.TestCase): ...@@ -459,6 +460,9 @@ class BaseProactorEventLoopTests(test_utils.TestCase):
self.assertIsNone(self.loop._ssock) self.assertIsNone(self.loop._ssock)
self.assertIsNone(self.loop._csock) self.assertIsNone(self.loop._csock)
# Don't call close(): _close_self_pipe() cannot be called twice
self.loop._closed = True
def test_close(self): def test_close(self):
self.loop._close_self_pipe = mock.Mock() self.loop._close_self_pipe = mock.Mock()
self.loop.close() self.loop.close()
......
...@@ -24,6 +24,11 @@ MOCK_ANY = mock.ANY ...@@ -24,6 +24,11 @@ MOCK_ANY = mock.ANY
class TestBaseSelectorEventLoop(BaseSelectorEventLoop): class TestBaseSelectorEventLoop(BaseSelectorEventLoop):
def close(self):
# Don't call the close() method of the parent class, because the
# selector is mocked
self._closed = True
def _make_self_pipe(self): def _make_self_pipe(self):
self._ssock = mock.Mock() self._ssock = mock.Mock()
self._csock = mock.Mock() self._csock = mock.Mock()
...@@ -40,7 +45,7 @@ class BaseSelectorEventLoopTests(test_utils.TestCase): ...@@ -40,7 +45,7 @@ class BaseSelectorEventLoopTests(test_utils.TestCase):
self.selector = mock.Mock() self.selector = mock.Mock()
self.selector.select.return_value = [] self.selector.select.return_value = []
self.loop = TestBaseSelectorEventLoop(self.selector) self.loop = TestBaseSelectorEventLoop(self.selector)
self.set_event_loop(self.loop, cleanup=False) self.set_event_loop(self.loop)
def test_make_socket_transport(self): def test_make_socket_transport(self):
m = mock.Mock() m = mock.Mock()
...@@ -76,6 +81,15 @@ class BaseSelectorEventLoopTests(test_utils.TestCase): ...@@ -76,6 +81,15 @@ class BaseSelectorEventLoopTests(test_utils.TestCase):
self.loop._make_ssl_transport(m, m, m, m) self.loop._make_ssl_transport(m, m, m, m)
def test_close(self): def test_close(self):
class EventLoop(BaseSelectorEventLoop):
def _make_self_pipe(self):
self._ssock = mock.Mock()
self._csock = mock.Mock()
self._internal_fds += 1
self.loop = EventLoop(self.selector)
self.set_event_loop(self.loop)
ssock = self.loop._ssock ssock = self.loop._ssock
ssock.fileno.return_value = 7 ssock.fileno.return_value = 7
csock = self.loop._csock csock = self.loop._csock
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment