Charles-François Natali <neolo...@free.fr> added the comment:
The test_poplib failures are likely due to this obvious race:
"""
def setUp(self):
[...]
threading.Thread(target=self.server, args=(self.evt,self.sock)).start()
time.sleep(.1)
[...]
def server(self, evt, serv):
serv.listen(5)
"""
If the server thread doesn't call listen() before sleep(.1) returns,
the client will receive ECONNREFUSED (the test fail consistently
without the sleep).
The patch attached fixes this, and also does the same type of cleanup
as for test_telnetlib in #11812.
----------
Added file: http://bugs.python.org/file23898/fix_poplib.diff
_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue13453>
_______________________________________
diff --git a/Lib/test/test_poplib.py b/Lib/test/test_poplib.py
--- a/Lib/test/test_poplib.py
+++ b/Lib/test/test_poplib.py
@@ -320,32 +320,34 @@
def setUp(self):
self.evt = threading.Event()
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- self.sock.settimeout(3)
+ self.sock.settimeout(60) # Safety net. Look issue 11812
self.port = test_support.bind_port(self.sock)
- threading.Thread(target=self.server, args=(self.evt,self.sock)).start()
- time.sleep(.1)
+ self.thread = threading.Thread(target=self.server,
args=(self.evt,self.sock))
+ self.thread.setDaemon(True)
+ self.thread.start()
+ self.evt.wait()
def tearDown(self):
- self.evt.wait()
+ self.thread.join()
+ del self.thread # Clear out any dangling Thread objects.
def server(self, evt, serv):
serv.listen(5)
+ evt.set()
try:
conn, addr = serv.accept()
+ conn.send(b"+ Hola mundo\n")
+ conn.close()
except socket.timeout:
pass
- else:
- conn.send(b"+ Hola mundo\n")
- conn.close()
finally:
serv.close()
- evt.set()
def testTimeoutDefault(self):
self.assertTrue(socket.getdefaulttimeout() is None)
socket.setdefaulttimeout(30)
try:
- pop = poplib.POP3("localhost", self.port)
+ pop = poplib.POP3(HOST, self.port)
finally:
socket.setdefaulttimeout(None)
self.assertEqual(pop.sock.gettimeout(), 30)
@@ -362,7 +364,7 @@
pop.sock.close()
def testTimeoutValue(self):
- pop = poplib.POP3("localhost", self.port, timeout=30)
+ pop = poplib.POP3(HOST, self.port, timeout=30)
self.assertEqual(pop.sock.gettimeout(), 30)
pop.sock.close()
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com