added test__greenness.py: use BaseHTTPServer and urllib2 in the same process

This commit is contained in:
Denis Bilenko
2008-10-28 13:51:53 +06:00
parent 20f965a835
commit d609ad1815

View File

@@ -0,0 +1,45 @@
"""Test than modules in eventlet.green package are indeed green.
To do that spawn green server and then access it using green socket.
If either operation would actuallu block the whole script would block and timeout.
"""
import unittest
from greentest import test_support
from eventlet.green import urllib2, BaseHTTPServer
from eventlet.api import spawn, kill
port = 18341
def start_http_server():
server_address = ('', port)
BaseHTTPServer.BaseHTTPRequestHandler.protocol_version = "HTTP/1.0"
httpd = BaseHTTPServer.HTTPServer(server_address, BaseHTTPServer.BaseHTTPRequestHandler)
sa = httpd.socket.getsockname()
#print "Serving HTTP on", sa[0], "port", sa[1], "..."
httpd.request_count = 0
def serve():
while 1:
httpd.handle_request()
httpd.request_count += 1
return spawn(serve), httpd
class TestGreenness(unittest.TestCase):
def setUp(self):
self.gthread, self.server = start_http_server()
#print 'Spawned the server'
def tearDown(self):
self.server.server_close()
kill(self.gthread)
def test_urllib2(self):
self.assertEqual(self.server.request_count, 0)
try:
urllib2.urlopen('http://127.0.0.1:%s' % port)
assert False, 'should not get there'
except urllib2.HTTPError, ex:
assert ex.code == 501, `ex`
self.assertEqual(self.server.request_count, 1)
if __name__ == '__main__':
test_support.run_unittest(TestGreenness)