本文整理汇总了Python中mozrunner.FirefoxRunner.wait方法的典型用法代码示例。如果您正苦于以下问题:Python FirefoxRunner.wait方法的具体用法?Python FirefoxRunner.wait怎么用?Python FirefoxRunner.wait使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类mozrunner.FirefoxRunner
的用法示例。
在下文中一共展示了FirefoxRunner.wait方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: runprofile
# 需要导入模块: from mozrunner import FirefoxRunner [as 别名]
# 或者: from mozrunner.FirefoxRunner import wait [as 别名]
def runprofile(binary, fileobj):
try:
runner = FirefoxRunner(binary=binary, profile=fileobj.profile)
runner.start()
runner.wait()
except KeyboardInterrupt:
pass
示例2: run
# 需要导入模块: from mozrunner import FirefoxRunner [as 别名]
# 或者: from mozrunner.FirefoxRunner import wait [as 别名]
def run(self, test, phase='phase1', ignore_unused_engines=True):
self.profile.set_preferences({
'testing.tps.testFile': os.path.abspath(test),
'testing.tps.testPhase': phase,
'testing.tps.ignoreUnusedEngines': ignore_unused_engines,
})
args = ['-marionette']
process_args = {'processOutputLine': [self._log]}
self.logger.info('Running: {} {}'.format(self.firefox, ' '.join(args)))
self.logger.info('Using profile at: {}'.format(self.profile.profile))
runner = FirefoxRunner(
binary=self.firefox,
cmdargs=args,
profile=self.profile,
process_args=process_args)
runner.start(timeout=TIMEOUT)
runner.wait(timeout=TIMEOUT)
self.firefox_log.close()
with open(self.tps_log) as f:
for line in f.readlines():
if 'CROSSWEAVE ERROR: ' in line:
raise TPSError(line.partition('CROSSWEAVE ERROR: ')[-1])
with open(self.tps_log) as f:
assert 'test phase {}: PASS'.format(phase) in f.read()
示例3: run
# 需要导入模块: from mozrunner import FirefoxRunner [as 别名]
# 或者: from mozrunner.FirefoxRunner import wait [as 别名]
def run(self, test, phase='phase1', ignore_unused_engines=True):
args = [
'-tps={}'.format(os.path.abspath(test)),
'-tpsphase={}'.format(phase),
'-marionette']
if ignore_unused_engines:
args.append('--ignore-unused-engines')
process_args = {'processOutputLine': [self._log]}
self.logger.info('Running: {} {}'.format(self.firefox, ' '.join(args)))
self.logger.info('Using profile at: {}'.format(self.profile.profile))
runner = FirefoxRunner(
binary=self.firefox,
cmdargs=args,
profile=self.profile,
process_args=process_args)
runner.start(timeout=TIMEOUT)
runner.wait(timeout=TIMEOUT)
self.firefox_log.close()
with open(self.tps_log) as f:
for line in f.readlines():
if 'CROSSWEAVE ERROR: ' in line:
raise TPSError(line.partition('CROSSWEAVE ERROR: ')[-1])
with open(self.tps_log) as f:
assert 'test phase {}: PASS'.format(phase) in f.read()
示例4: run
# 需要导入模块: from mozrunner import FirefoxRunner [as 别名]
# 或者: from mozrunner.FirefoxRunner import wait [as 别名]
def run(self, profile=None, timeout=PROCESS_TIMEOUT, env=None, args=None):
"""Runs the given FirefoxRunner with the given Profile, waits
for completion, then returns the process exit code
"""
if profile is None:
profile = Profile()
self.profile = profile
if self.binary is None and self.url:
self.binary = self.download_build()
runner = FirefoxRunner(profile=self.profile, binary=self.binary,
env=env, cmdargs=args)
runner.start(timeout=timeout)
return runner.wait()
示例5: run
# 需要导入模块: from mozrunner import FirefoxRunner [as 别名]
# 或者: from mozrunner.FirefoxRunner import wait [as 别名]
def run(self):
#Run the built binary if it exists. ONLY WORKS IF BUILD WAS CALLED!
if sys.platform == "darwin":
runner = FirefoxRunner(binary=os.path.join(self.shellCacheDir,"mozbuild-trunk","obj-ff-dbg","dist","NightlyDebug.app","Contents","MacOS")+"/firefox-bin")
runner.start()
runner.wait()
elif sys.platform == "linux2":
runner = FirefoxRunner(binary=os.path.join(self.shellCacheDir,"mozbuild-trunk","obj-ff-dbg","dist","bin") + "/firefox")
runner.start()
runner.wait()
elif sys.platform == "win32" or sys.platform == "cygwin":
runner = FirefoxRunner(binary=os.path.join(self.shellCacheDir,"mozbuild-trunk","obj-ff-dbg","dist","bin") + "/firefox.exe")
runner.start()
runner.wait()
else:
print "Your platform is not currently supported."
quit()
示例6: bisectRecurse
# 需要导入模块: from mozrunner import FirefoxRunner [as 别名]
# 或者: from mozrunner.FirefoxRunner import wait [as 别名]
def bisectRecurse(self, testcondition=None, args_for_condition=[]):
#Recursively build, run, and prompt
verdict = ""
current_revision = captureStdout(self.hgPrefix+["id","-i"])
if self.remote:
print "on current revision "+current_revision
print "This would ask for a remote changeset, but it's not implemented yet."
#TODO:
#Remote bisection!
#Step 1. Check if revision is in the archive
#Step 2. If revision is not in the archive, set remote=False and continue (it will build and bisect that revision)
#if not check_archived:
# set remote false and continue
#else:
#Step 3. If the revision is in the archive, download it and its corresponding tests
#STEP3
#1. Extract tests into some directory
#2. Extract Nightly.app into "tests"
#MozInstaller(src=, dest="", dest_app="Nightly.app")
#3. run the following:
#test_command = ['python', 'mochitest/runtests.py', '--appname=./Nightly.app/Contents/MacOS/firefox-bin', '--utility-path=bin', '--extra-profile-file=bin/plugins', '--certificate-path=certs', '--autorun', '--close-when-done', '--console-level=INFO', '--test-path=test_name']
#output = captureStdout(test_command, ignoreStderr=True)
#set verdict based on output
#python mochitest/runtests.py --appname=./Nightly.app/Contents/MacOS/firefox-bin --utility-path=bin --extra-profile-file=bin/plugins --certificate-path=certs --autorun --close-when-done --console-level=INFO --test-path=test_name
#example test name: Harness_sanity/test_sanityException.html
#Step 4. Run and run test to get verdict
#Step 5. Set verdict
elif self.tryPusher:
try:
caller = BuildCaller(host=self.tryhost, port=int(self.tryport), data=current_revision)
print "Getting revision "+current_revision+"..."
except:
print "Failed to connect to trypusher. Make sure your settings are correct and that the trypusher server was started."
exit()
response = caller.getChangeset()
print "Waiting on Mozilla Pulse for revision " + response + "..."
url = caller.getURLResponse(response)
print "the base is " +url_base(url)
#Download it here
#1. Download from url, extract to same place as tests
#2. Run test or start browser.
binary_path = os.path.join(self.binaryDir,url_base(url))
downloaded_binary = download_url(url, dest=str(binary_path))
MozInstaller(src=str(binary_path), dest=str(self.testDir), dest_app="Nightly.app")
#now nightly is installed in
if sys.platform == "darwin":
binary_path = os.path.join(self.testDir,"Nightly.app")
runner = FirefoxRunner(binary=os.path.join(binary_path,"Contents","MacOS")+"/firefox-bin")
elif sys.platform == "linux2":
binary_path = os.path.join(self.testDir,"firefox")
runner = FirefoxRunner(binary=binary_path)
elif sys.platform == "win32" or sys.platform == "cygwin":
binary_path = os.path.join(self.testDir,"firefox.exe")
runner = FirefoxRunner(binary=binary_path)
else:
print "Your platform is not currently supported."
quit()
dest = runner.start()
if not dest:
print "Failed to start the downloaded binary"
verdict == "skip"
runner.wait()
if verdict == "skip":
pass
elif testcondition!=None:
#Support condition scripts where arg0 is the directory with the binary and tests
args_to_pass = [self.testDir] + args_for_condition
if hasattr(testcondition, "init"):
testcondition.init(args_to_pass)
#TODO: refactor to use directories with revision numbers
#8.2.11 - revision number can now be found in current_revision variable
tmpdir = tempfile.mkdtemp()
verdict = testcondition.interesting(args_to_pass,tmpdir)
#Allow user to return true/false or bad/good
if verdict != "bad" and verdict != "good":
verdict = "bad" if verdict else "good"
else:
try:
self.build()
except Exception:
print "This build failed!"
verdict = "skip"
if verdict == "skip":
pass
elif testcondition==None:
#Not using a test, interactive bisect begin!
self.run()
else:
#Using Jesse's idea: import any testing script and run it as the truth condition
args_to_pass = [self.objdir] + args_for_condition
if hasattr(testcondition, "init"):
#.........这里部分代码省略.........
示例7: valgrind_test
# 需要导入模块: from mozrunner import FirefoxRunner [as 别名]
# 或者: from mozrunner.FirefoxRunner import wait [as 别名]
#.........这里部分代码省略.........
firefox_args = [httpd.get_url()]
env = os.environ.copy()
env['G_SLICE'] = 'always-malloc'
env['MOZ_CC_RUN_DURING_SHUTDOWN'] = '1'
env['MOZ_CRASHREPORTER_NO_REPORT'] = '1'
env['XPCOM_DEBUG_BREAK'] = 'warn'
env.update(self.extra_environment_variables)
outputHandler = OutputHandler(self.log)
kp_kwargs = {'processOutputLine': [outputHandler]}
valgrind = 'valgrind'
if not os.path.exists(valgrind):
valgrind = findInPath(valgrind)
valgrind_args = [
valgrind,
'--smc-check=all-non-file',
'--vex-iropt-register-updates=allregs-at-mem-access',
'--gen-suppressions=all',
'--num-callers=36',
'--leak-check=full',
'--show-possibly-lost=no',
'--track-origins=yes',
'--trace-children=yes',
'-v', # Enable verbosity to get the list of used suppressions
# Avoid excessive delays in the presence of spinlocks.
# See bug 1309851.
'--fair-sched=yes',
# Keep debuginfo after library unmap. See bug 1382280.
'--keep-debuginfo=yes',
# Reduce noise level on rustc and/or LLVM compiled code.
# See bug 1365915
'--expensive-definedness-checks=yes',
]
for s in suppressions:
valgrind_args.append('--suppressions=' + s)
supps_dir = os.path.join(build_dir, 'valgrind')
supps_file1 = os.path.join(supps_dir, 'cross-architecture.sup')
valgrind_args.append('--suppressions=' + supps_file1)
if mozinfo.os == 'linux':
machtype = {
'x86_64': 'x86_64-pc-linux-gnu',
'x86': 'i386-pc-linux-gnu',
}.get(mozinfo.processor)
if machtype:
supps_file2 = os.path.join(supps_dir, machtype + '.sup')
if os.path.isfile(supps_file2):
valgrind_args.append('--suppressions=' + supps_file2)
exitcode = None
timeout = 1800
try:
runner = FirefoxRunner(profile=profile,
binary=self.get_binary_path(),
cmdargs=firefox_args,
env=env,
process_args=kp_kwargs)
runner.start(debug_args=valgrind_args)
exitcode = runner.wait(timeout=timeout)
finally:
errs = outputHandler.error_count
supps = outputHandler.suppression_count
if errs != supps:
status = 1 # turns the TBPL job orange
self.log(logging.ERROR, 'valgrind-fail-parsing',
{'errs': errs, 'supps': supps},
'TEST-UNEXPECTED-FAIL | valgrind-test | error parsing: {errs} errors '
'seen, but {supps} generated suppressions seen')
elif errs == 0:
status = 0
self.log(logging.INFO, 'valgrind-pass', {},
'TEST-PASS | valgrind-test | valgrind found no errors')
else:
status = 1 # turns the TBPL job orange
# We've already printed details of the errors.
if exitcode is None:
status = 2 # turns the TBPL job red
self.log(logging.ERROR, 'valgrind-fail-timeout',
{'timeout': timeout},
'TEST-UNEXPECTED-FAIL | valgrind-test | Valgrind timed out '
'(reached {timeout} second limit)')
elif exitcode != 0:
status = 2 # turns the TBPL job red
self.log(logging.ERROR, 'valgrind-fail-errors', {},
'TEST-UNEXPECTED-FAIL | valgrind-test | non-zero exit code'
'from Valgrind')
httpd.stop()
return status
示例8: valgrind_test
# 需要导入模块: from mozrunner import FirefoxRunner [as 别名]
# 或者: from mozrunner.FirefoxRunner import wait [as 别名]
def valgrind_test(self, suppressions):
import json
import re
import sys
import tempfile
from mozbuild.base import MozbuildObject
from mozfile import TemporaryDirectory
from mozhttpd import MozHttpd
from mozprofile import FirefoxProfile, Preferences
from mozprofile.permissions import ServerLocations
from mozrunner import FirefoxRunner
from mozrunner.utils import findInPath
build_dir = os.path.join(self.topsrcdir, "build")
# XXX: currently we just use the PGO inputs for Valgrind runs. This may
# change in the future.
httpd = MozHttpd(docroot=os.path.join(build_dir, "pgo"))
httpd.start(block=False)
with TemporaryDirectory() as profilePath:
# TODO: refactor this into mozprofile
prefpath = os.path.join(self.topsrcdir, "testing", "profiles", "prefs_general.js")
prefs = {}
prefs.update(Preferences.read_prefs(prefpath))
interpolation = {"server": "%s:%d" % httpd.httpd.server_address, "OOP": "false"}
prefs = json.loads(json.dumps(prefs) % interpolation)
for pref in prefs:
prefs[pref] = Preferences.cast(prefs[pref])
quitter = os.path.join(self.distdir, "xpi-stage", "quitter")
locations = ServerLocations()
locations.add_host(host="127.0.0.1", port=httpd.httpd.server_port, options="primary")
profile = FirefoxProfile(profile=profilePath, preferences=prefs, addons=[quitter], locations=locations)
firefox_args = [httpd.get_url()]
env = os.environ.copy()
env["G_SLICE"] = "always-malloc"
env["XPCOM_CC_RUN_DURING_SHUTDOWN"] = "1"
env["MOZ_CRASHREPORTER_NO_REPORT"] = "1"
env["XPCOM_DEBUG_BREAK"] = "warn"
class OutputHandler(object):
def __init__(self):
self.found_errors = False
def __call__(self, line):
print(line)
m = re.match(r".*ERROR SUMMARY: [1-9]\d* errors from \d+ contexts", line)
if m:
self.found_errors = True
outputHandler = OutputHandler()
kp_kwargs = {"processOutputLine": [outputHandler]}
valgrind = "valgrind"
if not os.path.exists(valgrind):
valgrind = findInPath(valgrind)
valgrind_args = [
valgrind,
"--smc-check=all-non-file",
"--vex-iropt-register-updates=allregs-at-mem-access",
"--gen-suppressions=all",
"--num-callers=20",
"--leak-check=full",
"--show-possibly-lost=no",
"--track-origins=yes",
]
for s in suppressions:
valgrind_args.append("--suppressions=" + s)
supps_dir = os.path.join(build_dir, "valgrind")
supps_file1 = os.path.join(supps_dir, "cross-architecture.sup")
valgrind_args.append("--suppressions=" + supps_file1)
# MACHTYPE is an odd bash-only environment variable that doesn't
# show up in os.environ, so we have to get it another way.
machtype = subprocess.check_output(["bash", "-c", "echo $MACHTYPE"]).rstrip()
supps_file2 = os.path.join(supps_dir, machtype + ".sup")
if os.path.isfile(supps_file2):
valgrind_args.append("--suppressions=" + supps_file2)
exitcode = None
try:
runner = FirefoxRunner(
profile=profile, binary=self.get_binary_path(), cmdargs=firefox_args, env=env, kp_kwargs=kp_kwargs
)
runner.start(debug_args=valgrind_args)
exitcode = runner.wait()
finally:
if not outputHandler.found_errors:
status = 0
print("TEST-PASS | valgrind-test | valgrind found no errors")
#.........这里部分代码省略.........
示例9: FirefoxBrowser
# 需要导入模块: from mozrunner import FirefoxRunner [as 别名]
# 或者: from mozrunner.FirefoxRunner import wait [as 别名]
#.........这里部分代码省略.........
if os.path.isfile(profiles):
with open(profiles, 'r') as fh:
for name in json.load(fh)['web-platform-tests']:
if self.browser_channel in (None, 'nightly'):
pref_paths.append(os.path.join(self.prefs_root, name, 'user.js'))
elif name != 'unittest-features':
pref_paths.append(os.path.join(self.prefs_root, name, 'user.js'))
else:
# Old preference files used before the creation of profiles.json (remove when no longer supported)
legacy_pref_paths = (
os.path.join(self.prefs_root, 'prefs_general.js'), # Used in Firefox 60 and below
os.path.join(self.prefs_root, 'common', 'user.js'), # Used in Firefox 61
)
for path in legacy_pref_paths:
if os.path.isfile(path):
pref_paths.append(path)
for path in pref_paths:
if os.path.exists(path):
prefs.add(Preferences.read_prefs(path))
else:
self.logger.warning("Failed to find base prefs file in %s" % path)
# Add any custom preferences
prefs.add(self.extra_prefs, cast=True)
return prefs()
def stop(self, force=False):
if self.runner is not None and self.runner.is_running():
try:
# For Firefox we assume that stopping the runner prompts the
# browser to shut down. This allows the leak log to be written
for clean, stop_f in [(True, lambda: self.runner.wait(self.shutdown_timeout)),
(False, lambda: self.runner.stop(signal.SIGTERM)),
(False, lambda: self.runner.stop(signal.SIGKILL))]:
if not force or not clean:
retcode = stop_f()
if retcode is not None:
self.logger.info("Browser exited with return code %s" % retcode)
break
except OSError:
# This can happen on Windows if the process is already dead
pass
self.process_leaks()
self.logger.debug("stopped")
def process_leaks(self):
self.logger.info("PROCESS LEAKS %s" % self.leak_report_file)
if self.lsan_handler:
self.lsan_handler.process()
if self.leak_report_file is not None:
mozleak.process_leak_log(
self.leak_report_file,
leak_thresholds=self.mozleak_thresholds,
ignore_missing_leaks=["gmplugin"],
log=self.logger,
stack_fixer=self.stack_fixer,
scope=self.group_metadata.get("scope"),
allowed=self.mozleak_allowed
)
def pid(self):
if self.runner.process_handler is None:
return None
示例10: FirefoxRunner
# 需要导入模块: from mozrunner import FirefoxRunner [as 别名]
# 或者: from mozrunner.FirefoxRunner import wait [as 别名]
preferences=prefs,
addons=[os.path.join(build.distdir, 'xpi-stage', 'quitter')],
locations=locations)
env = os.environ.copy()
env["MOZ_CRASHREPORTER_NO_REPORT"] = "1"
env["XPCOM_DEBUG_BREAK"] = "warn"
# For VC12, make sure we can find the right bitness of pgort120.dll
if "VS120COMNTOOLS" in env and not substs["HAVE_64BIT_OS"]:
vc12dir = os.path.abspath(os.path.join(env["VS120COMNTOOLS"],
"../../VC/bin"))
if os.path.exists(vc12dir):
env["PATH"] = vc12dir + ";" + env["PATH"]
jarlog = os.getenv("JARLOG_FILE")
if jarlog:
env["MOZ_JAR_LOG_FILE"] = os.path.abspath(jarlog)
print "jarlog: %s" % env["MOZ_JAR_LOG_FILE"]
cmdargs = ["http://localhost:%d/index.html" % PORT]
runner = FirefoxRunner(profile=profile,
binary=build.get_binary_path(where="staged-package"),
cmdargs=cmdargs,
env=env)
runner.start(debug_args=debug_args, interactive=interactive)
runner.wait()
httpd.stop()
finally:
shutil.rmtree(profilePath)
示例11: FirefoxBrowser
# 需要导入模块: from mozrunner import FirefoxRunner [as 别名]
# 或者: from mozrunner.FirefoxRunner import wait [as 别名]
#.........这里部分代码省略.........
self.logger.debug("Firefox Started")
def load_prefs(self):
prefs = Preferences()
pref_paths = []
prefs_general = os.path.join(self.prefs_root, 'prefs_general.js')
if os.path.isfile(prefs_general):
# Old preference file used in Firefox 60 and earlier (remove when no longer supported)
pref_paths.append(prefs_general)
profiles = os.path.join(self.prefs_root, 'profiles.json')
if os.path.isfile(profiles):
with open(profiles, 'r') as fh:
for name in json.load(fh)['web-platform-tests']:
pref_paths.append(os.path.join(self.prefs_root, name, 'user.js'))
for path in pref_paths:
if os.path.exists(path):
prefs.add(Preferences.read_prefs(path))
else:
self.logger.warning("Failed to find base prefs file in %s" % path)
# Add any custom preferences
prefs.add(self.extra_prefs, cast=True)
return prefs()
def stop(self, force=False):
if self.runner is not None and self.runner.is_running():
try:
# For Firefox we assume that stopping the runner prompts the
# browser to shut down. This allows the leak log to be written
for clean, stop_f in [(True, lambda: self.runner.wait(self.shutdown_timeout)),
(False, lambda: self.runner.stop(signal.SIGTERM)),
(False, lambda: self.runner.stop(signal.SIGKILL))]:
if not force or not clean:
retcode = stop_f()
if retcode is not None:
self.logger.info("Browser exited with return code %s" % retcode)
break
except OSError:
# This can happen on Windows if the process is already dead
pass
self.logger.debug("stopped")
def process_leaks(self):
self.logger.debug("PROCESS LEAKS %s" % self.leak_report_file)
if self.leak_report_file is None:
return
mozleak.process_leak_log(
self.leak_report_file,
leak_thresholds={
"default": 0,
"tab": 10000, # See dependencies of bug 1051230.
# GMP rarely gets a log, but when it does, it leaks a little.
"geckomediaplugin": 20000,
},
ignore_missing_leaks=["geckomediaplugin"],
log=self.logger,
stack_fixer=self.stack_fixer
)
def pid(self):
if self.runner.process_handler is None:
return None
示例12: B2GDesktopReftest
# 需要导入模块: from mozrunner import FirefoxRunner [as 别名]
# 或者: from mozrunner.FirefoxRunner import wait [as 别名]
class B2GDesktopReftest(RefTest):
build_type = "desktop"
marionette = None
def __init__(self, marionette_args):
RefTest.__init__(self)
self.last_test = os.path.basename(__file__)
self.marionette_args = marionette_args
self.profile = None
self.runner = None
self.test_script = os.path.join(here, 'b2g_start_script.js')
self.timeout = None
def run_marionette_script(self):
self.marionette = Marionette(**self.marionette_args)
assert(self.marionette.wait_for_port())
self.marionette.start_session()
if self.build_type == "mulet":
self._wait_for_homescreen(timeout=300)
self._unlockScreen()
self.marionette.set_context(self.marionette.CONTEXT_CHROME)
if os.path.isfile(self.test_script):
f = open(self.test_script, 'r')
self.test_script = f.read()
f.close()
self.marionette.execute_script(self.test_script)
def run_tests(self, tests, options):
manifests = self.resolver.resolveManifests(options, tests)
self.profile = self.create_profile(options, manifests,
profile_to_clone=options.profile)
env = self.buildBrowserEnv(options, self.profile.profile)
kp_kwargs = { 'processOutputLine': [self._on_output],
'onTimeout': [self._on_timeout],
'kill_on_timeout': False }
if not options.debugger:
if not options.timeout:
if mozinfo.info['debug']:
options.timeout = 420
else:
options.timeout = 300
self.timeout = options.timeout + 30.0
log.info("%s | Running tests: start.", os.path.basename(__file__))
cmd, args = self.build_command_line(options.app,
ignore_window_size=options.ignoreWindowSize,
browser_arg=options.browser_arg)
self.runner = FirefoxRunner(profile=self.profile,
binary=cmd,
cmdargs=args,
env=env,
process_class=ProcessHandler,
process_args=kp_kwargs,
symbols_path=options.symbolsPath)
status = 0
try:
self.runner.start(outputTimeout=self.timeout)
log.info("%s | Application pid: %d",
os.path.basename(__file__),
self.runner.process_handler.pid)
# kick starts the reftest harness
self.run_marionette_script()
status = self.runner.wait()
finally:
self.runner.check_for_crashes(test_name=self.last_test)
self.runner.cleanup()
if status > 0:
log.testFail("%s | application terminated with exit code %s",
self.last_test, status)
elif status < 0:
log.info("%s | application killed with signal %s",
self.last_test, -status)
log.info("%s | Running tests: end.", os.path.basename(__file__))
return status
def create_profile(self, options, manifests, profile_to_clone=None):
profile = RefTest.createReftestProfile(self, options, manifests,
profile_to_clone=profile_to_clone)
prefs = {}
# Turn off the locale picker screen
prefs["browser.firstrun.show.localepicker"] = False
if not self.build_type == "mulet":
# FIXME: With Mulet we can't set this values since Gaia won't launch
prefs["b2g.system_startup_url"] = \
"app://test-container.gaiamobile.org/index.html"
prefs["b2g.system_manifest_url"] = \
"app://test-container.gaiamobile.org/manifest.webapp"
# Make sure we disable system updates
prefs["app.update.enabled"] = False
prefs["app.update.url"] = ""
prefs["app.update.url.override"] = ""
# Disable webapp updates
#.........这里部分代码省略.........
示例13: run
# 需要导入模块: from mozrunner import FirefoxRunner [as 别名]
# 或者: from mozrunner.FirefoxRunner import wait [as 别名]
def run():
parser = argparse.ArgumentParser(description="Run crawler")
parser.add_argument("-b", "--binary", type=str, help="path to the Firefox binary")
parser.add_argument("-a", "--abpdir", type=str, help="path to the Adblock Plus repository")
parser.add_argument(
"-f",
"--filters",
metavar="url",
type=str,
nargs="+",
default=[
"https://easylist-downloads.adblockplus.org/easylist.txt",
"https://easylist-downloads.adblockplus.org/exceptionrules.txt",
],
help="filter lists to install in Adblock Plus. The arguments can also have the format path=url, the data will be read from the specified path then.",
)
parser.add_argument("-t", "--timeout", type=int, default=300, help="Load timeout (seconds)")
parser.add_argument("-x", "--maxtabs", type=int, default=15, help="Maximal number of tabs to open in parallel")
parser.add_argument("list", type=str, help="URL list to process")
parser.add_argument("outdir", type=str, help="directory to write data into")
parameters = parser.parse_args()
import buildtools.packagerGecko as packager
cleanup = []
try:
base_dir = os.path.dirname(os.path.abspath(__file__))
handle, crawlerxpi = tempfile.mkstemp(suffix=".xpi")
os.close(handle)
cleanup.append(crawlerxpi)
packager.createBuild(base_dir, outFile=crawlerxpi, releaseBuild=True)
abpxpi = "https://addons.mozilla.org/firefox/downloads/latest/1865/addon-1865-latest.xpi"
if parameters.abpdir:
handle, abpxpi = tempfile.mkstemp(suffix=".xpi")
os.close(handle)
cleanup.append(abpxpi)
packager.createBuild(parameters.abpdir, outFile=abpxpi, releaseBuild=True)
profile = FirefoxProfile(
addons=[crawlerxpi, abpxpi],
preferences={
"browser.startup.homepage": "about:blank",
"browser.tabs.warnOnCloseOtherTabs": False,
"browser.uitour.enabled": False,
"prompts.tab_modal.enabled": False,
"startup.homepage_welcome_url": "about:blank",
"startup.homepage_welcome_url.additional": "about:blank",
"xpinstall.signatures.required": False,
},
)
abpsettings = os.path.join(profile.profile, "adblockplus")
os.makedirs(abpsettings)
with open(os.path.join(abpsettings, "patterns.ini"), "w") as handle:
print >> handle, "# Adblock Plus preferences"
print >> handle, "version=4"
for url in parameters.filters:
if "=" in url:
path, url = url.split("=", 1)
with open(path, "r") as source:
data = source.read()
else:
data = urllib.urlopen(url).read()
print >> handle, "[Subscription]"
print >> handle, "url=%s" % url
print >> handle, "[Subscription filters]"
print >> handle, "\n".join(data.splitlines()[1:])
finally:
for path in cleanup:
os.unlink(path)
server = None
try:
port = random.randrange(2000, 60000)
print "Communicating with client on port %i" % port
app = CrawlerApp(parameters)
server = make_server("localhost", port, app)
app.server = server
threading.Thread(target=lambda: server.serve_forever()).start()
runner = FirefoxRunner(
profile=profile,
binary=parameters.binary,
cmdargs=["--crawler-port", str(port)],
env=dict(os.environ, MOZ_CRASHREPORTER_DISABLE="1"),
)
while app.urls:
runner.start()
runner.wait()
finally:
if server:
server.shutdown()
profile.cleanup()
示例14: valgrind_test
# 需要导入模块: from mozrunner import FirefoxRunner [as 别名]
# 或者: from mozrunner.FirefoxRunner import wait [as 别名]
def valgrind_test(self, suppressions):
import json
import sys
import tempfile
from mozbuild.base import MozbuildObject
from mozfile import TemporaryDirectory
from mozhttpd import MozHttpd
from mozprofile import FirefoxProfile, Preferences
from mozprofile.permissions import ServerLocations
from mozrunner import FirefoxRunner
from mozrunner.utils import findInPath
from valgrind.output_handler import OutputHandler
build_dir = os.path.join(self.topsrcdir, 'build')
# XXX: currently we just use the PGO inputs for Valgrind runs. This may
# change in the future.
httpd = MozHttpd(docroot=os.path.join(build_dir, 'pgo'))
httpd.start(block=False)
with TemporaryDirectory() as profilePath:
#TODO: refactor this into mozprofile
prefpath = os.path.join(self.topsrcdir, 'testing', 'profiles', 'prefs_general.js')
prefs = {}
prefs.update(Preferences.read_prefs(prefpath))
interpolation = { 'server': '%s:%d' % httpd.httpd.server_address,
'OOP': 'false'}
prefs = json.loads(json.dumps(prefs) % interpolation)
for pref in prefs:
prefs[pref] = Preferences.cast(prefs[pref])
quitter = os.path.join(self.distdir, 'xpi-stage', 'quitter')
locations = ServerLocations()
locations.add_host(host='127.0.0.1',
port=httpd.httpd.server_port,
options='primary')
profile = FirefoxProfile(profile=profilePath,
preferences=prefs,
addons=[quitter],
locations=locations)
firefox_args = [httpd.get_url()]
env = os.environ.copy()
env['G_SLICE'] = 'always-malloc'
env['XPCOM_CC_RUN_DURING_SHUTDOWN'] = '1'
env['MOZ_CRASHREPORTER_NO_REPORT'] = '1'
env['XPCOM_DEBUG_BREAK'] = 'warn'
outputHandler = OutputHandler()
kp_kwargs = {'processOutputLine': [outputHandler]}
valgrind = 'valgrind'
if not os.path.exists(valgrind):
valgrind = findInPath(valgrind)
valgrind_args = [
valgrind,
'--smc-check=all-non-file',
'--vex-iropt-register-updates=allregs-at-mem-access',
'--gen-suppressions=all',
'--num-callers=20',
'--leak-check=full',
'--show-possibly-lost=no',
'--track-origins=yes'
]
for s in suppressions:
valgrind_args.append('--suppressions=' + s)
supps_dir = os.path.join(build_dir, 'valgrind')
supps_file1 = os.path.join(supps_dir, 'cross-architecture.sup')
valgrind_args.append('--suppressions=' + supps_file1)
# MACHTYPE is an odd bash-only environment variable that doesn't
# show up in os.environ, so we have to get it another way.
machtype = subprocess.check_output(['bash', '-c', 'echo $MACHTYPE']).rstrip()
supps_file2 = os.path.join(supps_dir, machtype + '.sup')
if os.path.isfile(supps_file2):
valgrind_args.append('--suppressions=' + supps_file2)
exitcode = None
try:
runner = FirefoxRunner(profile=profile,
binary=self.get_binary_path(),
cmdargs=firefox_args,
env=env,
kp_kwargs=kp_kwargs)
runner.start(debug_args=valgrind_args)
exitcode = runner.wait()
finally:
errs = outputHandler.error_count
supps = outputHandler.suppression_count
if errs != supps:
status = 1 # turns the TBPL job orange
print('TEST-UNEXPECTED-FAILURE | valgrind-test | error parsing:', errs, "errors seen, but", supps, "generated suppressions seen")
#.........这里部分代码省略.........
示例15: run
# 需要导入模块: from mozrunner import FirefoxRunner [as 别名]
# 或者: from mozrunner.FirefoxRunner import wait [as 别名]
def run():
parser = argparse.ArgumentParser(description='Run crawler')
parser.add_argument(
'-b', '--binary', type=str,
help='path to the Firefox binary'
)
parser.add_argument(
'-a', '--abpdir', type=str,
help='path to the Adblock Plus repository'
)
parser.add_argument(
'-f', '--filters', metavar='url', type=str, nargs='+',
default=["https://easylist-downloads.adblockplus.org/easylist.txt", "https://easylist-downloads.adblockplus.org/exceptionrules.txt"],
help='filter lists to install in Adblock Plus. The arguments can also have the format path=url, the data will be read from the specified path then.'
)
parser.add_argument(
'-t', '--timeout', type=int, default=300,
help='Load timeout (seconds)'
)
parser.add_argument(
'-x', '--maxtabs', type=int, default=15,
help='Maximal number of tabs to open in parallel'
)
parser.add_argument(
'list', type=str,
help='URL list to process'
)
parser.add_argument(
'outdir', type=str,
help='directory to write data into'
)
parameters = parser.parse_args()
import buildtools.packagerGecko as packager
cleanup = []
try:
base_dir = os.path.dirname(__file__)
handle, crawlerxpi = tempfile.mkstemp(suffix='.xpi')
os.close(handle)
cleanup.append(crawlerxpi)
packager.createBuild(base_dir, outFile=crawlerxpi, releaseBuild=True)
abpxpi = 'https://addons.mozilla.org/firefox/downloads/latest/1865/addon-1865-latest.xpi'
if parameters.abpdir:
handle, abpxpi = tempfile.mkstemp(suffix='.xpi')
os.close(handle)
cleanup.append(abpxpi)
packager.createBuild(parameters.abpdir, outFile=abpxpi, releaseBuild=True)
profile = FirefoxProfile(
addons=[
crawlerxpi,
abpxpi,
],
preferences={
'browser.uitour.enabled': False,
'prompts.tab_modal.enabled': False,
}
)
abpsettings = os.path.join(profile.profile, 'adblockplus')
os.makedirs(abpsettings)
with open(os.path.join(abpsettings, 'patterns.ini'), 'w') as handle:
print >>handle, '# Adblock Plus preferences'
print >>handle, 'version=4'
for url in parameters.filters:
if '=' in url:
path, url = url.split('=', 1)
with open(path, 'r') as source:
data = source.read()
else:
data = urllib.urlopen(url).read()
print >>handle, '[Subscription]'
print >>handle, 'url=%s' % url
print >>handle, '[Subscription filters]'
print >>handle, '\n'.join(data.splitlines()[1:])
finally:
for path in cleanup:
os.unlink(path)
server = None
try:
port = random.randrange(2000, 60000)
print "Communicating with client on port %i" % port
app = CrawlerApp(parameters)
server = make_server('localhost', port, app)
app.server = server
threading.Thread(target=lambda: server.serve_forever()).start()
runner = FirefoxRunner(
profile=profile,
binary=parameters.binary,
cmdargs=['--crawler-port', str(port)],
env=dict(os.environ, MOZ_CRASHREPORTER_DISABLE='1'),
)
while app.urls:
runner.start()
runner.wait()
finally:
#.........这里部分代码省略.........