Patcher-ized test_socket_ssl and test_socketserver. Also patcher-ized SocketServer, which allows it to successfullly pass its unit tests, which it failed previously because it was making a call to non-greened select.select().

This commit is contained in:
Ryan Williams
2009-11-27 12:19:12 -05:00
parent 3a5f4ea908
commit 773633b687
3 changed files with 28 additions and 87 deletions

View File

@@ -1,59 +1,12 @@
__import_lst = ['__all__', '__version__', 'BaseServer', 'TCPServer', 'UDPServer', 'ForkingMixIn',
'ThreadingMixIn', 'BaseRequestHandler', 'StreamRequestHandler', 'DatagramRequestHandler']
__SocketServer = __import__('SocketServer')
for var in __import_lst:
exec "%s = __SocketServer.%s" % (var, var)
# QQQ ForkingMixIn should be fixed to use green waitpid?
from eventlet import patcher
from eventlet.green import socket
class TCPServer(TCPServer):
def __init__(self, server_address, RequestHandlerClass):
"""Constructor. May be extended, do not override."""
BaseServer.__init__(self, server_address, RequestHandlerClass)
self.socket = socket.socket(self.address_family,
self.socket_type)
self.server_bind()
self.server_activate()
class UDPServer(UDPServer):
def __init__(self, server_address, RequestHandlerClass):
"""Constructor. May be extended, do not override."""
BaseServer.__init__(self, server_address, RequestHandlerClass)
self.socket = socket.socket(self.address_family,
self.socket_type)
self.server_bind()
self.server_activate()
class ThreadingMixIn(ThreadingMixIn):
def process_request(self, request, client_address):
"""Start a new thread to process the request."""
from eventlet.green import select
from eventlet.green import threading
t = threading.Thread(target = self.process_request_thread,
args = (request, client_address))
if self.daemon_threads:
t.setDaemon (1)
t.start()
class ForkingUDPServer(ForkingMixIn, UDPServer): pass
class ForkingTCPServer(ForkingMixIn, TCPServer): pass
class ThreadingUDPServer(ThreadingMixIn, UDPServer): pass
class ThreadingTCPServer(ThreadingMixIn, TCPServer): pass
if hasattr(socket, 'AF_UNIX'):
class UnixStreamServer(TCPServer):
address_family = socket.AF_UNIX
class UnixDatagramServer(UDPServer):
address_family = socket.AF_UNIX
class ThreadingUnixStreamServer(ThreadingMixIn, UnixStreamServer): pass
class ThreadingUnixDatagramServer(ThreadingMixIn, UnixDatagramServer): pass
patcher.inject('SocketServer',
globals(),
('socket', socket),
('select', select),
('threading', threading))
# QQQ ForkingMixIn should be fixed to use green waitpid?

View File

@@ -1,20 +1,15 @@
#!/usr/bin/env python
from test import test_socket_ssl
from eventlet import patcher
from eventlet.green import socket
from eventlet.green import urllib
from eventlet.green import threading
test_socket_ssl.socket = socket
# bwahaha
import sys
sys.modules['urllib'] = urllib
sys.modules['threading'] = threading
# to get past the silly 'requires' check
test_socket_ssl.__name__ = '__main__'
from test.test_socket_ssl import *
patcher.inject('test.test_socket_ssl',
globals(),
('socket', socket),
('urllib', urllib),
('threading', threading))
if __name__ == "__main__":
test_main()

View File

@@ -1,30 +1,23 @@
#!/usr/bin/env python
# to get past the silly 'requires' check
from test import test_support
test_support.use_resources = ['network']
from eventlet import patcher
from eventlet.green import SocketServer
from eventlet.green import socket
from eventlet.green import select
from eventlet.green import time
from eventlet.green import threading
# need to override these modules before import so
# that classes inheriting from threading.Thread refer
# to the correct module
import sys
sys.modules['threading'] = threading
sys.modules['SocketServer'] = SocketServer
# to get past the silly 'requires' check
from test import test_support
test_support.use_resources = ['network']
from test import test_socketserver
test_socketserver.socket = socket
test_socketserver.select = select
test_socketserver.time = time
# skipping these tests for now
#from test.test_socketserver import *
patcher.inject('test.test_socketserver',
globals(),
('SocketServer', SocketServer),
('socket', socket),
('select', select),
('time', time),
('threading', threading))
if __name__ == "__main__":
pass#test_main()
test_main()