diff options
author | Pablo Galindo <Pablogsal@gmail.com> | 2017-10-17 14:14:41 (GMT) |
---|---|---|
committer | Serhiy Storchaka <storchaka@gmail.com> | 2017-10-17 14:14:41 (GMT) |
commit | 2c15b29aea5d6b9c61aa42d2c24a07ff1edb4b46 (patch) | |
tree | b6b9f24a447144147ddd1959f90016106c077c05 /Lib | |
parent | 552be9d7e64f91b8e4ba5b29cd5dcc442d56f92c (diff) | |
download | cpython-2c15b29aea5d6b9c61aa42d2c24a07ff1edb4b46.zip cpython-2c15b29aea5d6b9c61aa42d2c24a07ff1edb4b46.tar.gz cpython-2c15b29aea5d6b9c61aa42d2c24a07ff1edb4b46.tar.bz2 |
bpo-31786: Make functions in the select module blocking when timeout is a small negative value. (#4003)
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/test/test_poll.py | 22 | ||||
-rw-r--r-- | Lib/test/test_time.py | 3 |
2 files changed, 25 insertions, 0 deletions
diff --git a/Lib/test/test_poll.py b/Lib/test/test_poll.py index 16c2d2e..028dd2d 100644 --- a/Lib/test/test_poll.py +++ b/Lib/test/test_poll.py @@ -204,6 +204,28 @@ class PollTests(unittest.TestCase): os.write(w, b'spam') t.join() + @unittest.skipUnless(threading, 'Threading required for this test.') + @reap_threads + def test_poll_blocks_with_negative_ms(self): + for timeout_ms in [None, -1, -1.0, -0.1, -1e-100]: + # Create two file descriptors. This will be used to unlock + # the blocking call to poll.poll inside the thread + r, w = os.pipe() + pollster = select.poll() + pollster.register(r, select.POLLIN) + + poll_thread = threading.Thread(target=pollster.poll, args=(timeout_ms,)) + poll_thread.start() + poll_thread.join(timeout=0.1) + self.assertTrue(poll_thread.is_alive()) + + # Write to the pipe so pollster.poll unblocks and the thread ends. + os.write(w, b'spam') + poll_thread.join() + self.assertFalse(poll_thread.is_alive()) + os.close(r) + os.close(w) + def test_main(): run_unittest(PollTests) diff --git a/Lib/test/test_time.py b/Lib/test/test_time.py index c92e66b..61dda09 100644 --- a/Lib/test/test_time.py +++ b/Lib/test/test_time.py @@ -33,6 +33,8 @@ class _PyTime(enum.IntEnum): ROUND_CEILING = 1 # Round to nearest with ties going to nearest even integer ROUND_HALF_EVEN = 2 + # Round away from zero + ROUND_UP = 3 # Rounding modes supported by PyTime ROUNDING_MODES = ( @@ -40,6 +42,7 @@ ROUNDING_MODES = ( (_PyTime.ROUND_FLOOR, decimal.ROUND_FLOOR), (_PyTime.ROUND_CEILING, decimal.ROUND_CEILING), (_PyTime.ROUND_HALF_EVEN, decimal.ROUND_HALF_EVEN), + (_PyTime.ROUND_UP, decimal.ROUND_UP), ) |