fix test_connect_timeout and test_connect_ex_timeout so they ignore errno.EHOSTUNREACH *and* errno.ENETUNREACH
This commit is contained in:
@@ -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()
|
||||||
|
Reference in New Issue
Block a user