Converted test_socket to use the patcher, fixed minor divergence from standard library's behavior (which honestly looks to me like a stdlib unit test that isn't testing what it's supposed to, but what can ya do).

This commit is contained in:
Ryan Williams
2009-11-26 22:08:44 -05:00
parent 118490147a
commit c19b8ec24b
2 changed files with 19 additions and 12 deletions

View File

@@ -6,6 +6,7 @@ import errno
import os import os
import socket import socket
from socket import socket as _original_socket from socket import socket as _original_socket
import sys
import time import time
@@ -88,13 +89,20 @@ def socket_send(descriptor, data, flags=0):
return 0 return 0
raise raise
if sys.platform[:3]=="win":
# winsock sometimes throws ENOTCONN # winsock sometimes throws ENOTCONN
SOCKET_BLOCKING = (errno.EWOULDBLOCK,)
SOCKET_CLOSED = (errno.ECONNRESET, errno.ENOTCONN, errno.ESHUTDOWN) SOCKET_CLOSED = (errno.ECONNRESET, errno.ENOTCONN, errno.ESHUTDOWN)
else:
# oddly, on linux/darwin, an unconnected socket is expected to block,
# so we treat ENOTCONN the same as EWOULDBLOCK
SOCKET_BLOCKING = (errno.EWOULDBLOCK, errno.ENOTCONN)
SOCKET_CLOSED = (errno.ECONNRESET, errno.ESHUTDOWN)
def socket_recv(descriptor, buflen, flags=0): def socket_recv(descriptor, buflen, flags=0):
try: try:
return descriptor.recv(buflen, flags) return descriptor.recv(buflen, flags)
except socket.error, e: except socket.error, e:
if e[0] == errno.EWOULDBLOCK: if e[0] in SOCKET_BLOCKING:
return None return None
if e[0] in SOCKET_CLOSED: if e[0] in SOCKET_CLOSED:
return '' return ''

View File

@@ -1,20 +1,19 @@
#!/usr/bin/env python #!/usr/bin/env python
from test import test_socket from eventlet import patcher
from eventlet.green import socket from eventlet.green import socket
from eventlet.green import select from eventlet.green import select
from eventlet.green import time from eventlet.green import time
from eventlet.green import thread from eventlet.green import thread
from eventlet.green import threading from eventlet.green import threading
test_socket.socket = socket patcher.inject('test.test_socket',
test_socket.select = select globals(),
test_socket.time = time ('socket', socket),
test_socket.thread = thread ('select', select),
test_socket.threading = threading ('time', time),
('thread', thread),
from test.test_socket import * ('threading', threading))
if __name__ == "__main__": if __name__ == "__main__":
test_main() test_main()