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.py128
1 files changed, 128 insertions, 0 deletions
diff --git a/testing/tps/tps/cli.py b/testing/tps/tps/cli.py
new file mode 100644
index 000000000..63e8db0d4
--- /dev/null
+++ b/testing/tps/tps/cli.py
@@ -0,0 +1,128 @@
+# 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('/', '\\')
+
+ 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()