summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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.py38
-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, 66 insertions, 54 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 1950c6b..0094322 100644
--- a/webkit/tools/layout_tests/layout_package/apache_http_server.py
+++ b/webkit/tools/layout_tests/layout_package/apache_http_server.py
@@ -9,20 +9,14 @@ 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(object):
- _PORTS = [
- {'port': 8000},
- {'port': 8080},
- {'port': 8443, 'is_ssl': True}
- ]
-
+class LayoutTestApacheHttpd(http_server_base.HttpServerBase):
def __init__(self, output_dir):
"""Args:
output_dir: the absolute path to the layout test result directory
@@ -31,6 +25,12 @@ class LayoutTestApacheHttpd(object):
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,15 +93,6 @@ class LayoutTestApacheHttpd(object):
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."""
@@ -110,28 +101,15 @@ class LayoutTestApacheHttpd(object):
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 be09331..36490ce 100755
--- a/webkit/tools/layout_tests/layout_package/http_server.py
+++ b/webkit/tools/layout_tests/layout_package/http_server.py
@@ -16,6 +16,7 @@ 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.
@@ -29,7 +30,7 @@ def RemoveLogFiles(folder, starts_with):
full_path = os.path.join(folder, file)
os.remove(full_path)
-class Lighttpd:
+class Lighttpd(http_server_base.HttpServerBase):
# Webkit tests
try:
_webkit_tests = path_utils.PathFromBase('third_party', 'WebKit',
@@ -84,12 +85,13 @@ class Lighttpd:
)
- def __init__(self, output_dir, background=False, port=None, root=None,
- register_cygwin=None, run_background=None):
+ def __init__(self, output_dir, num_workers=None, 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
@@ -139,6 +141,10 @@ class Lighttpd:
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.
@@ -215,38 +221,27 @@ class Lighttpd:
self._process = subprocess.Popen(start_cmd, env=env)
# Wait for server to start.
- 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']))
+ self.mappings = mappings
+ server_started = self.WaitForAction(self.IsServerRunningOnAllPorts)
# Our process terminated already
- if self._process.returncode != None:
+ if not server_started or 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
new file mode 100644
index 0000000..d4a5f59
--- /dev/null
+++ b/webkit/tools/layout_tests/layout_package/http_server_base.py
@@ -0,0 +1,38 @@
+# 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 urllib
+
+class HttpServerBase(object):
+ def WaitForAction(self, action):
+ """Repeat the action for 20 seconds or until it succeeds. Returns whether
+ it succeeded."""
+ start_time = time.time()
+ while time.time() - start_time < 20:
+ if action():
+ return True
+ time.sleep(1)
+
+ return False
+
+ 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'])
+
+ try:
+ response = urllib.urlopen(url)
+ # Server is up and responding.
+ except IOError:
+ 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 6b3501c..c5772b4 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.SIGTERM)
+ os.kill(server_process.pid, signal.SIGKILL)
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 a7ed086..96f176f 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.SIGTERM)
+ os.kill(server_process.pid, signal.SIGKILL)
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 d0660de..131ae9e 100755
--- a/webkit/tools/layout_tests/run_webkit_tests.py
+++ b/webkit/tools/layout_tests/run_webkit_tests.py
@@ -133,7 +133,8 @@ class TestRunner:
self._http_server = apache_http_server.LayoutTestApacheHttpd(
options.results_directory)
else:
- self._http_server = http_server.Lighttpd(options.results_directory)
+ self._http_server = http_server.Lighttpd(options.results_directory,
+ num_workers=self._options.num_test_shells)
self._shardable_directories = ['chrome', 'LayoutTests', 'pending', 'fast',
'svg']