Ejemplo n.º 1
0
 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([]))
Ejemplo n.º 2
0
 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
Ejemplo n.º 3
0
 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
Ejemplo n.º 4
0
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))
Ejemplo n.º 5
0
 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([]))
Ejemplo n.º 6
0
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)
Ejemplo n.º 7
0
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)