summaryrefslogtreecommitdiffstats
path: root/webkit
diff options
context:
space:
mode:
authorcpu@chromium.org <cpu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-12-07 20:24:30 +0000
committercpu@chromium.org <cpu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-12-07 20:24:30 +0000
commited8e24a6a2e7a13879ebb3c06aaca8d459ec5de4 (patch)
tree417d3ba4342e9b0f37ba57573b85e8f9435dcfa2 /webkit
parent748c29f8976f56a48b5ab49ed48e7e66e2593a07 (diff)
downloadchromium_src-ed8e24a6a2e7a13879ebb3c06aaca8d459ec5de4.zip
chromium_src-ed8e24a6a2e7a13879ebb3c06aaca8d459ec5de4.tar.gz
chromium_src-ed8e24a6a2e7a13879ebb3c06aaca8d459ec5de4.tar.bz2
Revert 33975 - Take two at enabling maxworkers for lighttpd. Use SIGKILL instead
of SIGTERM to avoid getting nonzero exit codes when shutting down lighttpd. Also, remove some unnecessary sleep calls and share the code that waits until the server is up between Apache and lighttpd scripts. Review URL: http://codereview.chromium.org/463039 TBR=ojan@chromium.org Review URL: http://codereview.chromium.org/467039 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@33983 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit')
-rw-r--r--webkit/tools/layout_tests/layout_package/apache_http_server.py42
-rwxr-xr-xwebkit/tools/layout_tests/layout_package/http_server.py33
-rw-r--r--webkit/tools/layout_tests/layout_package/http_server_base.py36
-rw-r--r--webkit/tools/layout_tests/layout_package/platform_utils_linux.py2
-rw-r--r--webkit/tools/layout_tests/layout_package/platform_utils_mac.py2
-rwxr-xr-xwebkit/tools/layout_tests/run_webkit_tests.py3
6 files changed, 54 insertions, 64 deletions
diff --git a/webkit/tools/layout_tests/layout_package/apache_http_server.py b/webkit/tools/layout_tests/layout_package/apache_http_server.py
index 0094322..1950c6b 100644
--- a/webkit/tools/layout_tests/layout_package/apache_http_server.py
+++ b/webkit/tools/layout_tests/layout_package/apache_http_server.py
@@ -9,14 +9,20 @@ import optparse
import os
import subprocess
import sys
+import time
import google.httpd_utils
-import http_server_base
import path_utils
import platform_utils
-class LayoutTestApacheHttpd(http_server_base.HttpServerBase):
+class LayoutTestApacheHttpd(object):
+ _PORTS = [
+ {'port': 8000},
+ {'port': 8080},
+ {'port': 8443, 'is_ssl': True}
+ ]
+
def __init__(self, output_dir):
"""Args:
output_dir: the absolute path to the layout test result directory
@@ -25,12 +31,6 @@ class LayoutTestApacheHttpd(http_server_base.HttpServerBase):
self._httpd_proc = None
path_utils.MaybeMakeDirectory(output_dir)
- self.mappings = [
- {'port': 8000},
- {'port': 8080},
- {'port': 8443, 'sslcert': True}
- ]
-
# The upstream .conf file assumed the existence of /tmp/WebKit for placing
# apache files like the lock file there.
path_utils.MaybeMakeDirectory(os.path.join("/tmp", "WebKit"))
@@ -93,6 +93,15 @@ class LayoutTestApacheHttpd(http_server_base.HttpServerBase):
ssl and 'SSLEngine On' or '',
'</VirtualHost>', ''))
+ def _IsServerRunningOnAllPorts(self):
+ """Returns whether the server is running on all the desired ports."""
+ for mapping in self._PORTS:
+ url = 'http%s://127.0.0.1:%d/' % ('is_ssl' in mapping and 's' or '',
+ mapping['port'])
+ if not google.httpd_utils.UrlIsAlive(url):
+ return False
+
+ return True
def _StartHttpdProcess(self):
"""Starts the httpd process and returns whether there were errors."""
@@ -101,15 +110,28 @@ class LayoutTestApacheHttpd(http_server_base.HttpServerBase):
return False
return True
+ def _WaitForAction(self, action):
+ """Repeat the action for 20 seconds or until it succeeds. Returns whether
+ it succeeded."""
+ succeeded = False
+
+ start_time = time.time()
+ # Give apache up to 20 seconds to start up.
+ while time.time() - start_time < 20 and not succeeded:
+ time.sleep(0.1)
+ succeeded = action()
+
+ return succeeded
+
def Start(self):
"""Starts the apache http server."""
# Stop any currently running servers.
self.Stop()
logging.debug("Starting apache http server")
- server_started = self.WaitForAction(self._StartHttpdProcess)
+ server_started = self._WaitForAction(self._StartHttpdProcess)
if server_started:
- server_started = self.WaitForAction(self.IsServerRunningOnAllPorts)
+ server_started = self._WaitForAction(self._IsServerRunningOnAllPorts)
if server_started:
logging.debug("Server successfully started")
diff --git a/webkit/tools/layout_tests/layout_package/http_server.py b/webkit/tools/layout_tests/layout_package/http_server.py
index 36490ce..be09331 100755
--- a/webkit/tools/layout_tests/layout_package/http_server.py
+++ b/webkit/tools/layout_tests/layout_package/http_server.py
@@ -16,7 +16,6 @@ import tempfile
import time
import urllib
-import http_server_base
import path_utils
# So we can import httpd_utils below to make ui_tests happy.
@@ -30,7 +29,7 @@ def RemoveLogFiles(folder, starts_with):
full_path = os.path.join(folder, file)
os.remove(full_path)
-class Lighttpd(http_server_base.HttpServerBase):
+class Lighttpd:
# Webkit tests
try:
_webkit_tests = path_utils.PathFromBase('third_party', 'WebKit',
@@ -85,13 +84,12 @@ class Lighttpd(http_server_base.HttpServerBase):
)
- def __init__(self, output_dir, num_workers=None, background=False, port=None,
- root=None, register_cygwin=None, run_background=None):
+ def __init__(self, output_dir, background=False, port=None, root=None,
+ register_cygwin=None, run_background=None):
"""Args:
output_dir: the absolute path to the layout test result directory
"""
self._output_dir = output_dir
- self._num_workers = num_workers
self._process = None
self._port = port
self._root = root
@@ -141,10 +139,6 @@ class Lighttpd(http_server_base.HttpServerBase):
f.write(('server.errorlog = "%s"\n'
'accesslog.filename = "%s"\n\n') % (error_log, access_log))
- # Setup the number of worker processes to spawn.
- if self._num_workers:
- f.write('server.max-worker = %s' % self._num_workers)
-
# Setup upload folders. Upload folder is to hold temporary upload files
# and also POST data. This is used to support XHR layout tests that does
# POST.
@@ -221,27 +215,38 @@ class Lighttpd(http_server_base.HttpServerBase):
self._process = subprocess.Popen(start_cmd, env=env)
# Wait for server to start.
- self.mappings = mappings
- server_started = self.WaitForAction(self.IsServerRunningOnAllPorts)
+ time.sleep(3)
+
+ # Ensure that the server is running on all the desired ports.
+ for mapping in mappings:
+ url = 'http%s://127.0.0.1:%d/' % ('sslcert' in mapping and 's' or '',
+ mapping['port'])
+ if not google.httpd_utils.UrlIsAlive(url):
+ raise google.httpd_utils.HttpdNotStarted('Failed to start httpd on ',
+ 'port %s' %
+ str(mapping['port']))
# Our process terminated already
- if not server_started or self._process.returncode != None:
+ if self._process.returncode != None:
raise google.httpd_utils.HttpdNotStarted('Failed to start httpd.')
- logging.debug("Server successfully started")
-
# TODO(deanm): Find a nicer way to shutdown cleanly. Our log files are
# probably not being flushed, etc... why doesn't our python have os.kill ?
def Stop(self, force=False):
if not force and not self.IsRunning():
return
+ logging.debug('Shutting down http server')
path_utils.ShutDownHTTPServer(self._process)
if self._process:
self._process.wait()
self._process = None
+ # Wait a bit to make sure the ports are free'd up
+ time.sleep(2)
+
+
if '__main__' == __name__:
# Provide some command line params for starting/stopping the http server
# manually. Also used in ui_tests to run http layout tests in a browser.
diff --git a/webkit/tools/layout_tests/layout_package/http_server_base.py b/webkit/tools/layout_tests/layout_package/http_server_base.py
deleted file mode 100644
index 5dc27d0..0000000
--- a/webkit/tools/layout_tests/layout_package/http_server_base.py
+++ /dev/null
@@ -1,36 +0,0 @@
-# Copyright (c) 2009 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Base class with common routines between the Apache and Lighttpd servers."""
-
-import time
-
-import google.httpd_utils
-
-class HttpServerBase(object):
- def WaitForAction(self, action):
- """Repeat the action for 20 seconds or until it succeeds. Returns whether
- it succeeded."""
- succeeded = False
-
- start_time = time.time()
- while time.time() - start_time < 20 and not succeeded:
- time.sleep(0.1)
- succeeded = action()
-
- return succeeded
-
- def IsServerRunningOnAllPorts(self):
- """Returns whether the server is running on all the desired ports."""
- for mapping in self.mappings:
- if 'sslcert' in mapping:
- http_suffix = 's'
- else:
- http_suffix = ''
-
- url = 'http%s://127.0.0.1:%d/' % (http_suffix, mapping['port'])
- if not google.httpd_utils.UrlIsAlive(url):
- return False
-
- return True
diff --git a/webkit/tools/layout_tests/layout_package/platform_utils_linux.py b/webkit/tools/layout_tests/layout_package/platform_utils_linux.py
index c5772b4..6b3501c 100644
--- a/webkit/tools/layout_tests/layout_package/platform_utils_linux.py
+++ b/webkit/tools/layout_tests/layout_package/platform_utils_linux.py
@@ -115,7 +115,7 @@ def ShutDownHTTPServer(server_process):
# processes not started by http_server.py, but good enough for now.
subprocess.call(['killall', '-u', os.getenv('USER'), '-TERM', 'lighttpd'])
else:
- os.kill(server_process.pid, signal.SIGKILL)
+ os.kill(server_process.pid, signal.SIGTERM)
def KillProcess(pid):
"""Forcefully kill the process.
diff --git a/webkit/tools/layout_tests/layout_package/platform_utils_mac.py b/webkit/tools/layout_tests/layout_package/platform_utils_mac.py
index 96f176f..a7ed086 100644
--- a/webkit/tools/layout_tests/layout_package/platform_utils_mac.py
+++ b/webkit/tools/layout_tests/layout_package/platform_utils_mac.py
@@ -110,7 +110,7 @@ def ShutDownHTTPServer(server_process):
stderr=null)
null.close()
else:
- os.kill(server_process.pid, signal.SIGKILL)
+ os.kill(server_process.pid, signal.SIGTERM)
def KillProcess(pid):
"""Forcefully kill the process.
diff --git a/webkit/tools/layout_tests/run_webkit_tests.py b/webkit/tools/layout_tests/run_webkit_tests.py
index 131ae9e..d0660de 100755
--- a/webkit/tools/layout_tests/run_webkit_tests.py
+++ b/webkit/tools/layout_tests/run_webkit_tests.py
@@ -133,8 +133,7 @@ class TestRunner:
self._http_server = apache_http_server.LayoutTestApacheHttpd(
options.results_directory)
else:
- self._http_server = http_server.Lighttpd(options.results_directory,
- num_workers=self._options.num_test_shells)
+ self._http_server = http_server.Lighttpd(options.results_directory)
self._shardable_directories = ['chrome', 'LayoutTests', 'pending', 'fast',
'svg']