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

Unified Diff: webkit/tools/layout_tests/layout_package/websocket_server.py

Issue 545145: Move the layout test scripts into a 'webkitpy' subdirectory in preparation... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: try to de-confuse svn and the try bots Created 10 years, 11 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 side-by-side diff with in-line comments
Download patch
Index: webkit/tools/layout_tests/layout_package/websocket_server.py
===================================================================
--- webkit/tools/layout_tests/layout_package/websocket_server.py (revision 36724)
+++ webkit/tools/layout_tests/layout_package/websocket_server.py (working copy)
@@ -1,250 +0,0 @@
-#!/usr/bin/env python
-# 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.
-
-"""A class to help start/stop the PyWebSocket server used by layout tests."""
-
-
-import logging
-import optparse
-import os
-import subprocess
-import sys
-import tempfile
-import time
-
-import path_utils
-import platform_utils
-import http_server
-
-# So we can import httpd_utils below to make ui_tests happy.
-sys.path.append(path_utils.PathFromBase('tools', 'python'))
-import google.httpd_utils
-
-_WS_LOG_PREFIX = 'pywebsocket.ws.log-'
-_WSS_LOG_PREFIX = 'pywebsocket.wss.log-'
-
-_DEFAULT_WS_PORT = 8880
-_DEFAULT_WSS_PORT = 9323
-
-
-def RemoveLogFiles(folder, starts_with):
- files = os.listdir(folder)
- for file in files:
- if file.startswith(starts_with):
- full_path = os.path.join(folder, file)
- os.remove(full_path)
-
-
-class PyWebSocketNotStarted(Exception):
- pass
-
-
-class PyWebSocketNotFound(Exception):
- pass
-
-
-class PyWebSocket(http_server.Lighttpd):
-
- def __init__(self, output_dir, port=_DEFAULT_WS_PORT,
- root=None,
- use_tls=False,
- private_key=http_server.Lighttpd._pem_file,
- certificate=http_server.Lighttpd._pem_file,
- register_cygwin=None,
- pidfile=None):
- """Args:
- output_dir: the absolute path to the layout test result directory
- """
- http_server.Lighttpd.__init__(self, output_dir,
- port=port,
- root=root,
- register_cygwin=register_cygwin)
- self._output_dir = output_dir
- self._process = None
- self._port = port
- self._root = root
- self._use_tls = use_tls
- self._private_key = private_key
- self._certificate = certificate
- if self._port:
- self._port = int(self._port)
- if self._use_tls:
- self._server_name = 'PyWebSocket(Secure)'
- else:
- self._server_name = 'PyWebSocket'
- self._pidfile = pidfile
- self._wsout = None
-
- # Webkit tests
- if self._root:
- self._layout_tests = os.path.abspath(self._root)
- self._web_socket_tests = os.path.abspath(
- os.path.join(self._root, 'websocket', 'tests'))
- else:
- try:
- self._web_socket_tests = path_utils.PathFromBase(
- 'third_party', 'WebKit', 'LayoutTests', 'websocket',
- 'tests')
- self._layout_tests = path_utils.PathFromBase(
- 'third_party', 'WebKit', 'LayoutTests')
- except path_utils.PathNotFound:
- self._web_socket_tests = None
-
- def Start(self):
- if not self._web_socket_tests:
- logging.info('No need to start %s server.' % self._server_name)
- return
- if self.IsRunning():
- raise PyWebSocketNotStarted('%s is already running.' %
- self._server_name)
-
- time_str = time.strftime('%d%b%Y-%H%M%S')
- if self._use_tls:
- log_prefix = _WSS_LOG_PREFIX
- else:
- log_prefix = _WS_LOG_PREFIX
- log_file_name = log_prefix + time_str
-
- # Remove old log files. We only need to keep the last ones.
- RemoveLogFiles(self._output_dir, log_prefix)
-
- error_log = os.path.join(self._output_dir, log_file_name + "-err.txt")
-
- output_log = os.path.join(self._output_dir, log_file_name + "-out.txt")
- self._wsout = open(output_log, "w")
-
- python_interp = sys.executable
- pywebsocket_base = path_utils.PathFromBase(
- 'third_party', 'WebKit', 'WebKitTools', 'pywebsocket')
- pywebsocket_script = path_utils.PathFromBase(
- 'third_party', 'WebKit', 'WebKitTools', 'pywebsocket',
- 'mod_pywebsocket', 'standalone.py')
- start_cmd = [
- python_interp, pywebsocket_script,
- '-p', str(self._port),
- '-d', self._layout_tests,
- '-s', self._web_socket_tests,
- '-l', error_log,
- ]
- if self._use_tls:
- start_cmd.extend(['-t', '-k', self._private_key,
- '-c', self._certificate])
-
- # Put the cygwin directory first in the path to find cygwin1.dll
- env = os.environ
- if sys.platform in ('cygwin', 'win32'):
- env['PATH'] = '%s;%s' % (
- path_utils.PathFromBase('third_party', 'cygwin', 'bin'),
- env['PATH'])
-
- if sys.platform == 'win32' and self._register_cygwin:
- setup_mount = path_utils.PathFromBase('third_party', 'cygwin',
- 'setup_mount.bat')
- subprocess.Popen(setup_mount).wait()
-
- env['PYTHONPATH'] = (pywebsocket_base + os.path.pathsep +
- env.get('PYTHONPATH', ''))
-
- logging.debug('Starting %s server.' % self._server_name)
- self._process = subprocess.Popen(start_cmd, stdout=self._wsout,
- env=env)
-
- # Wait a bit before checking the liveness of the server.
- time.sleep(0.5)
-
- if self._use_tls:
- url = 'https'
- else:
- url = 'http'
- url = url + '://127.0.0.1:%d/' % self._port
- if not google.httpd_utils.UrlIsAlive(url):
- raise PyWebSocketNotStarted(
- 'Failed to start %s server on port %s.' %
- (self._server_name, self._port))
-
- # Our process terminated already
- if self._process.returncode != None:
- raise PyWebSocketNotStarted(
- 'Failed to start %s server.' % self._server_name)
- if self._pidfile:
- f = open(self._pidfile, 'w')
- f.write("%d" % self._process.pid)
- f.close()
-
- def Stop(self, force=False):
- if not force and not self.IsRunning():
- return
-
- if self._process:
- pid = self._process.pid
- elif self._pidfile:
- f = open(self._pidfile)
- pid = int(f.read().strip())
- f.close()
-
- if not pid:
- raise PyWebSocketNotFound(
- 'Failed to find %s server pid.' % self._server_name)
-
- logging.debug('Shutting down %s server %d.' % (self._server_name, pid))
- platform_utils.KillProcess(pid)
-
- if self._process:
- self._process.wait()
- self._process = None
-
- if self._wsout:
- self._wsout.close()
- self._wsout = None
-
-
-if '__main__' == __name__:
- # Provide some command line params for starting the PyWebSocket server
- # manually.
- option_parser = optparse.OptionParser()
- option_parser.add_option('--server', type='choice',
- choices=['start', 'stop'], default='start',
- help='Server action (start|stop)')
- option_parser.add_option('-p', '--port', dest='port',
- default=None, help='Port to listen on')
- option_parser.add_option('-r', '--root',
- help='Absolute path to DocumentRoot '
- '(overrides layout test roots)')
- option_parser.add_option('-t', '--tls', dest='use_tls',
- action='store_true',
- default=False, help='use TLS (wss://)')
- option_parser.add_option('-k', '--private_key', dest='private_key',
- default='', help='TLS private key file.')
- option_parser.add_option('-c', '--certificate', dest='certificate',
- default='', help='TLS certificate file.')
- option_parser.add_option('--register_cygwin', action="store_true",
- dest="register_cygwin",
- help='Register Cygwin paths (on Win try bots)')
- option_parser.add_option('--pidfile', help='path to pid file.')
- options, args = option_parser.parse_args()
-
- if not options.port:
- if options.use_tls:
- options.port = _DEFAULT_WSS_PORT
- else:
- options.port = _DEFAULT_WS_PORT
-
- kwds = {'port': options.port, 'use_tls': options.use_tls}
- if options.root:
- kwds['root'] = options.root
- if options.private_key:
- kwds['private_key'] = options.private_key
- if options.certificate:
- kwds['certificate'] = options.certificate
- kwds['register_cygwin'] = options.register_cygwin
- if options.pidfile:
- kwds['pidfile'] = options.pidfile
-
- pywebsocket = PyWebSocket(tempfile.gettempdir(), **kwds)
-
- if 'start' == options.server:
- pywebsocket.Start()
- else:
- pywebsocket.Stop(force=True)
« no previous file with comments | « webkit/tools/layout_tests/layout_package/test_shell_thread.py ('k') | webkit/tools/layout_tests/rebaseline.bat » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698