60 finally: |
60 finally: |
61 s.close() |
61 s.close() |
62 raise RuntimeError('get_available_port([ports_range]) cannot find an available port') |
62 raise RuntimeError('get_available_port([ports_range]) cannot find an available port') |
63 |
63 |
64 |
64 |
65 class CubicWebServerConfig(ApptestConfiguration): |
65 class CubicWebServerTC(CubicWebTC): |
66 """basic configuration class for configuring test server |
66 """Class for running a Twisted-based test web server. |
67 |
|
68 Class attributes: |
|
69 |
|
70 * `ports_range`: list giving range of http ports to test (range(7000, 8000) |
|
71 by default). The first port found as available in `ports_range` will be |
|
72 used to launch the test web server. |
|
73 |
|
74 """ |
67 """ |
75 ports_range = range(7000, 8000) |
68 ports_range = range(7000, 8000) |
76 |
|
77 def default_base_url(self): |
|
78 port = self['port'] or get_available_port(self.ports_range) |
|
79 self.global_set_option('port', port) # force rewrite here |
|
80 return 'http://127.0.0.1:%d/' % self['port'] |
|
81 |
|
82 |
|
83 |
|
84 class CubicWebServerTC(CubicWebTC): |
|
85 """Class for running test web server. See :class:`CubicWebServerConfig`. |
|
86 """ |
|
87 configcls = CubicWebServerConfig |
|
88 |
69 |
89 def start_server(self): |
70 def start_server(self): |
90 from twisted.internet import reactor |
71 from twisted.internet import reactor |
91 from cubicweb.etwist.server import run |
72 from cubicweb.etwist.server import run |
92 # use a semaphore to avoid starting test while the http server isn't |
73 # use a semaphore to avoid starting test while the http server isn't |
170 def web_get(self, path='', body=None, headers=None): |
151 def web_get(self, path='', body=None, headers=None): |
171 return self.web_request(path=path, body=body, headers=headers) |
152 return self.web_request(path=path, body=body, headers=headers) |
172 |
153 |
173 def setUp(self): |
154 def setUp(self): |
174 super(CubicWebServerTC, self).setUp() |
155 super(CubicWebServerTC, self).setUp() |
|
156 port = self.config['port'] or get_available_port(self.ports_range) |
|
157 self.config.global_set_option('port', port) # force rewrite here |
|
158 self.config.global_set_option('base-url', 'http://127.0.0.1:%d/' % port) |
|
159 # call load_configuration again to let the config reset its datadir_url |
|
160 self.config.load_configuration() |
175 self.start_server() |
161 self.start_server() |
176 |
162 |
177 def tearDown(self): |
163 def tearDown(self): |
178 from twisted.internet import error |
164 from twisted.internet import error |
179 try: |
165 try: |