Loading testing/marionette/client/marionette/emulator.py +44 −11 Original line number Diff line number Diff line Loading @@ -54,6 +54,7 @@ class Emulator(object): self._tmp_sdcard = None self._tmp_userdata = None self._adb_started = False self.remote_user_js = '/data/local/user.js' self.logcat_dir = logcat_dir self.logcat_proc = None self.arch = arch Loading Loading @@ -311,7 +312,6 @@ waitFor( marionette.set_context(marionette.CONTEXT_CONTENT) marionette.delete_session() def connect(self): self._check_for_adb() self.start_adb() Loading @@ -328,6 +328,15 @@ waitFor( self.dm = devicemanagerADB.DeviceManagerADB(adbPath=self.adb, deviceSerial='emulator-%d' % self.port) def add_prefs_to_profile(self, prefs=None): if not prefs: prefs = ["user_pref('marionette.loadearly', true);"] local_user_js = tempfile.mktemp(prefix='localuserjs') self.dm.getFile(self.remote_user_js, local_user_js) with open(local_user_js, 'a') as f: f.write('/n'.join(prefs)) self.dm.pushFile(local_user_js, self.remote_user_js) def start(self): self._check_for_b2g() self.start_adb() Loading Loading @@ -369,6 +378,37 @@ waitFor( # setup DNS fix for networking self._run_adb(['shell', 'setprop', 'net.dns1', '10.0.2.3']) def setup(self, marionette, gecko_path=None, load_early=False): # Wait for the system-message-listener-ready event, otherwise # Bad Things happen. self.wait_for_system_message(marionette) if gecko_path: if load_early: # Inject prefs into the profile now, since we have to restart # B2G after installing a new gecko anyway. self.add_prefs_to_profile() self.install_gecko(gecko_path, marionette) elif load_early: self.add_prefs_to_profile() self.restart_b2g() if load_early: # If we're loading early, we have to wait for the # system-message-listener-ready event again after restarting B2G. # If we're not loading early, we skip this because Marionette # doesn't load until after this event has fired. self.wait_for_system_message(marionette) def restart_b2g(self): print 'restarting B2G' self.dm.shellCheckOutput(['stop', 'b2g']) time.sleep(10) self.dm.shellCheckOutput(['start', 'b2g']) if not self.wait_for_port(): raise TimeoutException("Timeout waiting for marionette on port '%s'" % self.marionette_port) def install_gecko(self, gecko_path, marionette): """ Install gecko into the emulator using adb push. Restart b2g after the Loading @@ -382,6 +422,7 @@ waitFor( print 'installing gecko binaries...' # see bug 809437 for the path that lead to this madness try: # need to remount so we can write to /system/b2g self._run_adb(['remount']) Loading @@ -398,15 +439,7 @@ waitFor( if retry == push_attempts: raise print 'restarting B2G' # see bug 809437 for the path that lead to this madness self.dm.shellCheckOutput(['stop', 'b2g']) time.sleep(10) self.dm.shellCheckOutput(['start', 'b2g']) if not self.wait_for_port(): raise TimeoutException("Timeout waiting for marionette on port '%s'" % self.marionette_port) self.wait_for_system_message(marionette) self.restart_b2g() except (DMError, MarionetteException): # Bug 812395 - raise a single exception type for these so we can Loading testing/marionette/client/marionette/marionette.py +3 −4 Original line number Diff line number Diff line Loading @@ -100,7 +100,7 @@ class Marionette(object): emulator=None, sdcard=None, emulatorBinary=None, emulatorImg=None, emulator_res='480x800', gecko_path=None, connectToRunningEmulator=False, homedir=None, baseurl=None, noWindow=False, logcat_dir=None, busybox=None): noWindow=False, logcat_dir=None, busybox=None, load_early=False): self.host = host self.port = self.local_port = port self.bin = bin Loading Loading @@ -145,9 +145,8 @@ class Marionette(object): self.client = MarionetteClient(self.host, self.port) if emulator: self.emulator.wait_for_system_message(self) if gecko_path: self.emulator.install_gecko(gecko_path, self) self.emulator.setup(self, gecko_path=self.gecko_path, load_early=load_early) if busybox: self.emulator.install_busybox(busybox) Loading testing/marionette/client/marionette/runtests.py +16 −5 Original line number Diff line number Diff line Loading @@ -185,7 +185,7 @@ class MarionetteTestRunner(object): es_server=None, rest_server=None, logger=None, testgroup="marionette", noWindow=False, logcat_dir=None, xml_output=None, repeat=0, perf=False, perfserv=None, gecko_path=None, testvars=None, tree=None): gecko_path=None, testvars=None, tree=None, load_early=False): self.address = address self.emulator = emulator self.emulatorBinary = emulatorBinary Loading Loading @@ -213,6 +213,7 @@ class MarionetteTestRunner(object): self.gecko_path = gecko_path self.testvars = None self.tree = tree self.load_early = load_early if testvars is not None: if not os.path.exists(testvars): Loading Loading @@ -295,7 +296,8 @@ class MarionetteTestRunner(object): baseurl=self.baseurl, noWindow=self.noWindow, logcat_dir=self.logcat_dir, gecko_path=self.gecko_path) gecko_path=self.gecko_path, load_early=self.load_early) else: raise Exception("must specify binary, address or emulator") Loading Loading @@ -628,6 +630,11 @@ def parse_options(): parser.add_option('--tree', dest='tree', action='store', default='b2g', help='the tree that the revsion parameter refers to') parser.add_option('--load-early', dest='load_early', action='store_true', default=False, help='on an emulator, causes Marionette to load earlier ' 'in the startup process than it otherwise would; needed ' 'for testing WebAPIs') options, tests = parser.parse_args() Loading @@ -640,6 +647,11 @@ def parse_options(): print "must specify --binary, --emulator or --address" parser.exit() if options.load_early and not options.emulator: parser.print_usage() print "must specify --load-early on when using --emulator" parser.exit() # default to storing logcat output for emulator runs if options.emulator and not options.logcat_dir: options.logcat_dir = 'logcat' Loading Loading @@ -680,7 +692,8 @@ def startTestRunner(runner_class, options, tests): perf=options.perf, perfserv=options.perfserv, gecko_path=options.gecko_path, testvars=options.testvars) testvars=options.testvars, load_early=options.load_early) runner.run_tests(tests, testtype=options.type) return runner Loading @@ -692,5 +705,3 @@ def cli(runner_class=MarionetteTestRunner): if __name__ == "__main__": cli() Loading
testing/marionette/client/marionette/emulator.py +44 −11 Original line number Diff line number Diff line Loading @@ -54,6 +54,7 @@ class Emulator(object): self._tmp_sdcard = None self._tmp_userdata = None self._adb_started = False self.remote_user_js = '/data/local/user.js' self.logcat_dir = logcat_dir self.logcat_proc = None self.arch = arch Loading Loading @@ -311,7 +312,6 @@ waitFor( marionette.set_context(marionette.CONTEXT_CONTENT) marionette.delete_session() def connect(self): self._check_for_adb() self.start_adb() Loading @@ -328,6 +328,15 @@ waitFor( self.dm = devicemanagerADB.DeviceManagerADB(adbPath=self.adb, deviceSerial='emulator-%d' % self.port) def add_prefs_to_profile(self, prefs=None): if not prefs: prefs = ["user_pref('marionette.loadearly', true);"] local_user_js = tempfile.mktemp(prefix='localuserjs') self.dm.getFile(self.remote_user_js, local_user_js) with open(local_user_js, 'a') as f: f.write('/n'.join(prefs)) self.dm.pushFile(local_user_js, self.remote_user_js) def start(self): self._check_for_b2g() self.start_adb() Loading Loading @@ -369,6 +378,37 @@ waitFor( # setup DNS fix for networking self._run_adb(['shell', 'setprop', 'net.dns1', '10.0.2.3']) def setup(self, marionette, gecko_path=None, load_early=False): # Wait for the system-message-listener-ready event, otherwise # Bad Things happen. self.wait_for_system_message(marionette) if gecko_path: if load_early: # Inject prefs into the profile now, since we have to restart # B2G after installing a new gecko anyway. self.add_prefs_to_profile() self.install_gecko(gecko_path, marionette) elif load_early: self.add_prefs_to_profile() self.restart_b2g() if load_early: # If we're loading early, we have to wait for the # system-message-listener-ready event again after restarting B2G. # If we're not loading early, we skip this because Marionette # doesn't load until after this event has fired. self.wait_for_system_message(marionette) def restart_b2g(self): print 'restarting B2G' self.dm.shellCheckOutput(['stop', 'b2g']) time.sleep(10) self.dm.shellCheckOutput(['start', 'b2g']) if not self.wait_for_port(): raise TimeoutException("Timeout waiting for marionette on port '%s'" % self.marionette_port) def install_gecko(self, gecko_path, marionette): """ Install gecko into the emulator using adb push. Restart b2g after the Loading @@ -382,6 +422,7 @@ waitFor( print 'installing gecko binaries...' # see bug 809437 for the path that lead to this madness try: # need to remount so we can write to /system/b2g self._run_adb(['remount']) Loading @@ -398,15 +439,7 @@ waitFor( if retry == push_attempts: raise print 'restarting B2G' # see bug 809437 for the path that lead to this madness self.dm.shellCheckOutput(['stop', 'b2g']) time.sleep(10) self.dm.shellCheckOutput(['start', 'b2g']) if not self.wait_for_port(): raise TimeoutException("Timeout waiting for marionette on port '%s'" % self.marionette_port) self.wait_for_system_message(marionette) self.restart_b2g() except (DMError, MarionetteException): # Bug 812395 - raise a single exception type for these so we can Loading
testing/marionette/client/marionette/marionette.py +3 −4 Original line number Diff line number Diff line Loading @@ -100,7 +100,7 @@ class Marionette(object): emulator=None, sdcard=None, emulatorBinary=None, emulatorImg=None, emulator_res='480x800', gecko_path=None, connectToRunningEmulator=False, homedir=None, baseurl=None, noWindow=False, logcat_dir=None, busybox=None): noWindow=False, logcat_dir=None, busybox=None, load_early=False): self.host = host self.port = self.local_port = port self.bin = bin Loading Loading @@ -145,9 +145,8 @@ class Marionette(object): self.client = MarionetteClient(self.host, self.port) if emulator: self.emulator.wait_for_system_message(self) if gecko_path: self.emulator.install_gecko(gecko_path, self) self.emulator.setup(self, gecko_path=self.gecko_path, load_early=load_early) if busybox: self.emulator.install_busybox(busybox) Loading
testing/marionette/client/marionette/runtests.py +16 −5 Original line number Diff line number Diff line Loading @@ -185,7 +185,7 @@ class MarionetteTestRunner(object): es_server=None, rest_server=None, logger=None, testgroup="marionette", noWindow=False, logcat_dir=None, xml_output=None, repeat=0, perf=False, perfserv=None, gecko_path=None, testvars=None, tree=None): gecko_path=None, testvars=None, tree=None, load_early=False): self.address = address self.emulator = emulator self.emulatorBinary = emulatorBinary Loading Loading @@ -213,6 +213,7 @@ class MarionetteTestRunner(object): self.gecko_path = gecko_path self.testvars = None self.tree = tree self.load_early = load_early if testvars is not None: if not os.path.exists(testvars): Loading Loading @@ -295,7 +296,8 @@ class MarionetteTestRunner(object): baseurl=self.baseurl, noWindow=self.noWindow, logcat_dir=self.logcat_dir, gecko_path=self.gecko_path) gecko_path=self.gecko_path, load_early=self.load_early) else: raise Exception("must specify binary, address or emulator") Loading Loading @@ -628,6 +630,11 @@ def parse_options(): parser.add_option('--tree', dest='tree', action='store', default='b2g', help='the tree that the revsion parameter refers to') parser.add_option('--load-early', dest='load_early', action='store_true', default=False, help='on an emulator, causes Marionette to load earlier ' 'in the startup process than it otherwise would; needed ' 'for testing WebAPIs') options, tests = parser.parse_args() Loading @@ -640,6 +647,11 @@ def parse_options(): print "must specify --binary, --emulator or --address" parser.exit() if options.load_early and not options.emulator: parser.print_usage() print "must specify --load-early on when using --emulator" parser.exit() # default to storing logcat output for emulator runs if options.emulator and not options.logcat_dir: options.logcat_dir = 'logcat' Loading Loading @@ -680,7 +692,8 @@ def startTestRunner(runner_class, options, tests): perf=options.perf, perfserv=options.perfserv, gecko_path=options.gecko_path, testvars=options.testvars) testvars=options.testvars, load_early=options.load_early) runner.run_tests(tests, testtype=options.type) return runner Loading @@ -692,5 +705,3 @@ def cli(runner_class=MarionetteTestRunner): if __name__ == "__main__": cli()