fix test_connect_timeout and test_connect_ex_timeout so they ignore errno.EHOSTUNREACH *and* errno.ENETUNREACH

This commit is contained in:
Tavis Rudd
2010-02-24 19:49:34 -08:00
parent 8072243926
commit ad469044d2

View File

@@ -13,7 +13,7 @@ import array
def bufsized(sock, size=1): def bufsized(sock, size=1):
""" Resize both send and receive buffers on a socket. """ Resize both send and receive buffers on a socket.
Useful for testing trampoline. Returns the socket. Useful for testing trampoline. Returns the socket.
>>> import socket >>> import socket
>>> sock = bufsized(socket.socket(socket.AF_INET, socket.SOCK_STREAM)) >>> sock = bufsized(socket.socket(socket.AF_INET, socket.SOCK_STREAM))
""" """
@@ -40,7 +40,7 @@ class TestGreenIo(LimitedTestCase):
self.assertEqual(e.args[0], 'timed out') self.assertEqual(e.args[0], 'timed out')
except socket.error, e: except socket.error, e:
# unreachable is also a valid outcome # unreachable is also a valid outcome
if e[0] != errno.EHOSTUNREACH: if not e[0] in (errno.EHOSTUNREACH, errno.ENETUNREACH):
raise raise
def test_accept_timeout(self): def test_accept_timeout(self):
@@ -62,7 +62,8 @@ class TestGreenIo(LimitedTestCase):
s.settimeout(0.1) s.settimeout(0.1)
gs = greenio.GreenSocket(s) gs = greenio.GreenSocket(s)
e = gs.connect_ex(('192.0.2.1', 80)) e = gs.connect_ex(('192.0.2.1', 80))
self.assertEquals(e, errno.EAGAIN) if not e in (errno.EHOSTUNREACH, errno.ENETUNREACH):
self.assertEquals(e, errno.EAGAIN)
def test_recv_timeout(self): def test_recv_timeout(self):
listener = greenio.GreenSocket(socket.socket()) listener = greenio.GreenSocket(socket.socket())
@@ -249,16 +250,16 @@ class TestGreenIo(LimitedTestCase):
self.assertRaises(socket.error, conn.send, 'b') self.assertRaises(socket.error, conn.send, 'b')
finally: finally:
listener.close() listener.close()
def did_it_work(server): def did_it_work(server):
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('127.0.0.1', server.getsockname()[1])) client.connect(('127.0.0.1', server.getsockname()[1]))
fd = client.makefile() fd = client.makefile()
client.close() client.close()
assert fd.readline() == 'hello\n' assert fd.readline() == 'hello\n'
assert fd.read() == '' assert fd.read() == ''
fd.close() fd.close()
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR, 1) server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR, 1)
server.bind(('0.0.0.0', 0)) server.bind(('0.0.0.0', 0))
@@ -266,7 +267,7 @@ class TestGreenIo(LimitedTestCase):
killer = eventlet.spawn(accept_close_early, server) killer = eventlet.spawn(accept_close_early, server)
did_it_work(server) did_it_work(server)
killer.wait() killer.wait()
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR, 1) server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR, 1)
server.bind(('0.0.0.0', 0)) server.bind(('0.0.0.0', 0))
@@ -274,7 +275,7 @@ class TestGreenIo(LimitedTestCase):
killer = eventlet.spawn(accept_close_late, server) killer = eventlet.spawn(accept_close_late, server)
did_it_work(server) did_it_work(server)
killer.wait() killer.wait()
def test_del_closes_socket(self): def test_del_closes_socket(self):
def accept_once(listener): def accept_once(listener):
# delete/overwrite the original conn # delete/overwrite the original conn
@@ -298,11 +299,11 @@ class TestGreenIo(LimitedTestCase):
client.connect(('127.0.0.1', server.getsockname()[1])) client.connect(('127.0.0.1', server.getsockname()[1]))
fd = client.makefile() fd = client.makefile()
client.close() client.close()
assert fd.read() == 'hello\n' assert fd.read() == 'hello\n'
assert fd.read() == '' assert fd.read() == ''
killer.wait() killer.wait()
def test_full_duplex(self): def test_full_duplex(self):
large_data = '*' * 10 * min_buf_size() large_data = '*' * 10 * min_buf_size()
listener = socket.socket(socket.AF_INET, socket.SOCK_STREAM) listener = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
@@ -313,7 +314,7 @@ class TestGreenIo(LimitedTestCase):
def send_large(sock): def send_large(sock):
sock.sendall(large_data) sock.sendall(large_data)
def read_large(sock): def read_large(sock):
result = sock.recv(len(large_data)) result = sock.recv(len(large_data))
expected = 'hello world' expected = 'hello world'
@@ -332,7 +333,7 @@ class TestGreenIo(LimitedTestCase):
result += sock.recv(10) result += sock.recv(10)
self.assertEquals(result, expected) self.assertEquals(result, expected)
send_large_coro.wait() send_large_coro.wait()
server_evt = eventlet.spawn(server) server_evt = eventlet.spawn(server)
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('127.0.0.1', listener.getsockname()[1])) client.connect(('127.0.0.1', listener.getsockname()[1]))
@@ -343,7 +344,7 @@ class TestGreenIo(LimitedTestCase):
server_evt.wait() server_evt.wait()
large_evt.wait() large_evt.wait()
client.close() client.close()
def test_sendall(self): def test_sendall(self):
# test adapted from Marcus Cavanaugh's email # test adapted from Marcus Cavanaugh's email
# it may legitimately take a while, but will eventually complete # it may legitimately take a while, but will eventually complete
@@ -356,7 +357,7 @@ class TestGreenIo(LimitedTestCase):
sock = bufsized(sock, size=bufsize) sock = bufsized(sock, size=bufsize)
sock.sendall('x'*many_bytes) sock.sendall('x'*many_bytes)
sock.sendall('y'*second_bytes) sock.sendall('y'*second_bytes)
listener = socket.socket(socket.AF_INET, socket.SOCK_STREAM) listener = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
listener.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR, 1) listener.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR, 1)
listener.bind(("", 0)) listener.bind(("", 0))
@@ -371,20 +372,20 @@ class TestGreenIo(LimitedTestCase):
if data == '': if data == '':
break break
total += len(data) total += len(data)
total2 = 0 total2 = 0
while total < second_bytes: while total < second_bytes:
data = client.recv(second_bytes) data = client.recv(second_bytes)
if data == '': if data == '':
break break
total2 += len(data) total2 += len(data)
sender_coro.wait() sender_coro.wait()
client.close() client.close()
for bytes in (1000, 10000, 100000, 1000000): for bytes in (1000, 10000, 100000, 1000000):
test_sendall_impl(bytes) test_sendall_impl(bytes)
def test_wrap_socket(self): def test_wrap_socket(self):
try: try:
import ssl import ssl
@@ -396,7 +397,7 @@ class TestGreenIo(LimitedTestCase):
sock.bind(('127.0.0.1', 0)) sock.bind(('127.0.0.1', 0))
sock.listen(50) sock.listen(50)
ssl_sock = ssl.wrap_socket(sock) ssl_sock = ssl.wrap_socket(sock)
def test_timeout_and_final_write(self): def test_timeout_and_final_write(self):
# This test verifies that a write on a socket that we've # This test verifies that a write on a socket that we've
# stopped listening for doesn't result in an incorrect switch # stopped listening for doesn't result in an incorrect switch
@@ -405,11 +406,11 @@ class TestGreenIo(LimitedTestCase):
server.bind(('127.0.0.1', 0)) server.bind(('127.0.0.1', 0))
server.listen(50) server.listen(50)
bound_port = server.getsockname()[1] bound_port = server.getsockname()[1]
def sender(evt): def sender(evt):
s2, addr = server.accept() s2, addr = server.accept()
wrap_wfile = s2.makefile() wrap_wfile = s2.makefile()
eventlet.sleep(0.02) eventlet.sleep(0.02)
wrap_wfile.write('hi') wrap_wfile.write('hi')
s2.close() s2.close()
@@ -476,7 +477,7 @@ class TestGreenIoLong(LimitedTestCase):
@skip_with_pyevent @skip_with_pyevent
def test_multiple_readers(self): def test_multiple_readers(self):
recvsize = 2 * min_buf_size() recvsize = 2 * min_buf_size()
sendsize = 10 * recvsize sendsize = 10 * recvsize
# test that we can have multiple coroutines reading # test that we can have multiple coroutines reading
# from the same fd. We make no guarantees about which one gets which # from the same fd. We make no guarantees about which one gets which
# bytes, but they should both get at least some # bytes, but they should both get at least some
@@ -486,7 +487,7 @@ class TestGreenIoLong(LimitedTestCase):
if data == '': if data == '':
break break
results.append(data) results.append(data)
results1 = [] results1 = []
results2 = [] results2 = []
listener = socket.socket(socket.AF_INET, socket.SOCK_STREAM) listener = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
@@ -516,7 +517,7 @@ class TestGreenIoLong(LimitedTestCase):
listener.close() listener.close()
self.assert_(len(results1) > 0) self.assert_(len(results1) > 0)
self.assert_(len(results2) > 0) self.assert_(len(results2) > 0)
if __name__ == '__main__': if __name__ == '__main__':
main() main()