diff --git a/greentest/test__greenness.py b/greentest/test__greenness.py new file mode 100644 index 0000000..48bcc42 --- /dev/null +++ b/greentest/test__greenness.py @@ -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)