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 socket
from socket import socket as _original_socket
import sys
import time
@@ -88,13 +89,20 @@ def socket_send(descriptor, data, flags=0):
return 0
raise
if sys.platform[:3]=="win":
# winsock sometimes throws ENOTCONN
SOCKET_BLOCKING = (errno.EWOULDBLOCK,)
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):
try:
return descriptor.recv(buflen, flags)
except socket.error, e:
if e[0] == errno.EWOULDBLOCK:
if e[0] in SOCKET_BLOCKING:
return None
if e[0] in SOCKET_CLOSED:
return ''

View File

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