Mercurial > p > roundup > code
annotate test/wsgi_liveserver.py @ 8458:15a92b0a9b79
fix: make user_src_input generate valid javascript
user_src_input used to generate False if edit_ok == False in this
statement:
tal:attributes="onblur python:edit_ok and 'split_name(this)';
but False isn't a boolean in javascript, so it throws an error in the
console. Changed to use:
tal:attributes="onblur python:'split_name(this)' if edit_ok else '';
which generates an empty onblur if the field is not editable.
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Thu, 25 Sep 2025 23:30:07 -0400 |
| parents | 3630246c5c36 |
| children |
| 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 """ |
|
8248
f6923d2ba9a5
test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
12 import errno |
|
f6923d2ba9a5
test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
13 import socket |
|
6383
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
14 import threading |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
15 import unittest |
|
8257
3630246c5c36
test: issue2551366. fix probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents:
8250
diff
changeset
|
16 from wsgiref.simple_server import WSGIRequestHandler, make_server |
|
6383
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
17 |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
18 __author__ = 'John Kristensen' |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
19 __version__ = '0.3.1' |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
20 __license__ = 'GPLv3' |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
21 |
|
8250
c7f63e9cd131
test: add comment that I modified wsgi_liveserver.py
John Rouillard <rouilj@ieee.org>
parents:
8249
diff
changeset
|
22 """ |
|
c7f63e9cd131
test: add comment that I modified wsgi_liveserver.py
John Rouillard <rouilj@ieee.org>
parents:
8249
diff
changeset
|
23 Classmethod probe_ports() added by John Rouillard 2024. |
|
c7f63e9cd131
test: add comment that I modified wsgi_liveserver.py
John Rouillard <rouilj@ieee.org>
parents:
8249
diff
changeset
|
24 """ |
|
6383
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
25 |
|
8257
3630246c5c36
test: issue2551366. fix probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents:
8250
diff
changeset
|
26 |
|
6383
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
27 class QuietHandler(WSGIRequestHandler): |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
28 def log_request(*args, **kwargs): |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
29 pass |
|
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 |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
32 class LiveServerTestCase(unittest.TestCase): |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
33 |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
34 port_range = (8080, 8090) |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
35 |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
36 def create_app(self): |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
37 """Create your wsgi app and return it.""" |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
38 raise NotImplementedError |
|
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 def __call__(self, result=None): |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
41 """ |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
42 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
|
43 thing. |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
44 """ |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
45 try: |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
46 self._pre_setup() |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
47 super(LiveServerTestCase, self).__call__(result) |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
48 finally: |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
49 self._post_teardown() |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
50 |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
51 def url_base(self): |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
52 """Return the url of the test server.""" |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
53 return 'http://{0}:{1}'.format(self.host, self.port) |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
54 |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
55 def _pre_setup(self): |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
56 """Setup and start the test server in the background.""" |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
57 self._server = None |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
58 |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
59 self.host = 'localhost' |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
60 self.port = self.port_range[0] |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
61 self._thread = None |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
62 |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
63 # Get the app |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
64 self.app = self.create_app() |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
65 |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
66 # 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
|
67 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
|
68 try: |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
69 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
|
70 handler_class=QuietHandler) |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
71 except socket.error: |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
72 self.port += 1 |
|
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 # No free port, raise an exception |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
75 if self._server is None: |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
76 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
|
77 *self.port_range)) |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
78 |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
79 # Start the test server in the background |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
80 self._thread = threading.Thread(target=self._server.serve_forever) |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
81 self._thread.start() |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
82 |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
83 def _post_teardown(self): |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
84 """Stop the test server.""" |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
85 if self._thread is not None: |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
86 self._server.shutdown() |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
87 self._server.server_close() |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
88 self._thread.join() |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
89 del self._server |
|
8248
f6923d2ba9a5
test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
90 |
|
8249
d317a41dfcf3
test: make probe_ports a class method under python2.
John Rouillard <rouilj@ieee.org>
parents:
8248
diff
changeset
|
91 @classmethod |
|
d317a41dfcf3
test: make probe_ports a class method under python2.
John Rouillard <rouilj@ieee.org>
parents:
8248
diff
changeset
|
92 def probe_ports(cls, start=port_range[0], end=port_range[1]): |
|
8257
3630246c5c36
test: issue2551366. fix probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents:
8250
diff
changeset
|
93 |
|
8248
f6923d2ba9a5
test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
94 port = start |
|
8257
3630246c5c36
test: issue2551366. fix probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents:
8250
diff
changeset
|
95 |
|
3630246c5c36
test: issue2551366. fix probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents:
8250
diff
changeset
|
96 while port <= end: |
|
3630246c5c36
test: issue2551366. fix probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents:
8250
diff
changeset
|
97 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) |
|
3630246c5c36
test: issue2551366. fix probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents:
8250
diff
changeset
|
98 s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) |
|
3630246c5c36
test: issue2551366. fix probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents:
8250
diff
changeset
|
99 |
|
3630246c5c36
test: issue2551366. fix probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents:
8250
diff
changeset
|
100 try: |
|
3630246c5c36
test: issue2551366. fix probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents:
8250
diff
changeset
|
101 s.connect(('127.0.0.1', port)) |
|
3630246c5c36
test: issue2551366. fix probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents:
8250
diff
changeset
|
102 except socket.error as e: |
|
3630246c5c36
test: issue2551366. fix probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents:
8250
diff
changeset
|
103 if not hasattr(e, 'args') or e.args[0] != errno.ECONNREFUSED: |
|
3630246c5c36
test: issue2551366. fix probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents:
8250
diff
changeset
|
104 raise |
|
3630246c5c36
test: issue2551366. fix probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents:
8250
diff
changeset
|
105 return port |
|
3630246c5c36
test: issue2551366. fix probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents:
8250
diff
changeset
|
106 else: |
|
3630246c5c36
test: issue2551366. fix probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents:
8250
diff
changeset
|
107 s.close() |
|
3630246c5c36
test: issue2551366. fix probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents:
8250
diff
changeset
|
108 port += 1 |
|
3630246c5c36
test: issue2551366. fix probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents:
8250
diff
changeset
|
109 |
|
3630246c5c36
test: issue2551366. fix probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents:
8250
diff
changeset
|
110 return None |
