summaryrefslogtreecommitdiffstats
path: root/testing/tps/tps/cli.py
diff options
context:
space:
mode:
Diffstat (limited to 'testing/tps/tps/cli.py')
-rw-r--r--testing/tps/tps/cli.py157
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()