diff options
author | Giampaolo Rodola <g.rodola@gmail.com> | 2017-06-09 20:20:41 (GMT) |
---|---|---|
committer | Victor Stinner <victor.stinner@gmail.com> | 2017-06-09 20:20:41 (GMT) |
commit | fbfaa6fd57f8dc8a3da808acb8422370fad2f27b (patch) | |
tree | 19698cdf7bc911be2a0332055abd6b6b5d5f629f /Lib/test | |
parent | 894a654a9caafb7a5bf63e1383a048041c05023b (diff) | |
download | cpython-fbfaa6fd57f8dc8a3da808acb8422370fad2f27b.zip cpython-fbfaa6fd57f8dc8a3da808acb8422370fad2f27b.tar.gz cpython-fbfaa6fd57f8dc8a3da808acb8422370fad2f27b.tar.bz2 |
bpo-30014: make poll-like selector's modify() method faster (#1030)
* #30014: make selectors.DefaultSelector.modify() faster by relying on selector's modify() method instead of un/register()ing the fd
* #30014: add unit test
* speedup poll/epoll/devpoll modify() method by using internal modify() call
* update doc
* address PR comments
* update NEWS entries
* use != instead of 'is not'
Diffstat (limited to 'Lib/test')
-rw-r--r-- | Lib/test/test_selectors.py | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/Lib/test/test_selectors.py b/Lib/test/test_selectors.py index 852b2fe..f2594a6 100644 --- a/Lib/test/test_selectors.py +++ b/Lib/test/test_selectors.py @@ -175,6 +175,33 @@ class BaseSelectorTestCase(unittest.TestCase): self.assertFalse(s.register.called) self.assertFalse(s.unregister.called) + def test_modify_unregister(self): + # Make sure the fd is unregister()ed in case of error on + # modify(): http://bugs.python.org/issue30014 + if self.SELECTOR.__name__ == 'EpollSelector': + patch = unittest.mock.patch( + 'selectors.EpollSelector._selector_cls') + elif self.SELECTOR.__name__ == 'PollSelector': + patch = unittest.mock.patch( + 'selectors.PollSelector._selector_cls') + elif self.SELECTOR.__name__ == 'DevpollSelector': + patch = unittest.mock.patch( + 'selectors.DevpollSelector._selector_cls') + else: + raise self.skipTest("") + + with patch as m: + m.return_value.modify = unittest.mock.Mock( + side_effect=ZeroDivisionError) + s = self.SELECTOR() + self.addCleanup(s.close) + rd, wr = self.make_socketpair() + s.register(rd, selectors.EVENT_READ) + self.assertEqual(len(s._map), 1) + with self.assertRaises(ZeroDivisionError): + s.modify(rd, selectors.EVENT_WRITE) + self.assertEqual(len(s._map), 0) + def test_close(self): s = self.SELECTOR() self.addCleanup(s.close) |