Commit 3a22b4fa authored by Mark Dickinson's avatar Mark Dickinson

Issue #7207: Fix race condition in telnetlib test; should stop test failures on OS X 10.6.

parent cc6bf514
...@@ -12,12 +12,14 @@ from test import support ...@@ -12,12 +12,14 @@ from test import support
HOST = support.HOST HOST = support.HOST
EOF_sigil = object() EOF_sigil = object()
def server(evt, serv, dataq=None): def server(evt, serv, dataq=None, test_done=None):
""" Open a tcp server in three steps """ Open a tcp server in four steps
1) set evt to true to let the parent know we are ready 1) set evt to true to let the parent know we are ready
2) [optional] if is not False, write the list of data from dataq.get() 2) [optional] if is not False, write the list of data from dataq.get()
to the socket. to the socket.
3) set evt to true to let the parent know we're done 3) [optional] if test_done is not None, it's an event; wait
for parent to set test_done before closing connection
4) set evt to true to let the parent know we're done
""" """
serv.listen(5) serv.listen(5)
evt.set() evt.set()
...@@ -39,6 +41,8 @@ def server(evt, serv, dataq=None): ...@@ -39,6 +41,8 @@ def server(evt, serv, dataq=None):
except socket.timeout: except socket.timeout:
pass pass
finally: finally:
if test_done is not None:
test_done.wait()
serv.close() serv.close()
evt.set() evt.set()
...@@ -324,8 +328,24 @@ class TelnetSockSendall(telnetlib.Telnet): ...@@ -324,8 +328,24 @@ class TelnetSockSendall(telnetlib.Telnet):
class WriteTests(TestCase): class WriteTests(TestCase):
'''The only thing that write does is replace each tl.IAC for '''The only thing that write does is replace each tl.IAC for
tl.IAC+tl.IAC''' tl.IAC+tl.IAC'''
setUp = _read_setUp def setUp(self):
tearDown = _read_tearDown self.evt = threading.Event()
self.test_done = threading.Event()
self.dataq = queue.Queue()
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.sock.settimeout(3)
self.port = support.bind_port(self.sock)
self.thread = threading.Thread(target=server, args=(
self.evt, self.sock, self.dataq, self.test_done))
self.thread.start()
self.evt.wait()
self.evt.clear()
time.sleep(.1)
def tearDown(self):
self.test_done.set()
self.evt.wait()
self.thread.join()
def _test_write(self, data): def _test_write(self, data):
self.telnet.sock._raw_sent = b'' self.telnet.sock._raw_sent = b''
......
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