Mercurial > hg > simpypi
comparison tests/testserver.py @ 46:5a89eb717987
add a test server for easy_install testing
author | Jeff Hammel <jhammel@mozilla.com> |
---|---|
date | Thu, 01 Mar 2012 13:36:38 -0800 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
45:909f577d2abb | 46:5a89eb717987 |
---|---|
1 import threading | |
2 from wsgiref.simple_server import make_server | |
3 | |
4 class TestWSGIServer(object): | |
5 """threaded WSGI server for in process testing""" | |
6 | |
7 def __init__(self, app, host, port): | |
8 self.app = app | |
9 self.host = host | |
10 self.port = int(port) | |
11 self.httpd = None | |
12 | |
13 def start(self): | |
14 self.httpd = make_server(self.host, self.port, self.app) | |
15 self.server = threading.Thread(target=self.httpd.serve_forever) | |
16 self.server.setDaemon(True) # don't hang on exit | |
17 self.server.start() | |
18 | |
19 def stop(self): | |
20 if self.httpd: | |
21 ### FIXME: There is no shutdown() method in Python 2.4... | |
22 try: | |
23 self.httpd.shutdown() | |
24 except AttributeError: | |
25 pass | |
26 self.httpd = None | |
27 | |
28 __del__ = stop | |
29 | |
30 if __name__ == '__main__': | |
31 def app(environ, start_response): | |
32 content = 'Hello world!' | |
33 status = '200 OK' | |
34 headers = [('Content-Type', 'text/plain'), | |
35 ('Content-Length', str(len(content)))] | |
36 start_response(status, headers) | |
37 return [content] | |
38 port = 8080 | |
39 server = TestWSGIServer(app, 'localhost', port) | |
40 server.start() | |
41 f = urllib2.urlopen('http://localhost:%d/' % port) | |
42 response = f.read() | |
43 assert response == 'Hello world!' | |
44 server.stop() |