X-Git-Url: https://review.fuel-infra.org/gitweb?a=blobdiff_plain;f=eventlet%2Ftests%2Ftest__greenness.py;fp=eventlet%2Ftests%2Ftest__greenness.py;h=7d9089089fada8a4624249ea1249c99facb29f32;hb=376ff3bfe7071cc0793184a378c4e74508fb0d97;hp=0000000000000000000000000000000000000000;hpb=70992db4bef26426213a8eae488be377cdd655ae;p=packages%2Ftrusty%2Fpython-eventlet.git diff --git a/eventlet/tests/test__greenness.py b/eventlet/tests/test__greenness.py new file mode 100644 index 0000000..7d90890 --- /dev/null +++ b/eventlet/tests/test__greenness.py @@ -0,0 +1,53 @@ +"""Test than modules in eventlet.green package are indeed green. +To do that spawn a green server and then access it using a green socket. +If either operation blocked the whole script would block and timeout. +""" +import unittest + +from eventlet.green import urllib2, BaseHTTPServer +from eventlet import spawn, kill + + +class QuietHandler(BaseHTTPServer.BaseHTTPRequestHandler): + protocol_version = "HTTP/1.0" + + def log_message(self, *args, **kw): + pass + + +def start_http_server(): + server_address = ('localhost', 0) + httpd = BaseHTTPServer.HTTPServer(server_address, QuietHandler) + sa = httpd.socket.getsockname() + # print("Serving HTTP on", sa[0], "port", sa[1], "...") + httpd.request_count = 0 + + def serve(): + # increment the request_count before handling the request because + # the send() for the response blocks (or at least appeared to be) + httpd.request_count += 1 + httpd.handle_request() + return spawn(serve), httpd, sa[1] + + +class TestGreenness(unittest.TestCase): + + def setUp(self): + self.gthread, self.server, self.port = 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' % self.port) + assert False, 'should not get there' + except urllib2.HTTPError as ex: + assert ex.code == 501, repr(ex) + self.assertEqual(self.server.request_count, 1) + +if __name__ == '__main__': + unittest.main()