Mercurial > p > roundup > code
annotate test/wsgi_liveserver.py @ 6695:b3ba03d2b214 2.2.0b1
2.2.0b1 release changes
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Wed, 15 Jun 2022 09:58:31 -0400 |
| parents | e9760702bf0c |
| children | f6923d2ba9a5 |
| rev | line source |
|---|---|
|
6383
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
1 # -*- coding: utf-8 -*- |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
2 """ |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
3 wsgi-liveserver provides a simple LiverServerTestCase class that can be used to |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
4 help start a web server in the background to serve a WSGI compliant application |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
5 for use with testing. Generally it will be used in conjuction with something |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
6 like Selenium to perform a series of functional tests using a browser. |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
7 |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
8 Licensed under the GNU GPL v3 |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
9 |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
10 Copyright (c) 2013 John Kristensen (unless explicitly stated otherwise). |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
11 """ |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
12 import threading |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
13 import socket |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
14 import unittest |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
15 from wsgiref.simple_server import make_server, WSGIRequestHandler |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
16 |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
17 __author__ = 'John Kristensen' |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
18 __version__ = '0.3.1' |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
19 __license__ = 'GPLv3' |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
20 |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
21 |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
22 class QuietHandler(WSGIRequestHandler): |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
23 def log_request(*args, **kwargs): |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
24 pass |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
25 |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
26 |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
27 class LiveServerTestCase(unittest.TestCase): |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
28 |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
29 port_range = (8080, 8090) |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
30 |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
31 def create_app(self): |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
32 """Create your wsgi app and return it.""" |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
33 raise NotImplementedError |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
34 |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
35 def __call__(self, result=None): |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
36 """ |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
37 Do some custom setup stuff and then hand off to TestCase to do its |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
38 thing. |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
39 """ |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
40 try: |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
41 self._pre_setup() |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
42 super(LiveServerTestCase, self).__call__(result) |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
43 finally: |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
44 self._post_teardown() |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
45 |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
46 def url_base(self): |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
47 """Return the url of the test server.""" |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
48 return 'http://{0}:{1}'.format(self.host, self.port) |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
49 |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
50 def _pre_setup(self): |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
51 """Setup and start the test server in the background.""" |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
52 self._server = None |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
53 |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
54 self.host = 'localhost' |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
55 self.port = self.port_range[0] |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
56 self._thread = None |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
57 |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
58 # Get the app |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
59 self.app = self.create_app() |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
60 |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
61 # Cycle through the port range to find a free port |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
62 while self._server is None and self.port <= self.port_range[1]: |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
63 try: |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
64 self._server = make_server(self.host, self.port, self.app, |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
65 handler_class=QuietHandler) |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
66 except socket.error: |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
67 self.port += 1 |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
68 |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
69 # No free port, raise an exception |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
70 if self._server is None: |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
71 raise socket.error('Ports {0}-{1} are all already in use'.format( |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
72 *self.port_range)) |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
73 |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
74 # Start the test server in the background |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
75 self._thread = threading.Thread(target=self._server.serve_forever) |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
76 self._thread.start() |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
77 |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
78 def _post_teardown(self): |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
79 """Stop the test server.""" |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
80 if self._thread is not None: |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
81 self._server.shutdown() |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
82 self._server.server_close() |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
83 self._thread.join() |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
84 del self._server |
