author | Justin Lebar <justin.lebar@gmail.com> |
Sat, 20 Nov 2010 19:29:58 -0800 | |
changeset 60630 | fcd0e21db895c9b6cadfa76c5aff88b9152dfdfa |
parent 60629 | d3675348f88b5f5a6d9a6ae782a6679cb865f986 |
child 60631 | bcb6a37e10538bad2eddabbbe035f18e0d3a500c |
push id | 1 |
push user | root |
push date | Tue, 26 Apr 2011 22:38:44 +0000 |
treeherder | mozilla-beta@bfdb6e623a36 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | ted, testonly |
bugs | 613813 |
milestone | 2.0b10pre |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/testing/mochitest/Makefile.in +++ b/testing/mochitest/Makefile.in @@ -94,16 +94,17 @@ include $(topsrcdir)/build/automation-bu ipc.js \ browser-harness.xul \ redirect-a11y.html \ redirect.html \ redirect.js \ $(topsrcdir)/build/pgo/server-locations.txt \ $(topsrcdir)/netwerk/test/httpserver/httpd.js \ mozprefs.js \ + pywebsocket_ignore_sigint.py \ $(NULL) _PYWEBSOCKET_FILES = \ pywebsocket/standalone.py \ $(NULL) _MOD_PYWEBSOCKET_FILES = \ pywebsocket/mod_pywebsocket/__init__.py \
new file mode 100644 --- /dev/null +++ b/testing/mochitest/pywebsocket_ignore_sigint.py @@ -0,0 +1,53 @@ +# +# ***** BEGIN LICENSE BLOCK ***** +# Version: MPL 1.1/GPL 2.0/LGPL 2.1 +# +# The contents of this file are subject to the Mozilla Public License Version +# 1.1 (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# http://www.mozilla.org/MPL/ +# +# Software distributed under the License is distributed on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +# for the specific language governing rights and limitations under the +# License. +# +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is the Mozilla Foundation. +# +# Portions created by the Initial Developer are Copyright (C) 2010 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Justin Lebar <justin.lebar@gmail.com> +# +# Alternatively, the contents of this file may be used under the terms of +# either the GNU General Public License Version 2 or later (the "GPL"), or +# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +# in which case the provisions of the GPL or the LGPL are applicable instead +# of those above. If you wish to allow use of your version of this file only +# under the terms of either the GPL or the LGPL, and not to allow others to +# use your version of this file under the terms of the MPL, indicate your +# decision by deleting the provisions above and replace them with the notice +# and other provisions required by the GPL or the LGPL. If you do not delete +# the provisions above, a recipient may use your version of this file under +# the terms of any one of the MPL, the GPL or the LGPL. +# +# ***** END LICENSE BLOCK ***** +# + +"""A wrapper around pywebsocket's standalone.py which causes it to ignore +SIGINT. + +""" + +import signal +import sys + +if __name__ == '__main__': + sys.path = ['pywebsocket'] + sys.path + import standalone + + signal.signal(signal.SIGINT, signal.SIG_IGN) + standalone._main()
--- a/testing/mochitest/runtests.py +++ b/testing/mochitest/runtests.py @@ -351,23 +351,31 @@ class MochitestServer: if rtncode is None: self._process.terminate() except: self._process.kill() class WebSocketServer(object): "Class which encapsulates the mod_pywebsocket server" - def __init__(self, automation, options, scriptdir): + def __init__(self, automation, options, scriptdir, debuggerInfo=None): self.port = options.webSocketPort self._automation = automation self._scriptdir = scriptdir + self.debuggerInfo = debuggerInfo def start(self): - script = os.path.join(self._scriptdir, 'pywebsocket/standalone.py') + # If we're running tests under an interactive debugger, tell the server to + # ignore SIGINT so it doesn't capture a ctrl+c meant for the debugger. + if self.debuggerInfo and self.debuggerInfo['interactive']: + scriptPath = 'pywebsocket_ignore_sigint.py' + else: + scriptPath = 'pywebsocket/standalone.py' + + script = os.path.join(self._scriptdir, scriptPath) cmd = [sys.executable, script, '-p', str(self.port), '-w', self._scriptdir, '-l', os.path.join(self._scriptdir, "websock.log"), '--log-level=debug'] self._process = self._automation.Process(cmd) pid = self._process.pid if pid < 0: print "Error starting websocket server." sys.exit(2) self._automation.log.info("INFO | runtests.py | Websocket server pid: %d", pid) @@ -415,22 +423,23 @@ class Mochitest(object): elif options.a11y: testURL = testHost + self.A11Y_PATH if options.testPath: self.urlOpts.append("testPath=" + encodeURIComponent(options.testPath)) elif options.browserChrome: testURL = "about:blank" return testURL - def startWebSocketServer(self, options): + def startWebSocketServer(self, options, debuggerInfo): """ Launch the websocket server """ if options.webServer != '127.0.0.1': return - self.wsserver = WebSocketServer(self.automation, options, self.SCRIPT_DIRECTORY) + self.wsserver = WebSocketServer(self.automation, options, + self.SCRIPT_DIRECTORY, debuggerInfo) self.wsserver.start() def stopWebSocketServer(self, options): if options.webServer != '127.0.0.1': return self.wsserver.stop() @@ -592,17 +601,17 @@ class Mochitest(object): if browserEnv is None: return 1 manifest = self.buildProfile(options) if manifest is None: return 1 self.startWebServer(options) - self.startWebSocketServer(options) + self.startWebSocketServer(options, debuggerInfo) testURL = self.buildTestPath(options) self.buildURLOptions(options) if len(self.urlOpts) > 0: testURL += "?" + "&".join(self.urlOpts) # Remove the leak detection file so it can't "leak" to the tests run. # The file is not there if leak logging was not enabled in the application build.