def setUp(self, get_default_logger): self.fetch_config = Mock() self.test_runner = Mock() self.logger = Mock() self.logs = [] get_default_logger.return_value = Mock(info=self.logs.append) self.brunner = BisectRunner(self.fetch_config, self.test_runner, parse_args([]))
def do_bisect(self, handler, good, bad, **kwargs): try: return BisectRunner.do_bisect(self, handler, good, bad, **kwargs) except (KeyboardInterrupt, MozRegressionError, RequestException): if handler.good_revision is not None and \ handler.bad_revision is not None: atexit.register(self.on_exit_print_resume_info, handler) raise
def cli(argv=None): """ main entry point of mozregression command line. """ options = parse_args(argv) logger = commandline.setup_logging("mozregression", options, {"mach": sys.stdout}) if options.list_releases: print(formatted_valid_release_dates()) sys.exit() cache_session = limitedfilecache.get_cache( options.http_cache_dir, limitedfilecache.ONE_GIGABYTE, logger=get_default_logger('Limited File Cache')) set_http_cache_session(cache_session, get_defaults={"timeout": options.http_timeout}) fetch_config = create_config(options.app, mozinfo.os, options.bits) if options.command is None: launcher_kwargs = dict( addons=options.addons, profile=options.profile, cmdargs=options.cmdargs, ) test_runner = ManualTestRunner(fetch_config, persist=options.persist, launcher_kwargs=launcher_kwargs) else: test_runner = CommandTestRunner(fetch_config, options.command, persist=options.persist) runner = BisectRunner(fetch_config, test_runner, options) if fetch_config.is_inbound(): # this can be useful for both inbound and nightly, because we # can go to inbound from nightly. fetch_config.set_inbound_branch(options.inbound_branch) if options.inbound: bisect = bisect_inbound else: bisect = bisect_nightlies try: launcher_class = APP_REGISTRY.get(fetch_config.app_name) launcher_class.check_is_runnable() sys.exit(bisect(runner, logger)) except KeyboardInterrupt: sys.exit("\nInterrupted.") except UnavailableRelease as exc: sys.exit("%s\n%s" % (exc, formatted_valid_release_dates())) except MozRegressionError as exc: sys.exit(str(exc))
def setUp(self, get_default_logger, get_defaults): self.fetch_config = Mock() self.test_runner = Mock() self.logger = Mock() self.logs = [] get_defaults.return_value = dict() get_default_logger.return_value = Mock(info=self.logs.append) self.brunner = BisectRunner(self.fetch_config, self.test_runner, parse_args([]))
class TestBisectRunner(unittest.TestCase): @patch('mozregression.bisector.get_default_logger') def setUp(self, get_default_logger): self.fetch_config = Mock() self.test_runner = Mock() self.logger = Mock() self.logs = [] get_default_logger.return_value = Mock(info=self.logs.append) self.brunner = BisectRunner(self.fetch_config, self.test_runner, parse_args([])) def test_create(self): self.assertIsInstance(self.brunner.bisector, Bisector) def print_resume_info(self, handler_klass, **kwargs): # print_resume_info require some handlers attribute handler = handler_klass() if isinstance(handler, NightlyHandler): handler.good_date = datetime.date(2015, 1, 1) handler.bad_date = datetime.date(2015, 1, 11) else: handler.good_revision = '123' handler.bad_revision = '456' for k, v in kwargs.iteritems(): setattr(self.brunner.options, k, v) self.brunner.print_resume_info(handler) return self.logs[-1] def test_print_resume_infos_nightly(self): result = self.print_resume_info(NightlyHandler, bits=64) self.assertIn('--bits=64', result) self.assertIn('--good=2015-01-01', result) self.assertIn('--bad=2015-01-11', result) self.assertNotIn('--inbound', result) self.assertNotIn('--find-fix', result) result = self.print_resume_info(NightlyHandler, find_fix=True) self.assertIn('--find-fix', result) self.assertNotIn('--addon', result) result = self.print_resume_info(NightlyHandler, addons=['1', '2']) self.assertIn('--addon=1 --addon=2', result) self.assertNotIn('--profile', result) result = self.print_resume_info(NightlyHandler, profile='profile') self.assertIn('--profile=profile', result) self.assertNotIn('--inbound-branch', result) result = self.print_resume_info(NightlyHandler, inbound_branch='i') self.assertIn('--inbound-branch=i', result) self.assertNotIn('--repo', result) result = self.print_resume_info(NightlyHandler, repo='r') self.assertIn('--repo=r', result) self.assertNotIn('--persist', result) result = self.print_resume_info(NightlyHandler, persist='/tmp') self.assertIn('--persist=/tmp', result) self.assertNotIn('--arg', result) result = self.print_resume_info(NightlyHandler, cmdargs=['1', '2']) self.assertIn('--arg=1 --arg=2', result) def test_print_resume_infos_inbound(self): result = self.print_resume_info(InboundHandler, bits=32, app='b2g') self.assertIn('--bits=32', result) self.assertIn('--app=b2g', result) self.assertIn('--good-rev=123', result) self.assertIn('--bad-rev=456', result) self.assertIn('--inbound', result)
class TestBisectRunner(unittest.TestCase): @patch('mozregression.main.get_defaults') @patch('mozregression.bisector.get_default_logger') def setUp(self, get_default_logger, get_defaults): self.fetch_config = Mock() self.test_runner = Mock() self.logger = Mock() self.logs = [] get_defaults.return_value = dict() get_default_logger.return_value = Mock(info=self.logs.append) self.brunner = BisectRunner(self.fetch_config, self.test_runner, parse_args([])) def test_create(self): self.assertIsInstance(self.brunner.bisector, Bisector) def print_resume_info(self, handler_klass, **kwargs): # print_resume_info require some handlers attribute handler = handler_klass() if isinstance(handler, NightlyHandler): handler.good_date = datetime.date(2015, 1, 1) handler.bad_date = datetime.date(2015, 1, 11) else: handler.good_revision = '123' handler.bad_revision = '456' for k, v in kwargs.iteritems(): setattr(self.brunner.options, k, v) self.brunner.print_resume_info(handler) return self.logs[-1] def test_print_resume_infos_nightly(self): result = self.print_resume_info(NightlyHandler, bits=64) self.assertIn('--bits=64', result) self.assertIn('--good=2015-01-01', result) self.assertIn('--bad=2015-01-11', result) self.assertNotIn('--find-fix', result) result = self.print_resume_info(NightlyHandler, find_fix=True) self.assertIn('--find-fix', result) self.assertNotIn('--addon', result) result = self.print_resume_info(NightlyHandler, addons=['1', '2']) self.assertIn('--addon=1 --addon=2', result) self.assertNotIn('--profile', result) result = self.print_resume_info(NightlyHandler, profile='profile') self.assertIn('--profile=profile', result) self.assertNotIn('--inbound-branch', result) result = self.print_resume_info(NightlyHandler, inbound_branch='i') self.assertIn('--inbound-branch=i', result) self.assertNotIn('--repo', result) result = self.print_resume_info(NightlyHandler, repo='r') self.assertIn('--repo=r', result) self.assertNotIn('--persist', result) result = self.print_resume_info(NightlyHandler, persist='/tmp') self.assertIn('--persist=/tmp', result) self.assertNotIn('--arg', result) result = self.print_resume_info(NightlyHandler, cmdargs=['1', '2']) self.assertIn('--arg=1 --arg=2', result) def test_print_resume_infos_inbound(self): result = self.print_resume_info(InboundHandler, bits=32, app='b2g') self.assertIn('--bits=32', result) self.assertIn('--app=b2g', result) self.assertIn('--good-rev=123', result) self.assertIn('--bad-rev=456', result)