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:
@@ -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 ''
|
||||||
|
@@ -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()
|
Reference in New Issue
Block a user