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
from eventlet.green import select
from eventlet.green import threading
patcher.inject('SocketServer',
globals(),
('socket', socket),
('select', select),
('threading', threading))
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 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
# 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()