def start(self): profile_args = {"preferences": self.required_prefs} if not self.profile_path: profile_args["restore"] = False profile = Profile(**profile_args) else: profile_args["path_from"] = self.profile_path profile = Profile.clone(**profile_args) if self.gecko_log is None: self.gecko_log = 'gecko.log' elif os.path.isdir(self.gecko_log): fname = "gecko-%d.log" % time.time() self.gecko_log = os.path.join(self.gecko_log, fname) self.gecko_log = os.path.realpath(self.gecko_log) if os.access(self.gecko_log, os.F_OK): os.remove(self.gecko_log) env = os.environ.copy() # environment variables needed for crashreporting # https://developer.mozilla.org/docs/Environment_variables_affecting_crash_reporting env.update({ 'MOZ_CRASHREPORTER': '1', 'MOZ_CRASHREPORTER_NO_REPORT': '1', }) self.runner = Runner( binary=self.bin, profile=profile, cmdargs=['-no-remote', '-marionette'] + self.app_args, env=env, symbols_path=self.symbols_path, process_args={ 'processOutputLine': [NullOutput()], 'logfile': self.gecko_log}) self.runner.start()
def start(self): profile_args = {"preferences": deepcopy(self.required_prefs)} profile_args["preferences"]["marionette.defaultPrefs.port"] = self.marionette_port if self.prefs: profile_args["preferences"].update(self.prefs) if self.verbose: level = "TRACE" if self.verbose >= 2 else "DEBUG" profile_args["preferences"]["marionette.logging"] = level if '-jsdebugger' in self.app_args: profile_args["preferences"].update({ "devtools.browsertoolbox.panel": "jsdebugger", "devtools.debugger.remote-enabled": True, "devtools.chrome.enabled": True, "devtools.debugger.prompt-connection": False, "marionette.debugging.clicktostart": True, }) if self.addons: profile_args['addons'] = self.addons if hasattr(self, "profile_path") and self.profile is None: if not self.profile_path: if self.workspace: profile_args['profile'] = tempfile.mkdtemp( suffix='.mozrunner-{:.0f}'.format(time.time()), dir=self.workspace) self.profile = Profile(**profile_args) else: profile_args["path_from"] = self.profile_path profile_name = '{}-{:.0f}'.format( os.path.basename(self.profile_path), time.time() ) if self.workspace: profile_args["path_to"] = os.path.join(self.workspace, profile_name) self.profile = Profile.clone(**profile_args) process_args = { 'processOutputLine': [NullOutput()], } if self.gecko_log == '-': process_args['stream'] = sys.stdout else: process_args['logfile'] = self.gecko_log env = os.environ.copy() # environment variables needed for crashreporting # https://developer.mozilla.org/docs/Environment_variables_affecting_crash_reporting env.update({'MOZ_CRASHREPORTER': '1', 'MOZ_CRASHREPORTER_NO_REPORT': '1'}) self.runner = Runner( binary=self.bin, profile=self.profile, cmdargs=['-no-remote', '-marionette'] + self.app_args, env=env, symbols_path=self.symbols_path, process_args=process_args) self.runner.start()
def start(self): profile_args = {"preferences": deepcopy(self.required_prefs)} if self.prefs: profile_args["preferences"].update(self.prefs) if not self.profile_path: profile_args["restore"] = False profile = Profile(**profile_args) else: profile_args["path_from"] = self.profile_path profile = Profile.clone(**profile_args) if self.gecko_log is None: self.gecko_log = 'gecko.log' elif os.path.isdir(self.gecko_log): fname = "gecko-%d.log" % time.time() self.gecko_log = os.path.join(self.gecko_log, fname) self.gecko_log = os.path.realpath(self.gecko_log) if os.access(self.gecko_log, os.F_OK): if platform.system() is 'Windows': # NOTE: windows has a weird filesystem where it happily 'closes' # the file, but complains if you try to delete it. You get a # 'file still in use' error. Sometimes you can wait a bit and # a retry will succeed. # If all retries fail, we'll just continue without removing # the file. In this case, if we are restarting the instance, # then the new logs just get appended to the old file. tries = 0 while tries < 10: try: os.remove(self.gecko_log) break except WindowsError as e: if e.errno == errno.EACCES: tries += 1 time.sleep(0.5) else: raise e else: os.remove(self.gecko_log) env = os.environ.copy() # environment variables needed for crashreporting # https://developer.mozilla.org/docs/Environment_variables_affecting_crash_reporting env.update({ 'MOZ_CRASHREPORTER': '1', 'MOZ_CRASHREPORTER_NO_REPORT': '1', }) self.runner = Runner( binary=self.bin, profile=profile, cmdargs=['-no-remote', '-marionette'] + self.app_args, env=env, symbols_path=self.symbols_path, process_args={ 'processOutputLine': [NullOutput()], 'logfile': self.gecko_log}) self.runner.start()
def start(self): profile_args = {"preferences": deepcopy(self.required_prefs)} profile_args["preferences"][ "marionette.defaultPrefs.port"] = self.marionette_port if self.prefs: profile_args["preferences"].update(self.prefs) if '-jsdebugger' in self.app_args: profile_args["preferences"].update({ "devtools.browsertoolbox.panel": "jsdebugger", "devtools.debugger.remote-enabled": True, "devtools.chrome.enabled": True, "devtools.debugger.prompt-connection": False, "marionette.debugging.clicktostart": True, }) if self.addons: profile_args['addons'] = self.addons if hasattr(self, "profile_path") and self.profile is None: if not self.profile_path: self.profile = Profile(**profile_args) else: profile_args["path_from"] = self.profile_path self.profile = Profile.clone(**profile_args) process_args = { 'processOutputLine': [NullOutput()], } if self.gecko_log == '-': process_args['stream'] = sys.stdout else: process_args['logfile'] = self.gecko_log env = os.environ.copy() # environment variables needed for crashreporting # https://developer.mozilla.org/docs/Environment_variables_affecting_crash_reporting env.update({ 'MOZ_CRASHREPORTER': '1', 'MOZ_CRASHREPORTER_NO_REPORT': '1', }) self.runner = Runner(binary=self.bin, profile=self.profile, cmdargs=['-no-remote', '-marionette'] + self.app_args, env=env, symbols_path=self.symbols_path, process_args=process_args) self.runner.start()
def start(self, profile, addons, cmdargs): if profile: profile = self.profileClass(profile=profile, addons=addons) elif len(addons): profile = self.profileClass(addons=addons) else: profile = self.profileClass() self.runner = Runner(binary=self.binary, cmdargs=cmdargs, profile=profile) self.runner.start() return True
def _start(self, profile=None, addons=(), cmdargs=(), preferences=None): profile = self._create_profile(profile=profile, addons=addons, preferences=preferences) self._logger.info("Launching %s" % self.binary) process_args = {'processOutputLine': [self._logger.debug]} self.runner = Runner(binary=self.binary, cmdargs=cmdargs, profile=profile, process_args=process_args) self.runner.start()
def _start( self, profile=None, addons=(), cmdargs=(), preferences=None, adb_profile_dir=None, ): profile = self._create_profile(profile=profile, addons=addons, preferences=preferences) LOG.info("Launching %s" % self.binary) self.runner = Runner(binary=self.binary, cmdargs=cmdargs, profile=profile) def _on_exit(): # if we are stopping the process do not log anything. if not self._stopping: # mozprocess (behind mozrunner) fire 'onFinish' # a bit early - let's ensure the process is finished. # we have to call wait() directly on the subprocess # instance of the ProcessHandler, else on windows # None is returned... # TODO: search that bug and fix that in mozprocess or # mozrunner. (likely mozproces) try: exitcode = self.runner.process_handler.proc.wait() except Exception: print() LOG.error( "Error while waiting process, consider filing a bug.", exc_info=True, ) return if exitcode != 0: # first print a blank line, to be sure we don't # write on an already printed line without EOL. print() LOG.warning("Process exited with code %s" % exitcode) # we don't need stdin, and GUI will not work in Windowed mode if set # see: https://stackoverflow.com/a/40108817 # also, don't stream to stdout: https://bugzilla.mozilla.org/show_bug.cgi?id=1653349 devnull = open(os.devnull, "wb") self.runner.process_args = { "processOutputLine": [get_default_logger("process").info], "stdin": devnull, "stream": None, "onFinish": _on_exit, } self.runner.start()
def _start(self, profile=None, addons=(), cmdargs=()): if profile: profile = self.profile_class(profile=profile, addons=addons) elif len(addons): profile = self.profile_class(addons=addons) else: profile = self.profile_class() process_args = {'processOutputLine': [self._logger.debug]} self.runner = Runner(binary=self.binary, cmdargs=cmdargs, profile=profile, process_args=process_args) self.runner.start()
def run(self): self.profile_dir = os.path.join(tempfile.mkdtemp(suffix='.gaiaunittest'), 'profile') shutil.copytree(self.profile, self.profile_dir) cmdargs = ['--runapp', 'Test Agent'] if self.browser_arg: cmdargs += list(self.browser_arg) profile = Profile(profile=self.profile_dir) self.runner = Runner(binary=self.binary, profile=profile, clean_profile=False, cmdargs=cmdargs, symbols_path=self.symbols_path) self.runner.start()
def start(self, date=datetime.date.today()): self.install(date) if self.profile: profile = self.app.profileClass(profile=self.profile, addons=self.addons) elif len(self.addons): profile = self.app.profileClass(addons=self.addons) else: profile = self.app.profileClass() self.runner = Runner(binary=self.app.binary, cmdargs=self.cmdargs, profile=profile) self.runner.names = [self.app.processName] self.runner.start() return True
def start(self, date=datetime.date.today()): if not self.app.download(date=date): print "could not find nightly from " + str(date) return False # download failed self.app.install() if self.profile: profile = self.app.profileClass(profile=self.profile, addons=self.addons) elif len(self.addons): profile = self.app.profileClass(addons=self.addons) else: profile = self.app.profileClass() print "running nightly from " + str(date) + "\n" self.runner = Runner(binary=self.app.binary, cmdargs=self.cmdargs, profile=profile) self.runner.names = [self.app.processName] self.runner.start() return True
def _start(self, profile=None, addons=(), cmdargs=(), preferences=None, adb_profile_dir=None): profile = self._create_profile(profile=profile, addons=addons, preferences=preferences) LOG.info("Launching %s" % self.binary) self.runner = Runner(binary=self.binary, cmdargs=cmdargs, profile=profile) def _on_exit(): # if we are stopping the process do not log anything. if not self._stopping: # mozprocess (behind mozrunner) fire 'onFinish' # a bit early - let's ensure the process is finished. # we have to call wait() directly on the subprocess # instance of the ProcessHandler, else on windows # None is returned... # TODO: search that bug and fix that in mozprocess or # mozrunner. (likely mozproces) try: exitcode = self.runner.process_handler.proc.wait() except Exception: print() LOG.error( "Error while waiting process, consider filing a bug.", exc_info=True) return if exitcode != 0: # first print a blank line, to be sure we don't # write on an already printed line without EOL. print() LOG.warning('Process exited with code %s' % exitcode) self.runner.process_args = { 'processOutputLine': [get_default_logger("process").info], 'onFinish': _on_exit, } self.runner.start()
def start(self): profile_args = {"preferences": deepcopy(self.required_prefs)} profile_args["preferences"][ "marionette.defaultPrefs.port"] = self.marionette_port if self.prefs: profile_args["preferences"].update(self.prefs) if '-jsdebugger' in self.app_args: profile_args["preferences"].update({ "devtools.browsertoolbox.panel": "jsdebugger", "devtools.debugger.remote-enabled": True, "devtools.debugger.chrome-enabled": True, "devtools.chrome.enabled": True, "devtools.debugger.prompt-connection": False, "marionette.debugging.clicktostart": True, }) if hasattr(self, "profile_path") and self.profile is None: if not self.profile_path: profile_args["restore"] = False self.profile = Profile(**profile_args) else: profile_args["path_from"] = self.profile_path self.profile = Profile.clone(**profile_args) process_args = { 'processOutputLine': [NullOutput()], } if self.goanna_log == '-': process_args['stream'] = sys.stdout else: if self.goanna_log is None: self.goanna_log = 'goanna.log' elif os.path.isdir(self.goanna_log): fname = "goanna-%d.log" % time.time() self.goanna_log = os.path.join(self.goanna_log, fname) self.goanna_log = os.path.realpath(self.goanna_log) if os.access(self.goanna_log, os.F_OK): if platform.system() is 'Windows': # NOTE: windows has a weird filesystem where it happily 'closes' # the file, but complains if you try to delete it. You get a # 'file still in use' error. Sometimes you can wait a bit and # a retry will succeed. # If all retries fail, we'll just continue without removing # the file. In this case, if we are restarting the instance, # then the new logs just get appended to the old file. tries = 0 while tries < 10: try: os.remove(self.goanna_log) break except WindowsError as e: if e.errno == errno.EACCES: tries += 1 time.sleep(0.5) else: raise e else: os.remove(self.goanna_log) process_args['logfile'] = self.goanna_log env = os.environ.copy() # environment variables needed for crashreporting # https://developer.mozilla.org/docs/Environment_variables_affecting_crash_reporting env.update({ 'MOZ_CRASHREPORTER': '1', 'MOZ_CRASHREPORTER_NO_REPORT': '1', }) self.runner = Runner(binary=self.bin, profile=self.profile, cmdargs=['-no-remote', '-marionette'] + self.app_args, env=env, symbols_path=self.symbols_path, process_args=process_args) self.runner.start()