mirror of
https://github.com/python/cpython.git
synced 2025-11-01 18:51:43 +00:00
Issue #17992: Add timeouts to asyncore and asynchat tests so that they won't accidentally hang.
This commit is contained in:
parent
0d4f08cee3
commit
3cb09064a3
3 changed files with 35 additions and 10 deletions
|
|
@ -15,6 +15,7 @@ except ImportError:
|
|||
|
||||
HOST = support.HOST
|
||||
SERVER_QUIT = b'QUIT\n'
|
||||
TIMEOUT = 3.0
|
||||
|
||||
if threading:
|
||||
class echo_server(threading.Thread):
|
||||
|
|
@ -123,7 +124,9 @@ class TestAsynchat(unittest.TestCase):
|
|||
c.push(b"I'm not dead yet!" + term)
|
||||
c.push(SERVER_QUIT)
|
||||
asyncore.loop(use_poll=self.usepoll, count=300, timeout=.01)
|
||||
s.join()
|
||||
s.join(timeout=TIMEOUT)
|
||||
if s.is_alive():
|
||||
self.fail("join() timed out")
|
||||
|
||||
self.assertEqual(c.contents, [b"hello world", b"I'm not dead yet!"])
|
||||
|
||||
|
|
@ -154,7 +157,9 @@ class TestAsynchat(unittest.TestCase):
|
|||
c.push(data)
|
||||
c.push(SERVER_QUIT)
|
||||
asyncore.loop(use_poll=self.usepoll, count=300, timeout=.01)
|
||||
s.join()
|
||||
s.join(timeout=TIMEOUT)
|
||||
if s.is_alive():
|
||||
self.fail("join() timed out")
|
||||
|
||||
self.assertEqual(c.contents, [data[:termlen]])
|
||||
|
||||
|
|
@ -174,7 +179,9 @@ class TestAsynchat(unittest.TestCase):
|
|||
c.push(data)
|
||||
c.push(SERVER_QUIT)
|
||||
asyncore.loop(use_poll=self.usepoll, count=300, timeout=.01)
|
||||
s.join()
|
||||
s.join(timeout=TIMEOUT)
|
||||
if s.is_alive():
|
||||
self.fail("join() timed out")
|
||||
|
||||
self.assertEqual(c.contents, [])
|
||||
self.assertEqual(c.buffer, data)
|
||||
|
|
@ -186,7 +193,9 @@ class TestAsynchat(unittest.TestCase):
|
|||
p = asynchat.simple_producer(data+SERVER_QUIT, buffer_size=8)
|
||||
c.push_with_producer(p)
|
||||
asyncore.loop(use_poll=self.usepoll, count=300, timeout=.01)
|
||||
s.join()
|
||||
s.join(timeout=TIMEOUT)
|
||||
if s.is_alive():
|
||||
self.fail("join() timed out")
|
||||
|
||||
self.assertEqual(c.contents, [b"hello world", b"I'm not dead yet!"])
|
||||
|
||||
|
|
@ -196,7 +205,9 @@ class TestAsynchat(unittest.TestCase):
|
|||
data = b"hello world\nI'm not dead yet!\n"
|
||||
c.push_with_producer(data+SERVER_QUIT)
|
||||
asyncore.loop(use_poll=self.usepoll, count=300, timeout=.01)
|
||||
s.join()
|
||||
s.join(timeout=TIMEOUT)
|
||||
if s.is_alive():
|
||||
self.fail("join() timed out")
|
||||
|
||||
self.assertEqual(c.contents, [b"hello world", b"I'm not dead yet!"])
|
||||
|
||||
|
|
@ -207,7 +218,9 @@ class TestAsynchat(unittest.TestCase):
|
|||
c.push(b"hello world\n\nI'm not dead yet!\n")
|
||||
c.push(SERVER_QUIT)
|
||||
asyncore.loop(use_poll=self.usepoll, count=300, timeout=.01)
|
||||
s.join()
|
||||
s.join(timeout=TIMEOUT)
|
||||
if s.is_alive():
|
||||
self.fail("join() timed out")
|
||||
|
||||
self.assertEqual(c.contents,
|
||||
[b"hello world", b"", b"I'm not dead yet!"])
|
||||
|
|
@ -226,7 +239,9 @@ class TestAsynchat(unittest.TestCase):
|
|||
# where the server echoes all of its data before we can check that it
|
||||
# got any down below.
|
||||
s.start_resend_event.set()
|
||||
s.join()
|
||||
s.join(timeout=TIMEOUT)
|
||||
if s.is_alive():
|
||||
self.fail("join() timed out")
|
||||
|
||||
self.assertEqual(c.contents, [])
|
||||
# the server might have been able to send a byte or two back, but this
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ except ImportError:
|
|||
threading = None
|
||||
|
||||
HOST = support.HOST
|
||||
|
||||
TIMEOUT = 3
|
||||
HAS_UNIX_SOCKETS = hasattr(socket, 'AF_UNIX')
|
||||
|
||||
class dummysocket:
|
||||
|
|
@ -397,7 +397,10 @@ class DispatcherWithSendTests(unittest.TestCase):
|
|||
|
||||
self.assertEqual(cap.getvalue(), data*2)
|
||||
finally:
|
||||
t.join()
|
||||
t.join(timeout=TIMEOUT)
|
||||
if t.is_alive():
|
||||
self.fail("join() timed out")
|
||||
|
||||
|
||||
|
||||
class DispatcherWithSendTests_UsePoll(DispatcherWithSendTests):
|
||||
|
|
@ -789,7 +792,11 @@ class BaseTestAPI:
|
|||
t = threading.Thread(target=lambda: asyncore.loop(timeout=0.1,
|
||||
count=500))
|
||||
t.start()
|
||||
self.addCleanup(t.join)
|
||||
def cleanup():
|
||||
t.join(timeout=TIMEOUT)
|
||||
if t.is_alive():
|
||||
self.fail("join() timed out")
|
||||
self.addCleanup(cleanup)
|
||||
|
||||
s = socket.socket(self.family, socket.SOCK_STREAM)
|
||||
s.settimeout(.2)
|
||||
|
|
|
|||
|
|
@ -258,6 +258,9 @@ Library
|
|||
Tests
|
||||
-----
|
||||
|
||||
- Issue #17992: Add timeouts to asyncore and asynchat tests so that they won't
|
||||
accidentally hang.
|
||||
|
||||
- Issue #17833: Fix test_gdb failures seen on machines where debug symbols
|
||||
for glibc are available (seen on PPC64 Linux).
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue