diff options
Diffstat (limited to 'testing/tps/tps/cli.py')
-rw-r--r-- | testing/tps/tps/cli.py | 157 |
1 files changed, 157 insertions, 0 deletions
diff --git a/testing/tps/tps/cli.py b/testing/tps/tps/cli.py new file mode 100644 index 0000000000..9ef6186b4d --- /dev/null +++ b/testing/tps/tps/cli.py @@ -0,0 +1,157 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +import json +import optparse +import os +import re +import sys +from threading import RLock + +from tps import TPSTestRunner + + +def main(): + parser = optparse.OptionParser() + parser.add_option( + "--binary", + action="store", + type="string", + dest="binary", + default=None, + help="path to the Firefox binary, specified either as " + "a local file or a url; if omitted, the PATH " + "will be searched;", + ) + parser.add_option( + "--configfile", + action="store", + type="string", + dest="configfile", + default=None, + help="path to the config file to use default: %default]", + ) + parser.add_option( + "--debug", + action="store_true", + dest="debug", + default=False, + help="run in debug mode", + ) + parser.add_option( + "--ignore-unused-engines", + default=False, + action="store_true", + dest="ignore_unused_engines", + help="If defined, do not load unused engines in individual tests." + " Has no effect for pulse monitor.", + ) + parser.add_option( + "--logfile", + action="store", + type="string", + dest="logfile", + default="tps.log", + help="path to the log file [default: %default]", + ) + parser.add_option( + "--mobile", + action="store_true", + dest="mobile", + default=False, + help="run with mobile settings", + ) + parser.add_option( + "--pulsefile", + action="store", + type="string", + dest="pulsefile", + default=None, + help="path to file containing a pulse message in " + "json format that you want to inject into the monitor", + ) + parser.add_option( + "--resultfile", + action="store", + type="string", + dest="resultfile", + default="tps_result.json", + help="path to the result file [default: %default]", + ) + parser.add_option( + "--testfile", + action="store", + type="string", + dest="testfile", + default="all_tests.json", + help="path to the test file to run [default: %default]", + ) + parser.add_option( + "--stop-on-error", + action="store_true", + dest="stop_on_error", + help="stop running tests after the first failure", + ) + (options, args) = parser.parse_args() + + configfile = options.configfile + if configfile is None: + virtual_env = os.environ.get("VIRTUAL_ENV") + if virtual_env: + configfile = os.path.join(virtual_env, "config.json") + if configfile is None or not os.access(configfile, os.F_OK): + raise Exception( + "Unable to find config.json in a VIRTUAL_ENV; you must " + "specify a config file using the --configfile option" + ) + + # load the config file + f = open(configfile, "r") + configcontent = f.read() + f.close() + config = json.loads(configcontent) + testfile = os.path.join(config.get("testdir", ""), options.testfile) + + rlock = RLock() + + print("using result file", options.resultfile) + + extensionDir = config.get("extensiondir") + if not extensionDir or extensionDir == "__EXTENSIONDIR__": + extensionDir = os.path.join( + os.getcwd(), "..", "..", "services", "sync", "tps", "extensions" + ) + else: + if sys.platform == "win32": + # replace msys-style paths with proper Windows paths + m = re.match("^\/\w\/", extensionDir) + if m: + extensionDir = "%s:/%s" % (m.group(0)[1:2], extensionDir[3:]) + extensionDir = extensionDir.replace("/", "\\") + if sys.platform == "darwin": + # Needed to avoid tab crashes on mac due to level 3 sandboxing + sourceRoot = os.path.join(extensionDir, "..", "..", "..", "..") + os.environ["MOZ_DEVELOPER_REPO_DIR"] = os.path.abspath(sourceRoot) + + TPS = TPSTestRunner( + extensionDir, + binary=options.binary, + config=config, + debug=options.debug, + ignore_unused_engines=options.ignore_unused_engines, + logfile=options.logfile, + mobile=options.mobile, + resultfile=options.resultfile, + rlock=rlock, + testfile=testfile, + stop_on_error=options.stop_on_error, + ) + TPS.run_tests() + + if TPS.numfailed > 0 or TPS.numpassed == 0: + sys.exit(1) + + +if __name__ == "__main__": + main() |