Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(137)

Side by Side Diff: webkit/tools/layout_tests/layout_package/http_server.py

Issue 243022: Clean up code duplication in layout test http_server.py (Closed)
Patch Set: Remove sys path since already imported via bash Created 11 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « tools/python/google/httpd_utils.py ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2006-2009 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 """A class to help start/stop the lighttpd server used by layout tests.""" 6 """A class to help start/stop the lighttpd server used by layout tests."""
7 7
8 8
9 import logging 9 import logging
10 import optparse 10 import optparse
11 import os 11 import os
12 import shutil 12 import shutil
13 import subprocess 13 import subprocess
14 import sys 14 import sys
15 import tempfile 15 import tempfile
16 import time 16 import time
17 import urllib 17 import urllib
18 18
19 import path_utils 19 import path_utils
20 import google.httpd_utils
20 21
21 def RemoveLogFiles(folder, starts_with): 22 def RemoveLogFiles(folder, starts_with):
22 files = os.listdir(folder) 23 files = os.listdir(folder)
23 for file in files: 24 for file in files:
24 if file.startswith(starts_with) : 25 if file.startswith(starts_with) :
25 full_path = os.path.join(folder, file) 26 full_path = os.path.join(folder, file)
26 os.remove(full_path) 27 os.remove(full_path)
27 28
28 class HttpdNotStarted(Exception):
29 pass
30
31 class Lighttpd: 29 class Lighttpd:
32 # Webkit tests 30 # Webkit tests
33 try: 31 try:
34 _webkit_tests = path_utils.PathFromBase('third_party', 'WebKit', 32 _webkit_tests = path_utils.PathFromBase('third_party', 'WebKit',
35 'LayoutTests', 'http', 'tests') 33 'LayoutTests', 'http', 'tests')
36 _js_test_resource = path_utils.PathFromBase('third_party', 'WebKit', 34 _js_test_resource = path_utils.PathFromBase('third_party', 'WebKit',
37 'LayoutTests', 'fast', 35 'LayoutTests', 'fast',
38 'js', 'resources') 36 'js', 'resources')
39 except path_utils.PathNotFound: 37 except path_utils.PathNotFound:
40 # If third_party/WebKit/LayoutTests/http/tests does not exist, assume wekit 38 # If third_party/WebKit/LayoutTests/http/tests does not exist, assume wekit
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
213 logging.info('Starting http server') 211 logging.info('Starting http server')
214 self._process = subprocess.Popen(start_cmd, env=env) 212 self._process = subprocess.Popen(start_cmd, env=env)
215 213
216 # Wait for server to start. 214 # Wait for server to start.
217 time.sleep(3) 215 time.sleep(3)
218 216
219 # Ensure that the server is running on all the desired ports. 217 # Ensure that the server is running on all the desired ports.
220 for mapping in mappings: 218 for mapping in mappings:
221 url = 'http%s://127.0.0.1:%d/' % ('sslcert' in mapping and 's' or '', 219 url = 'http%s://127.0.0.1:%d/' % ('sslcert' in mapping and 's' or '',
222 mapping['port']) 220 mapping['port'])
223 if not self._UrlIsAlive(url): 221 if not google.httpd_utils.UrlIsAlive(url):
224 raise HttpdNotStarted('Failed to start httpd on port %s' % 222 raise google.httpd_utils.HttpdNotStarted('Failed to start httpd on ',
225 str(mapping['port'])) 223 'port %s' %
224 str(mapping['port']))
226 225
227 # Our process terminated already 226 # Our process terminated already
228 if self._process.returncode != None: 227 if self._process.returncode != None:
229 raise HttpdNotStarted('Failed to start httpd.') 228 raise google.httpd_utils.HttpdNotStarted('Failed to start httpd.')
230
231 def _UrlIsAlive(self, url):
232 """Checks to see if we get an http response from |url|.
233 We poll the url 5 times with a 3 second delay. If we don't
234 get a reply in that time, we give up and assume the httpd
235 didn't start properly.
236
237 Args:
238 url: The URL to check.
239 Return:
240 True if the url is alive.
241 """
242 attempts = 5
243 while attempts > 0:
244 try:
245 response = urllib.urlopen(url)
246 # Server is up and responding.
247 return True
248 except IOError:
249 pass
250 attempts -= 1
251 # Wait 3 seconds and try again.
252 time.sleep(3)
253
254 return False
255 229
256 # TODO(deanm): Find a nicer way to shutdown cleanly. Our log files are 230 # TODO(deanm): Find a nicer way to shutdown cleanly. Our log files are
257 # probably not being flushed, etc... why doesn't our python have os.kill ? 231 # probably not being flushed, etc... why doesn't our python have os.kill ?
258 def Stop(self, force=False): 232 def Stop(self, force=False):
259 if not force and not self.IsRunning(): 233 if not force and not self.IsRunning():
260 return 234 return
261 235
262 logging.info('Shutting down http server') 236 logging.info('Shutting down http server')
263 path_utils.ShutDownHTTPServer(self._process) 237 path_utils.ShutDownHTTPServer(self._process)
264 238
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
296 raise 'Specifying port requires also a root.' 270 raise 'Specifying port requires also a root.'
297 httpd = Lighttpd(tempfile.gettempdir(), 271 httpd = Lighttpd(tempfile.gettempdir(),
298 port=options.port, 272 port=options.port,
299 root=options.root, 273 root=options.root,
300 register_cygwin=options.register_cygwin, 274 register_cygwin=options.register_cygwin,
301 run_background=options.run_background) 275 run_background=options.run_background)
302 if 'start' == options.server: 276 if 'start' == options.server:
303 httpd.Start() 277 httpd.Start()
304 else: 278 else:
305 httpd.Stop(force=True) 279 httpd.Stop(force=True)
OLDNEW
« no previous file with comments | « tools/python/google/httpd_utils.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698