예제 #1
0
def get_checked_versions():
    # There are different reasons to not return versions:
    # i) we're merge day: the versions are changing
    # ii) not consecutive versions numbers
    # iii) bugzilla updated nightly version but p-d is not updated
    if is_merge_day():
        return {}

    versions = lmdversions.get(base=True)
    versions["central"] = versions["nightly"]

    v = [versions[k] for k in ["release", "beta", "central"]]
    versions = {k: str(v) for k, v in versions.items()}

    if v[0] + 2 == v[1] + 1 == v[2]:
        nightly_bugzilla = get_nightly_version_from_bz()
        if v[2] != nightly_bugzilla:
            from . import logger

            logger.info(
                "Versions mismatch between Bugzilla and product-details")
            return {}
        return versions

    from . import logger

    logger.info("Not consecutive versions in product/details")
    return {}
예제 #2
0
    def test_unique_esr(self):

        # Check no esr previous is present
        with self.setup_versions(nightly="55.0a1",
                                 devel="54.0b6",
                                 stable="53.0.2",
                                 esr="52.1.1esr"):
            v = versions.get(base=True)
        self.assertDictEqual(
            v, {
                'nightly': 55,
                'beta': 54,
                'release': 53,
                'esr': 52,
                'esr_previous': None,
            })
예제 #3
0
    def test_version_dates(self):
        self.assertEqual(versions.getMajorDate(46),
                         datetime.datetime(2016, 4, 26, 7, 0, tzinfo=tzutc()))
        self.assertEqual(versions.getMajorDate('46'),
                         datetime.datetime(2016, 4, 26, 7, 0, tzinfo=tzutc()))
        self.assertEqual(versions.getMajorDate('46.0'),
                         datetime.datetime(2016, 4, 26, 7, 0, tzinfo=tzutc()))
        self.assertEqual(versions.getMajorDate('46.0.1'),
                         datetime.datetime(2016, 4, 26, 7, 0, tzinfo=tzutc()))
        self.assertEqual(versions.getMajorDate('1'),
                         datetime.datetime(2004, 11, 9, 8, 0, tzinfo=tzutc()))
        self.assertEqual(versions.getMajorDate('1.0'),
                         datetime.datetime(2004, 11, 9, 8, 0, tzinfo=tzutc()))
        self.assertEqual(versions.getMajorDate('1.5'),
                         datetime.datetime(2005, 11, 29, 8, 0, tzinfo=tzutc()))
        self.assertEqual(versions.getMajorDate('14'),
                         datetime.datetime(2012, 7, 17, 7, 0, tzinfo=tzutc()))
        self.assertEqual(versions.getMajorDate('14.0'),
                         datetime.datetime(2012, 7, 17, 7, 0, tzinfo=tzutc()))
        self.assertEqual(versions.getMajorDate('14.0.1'),
                         datetime.datetime(2012, 7, 17, 7, 0, tzinfo=tzutc()))
        self.assertEqual(versions.getMajorDate('33'),
                         datetime.datetime(2014, 10, 14, 7, 0, tzinfo=tzutc()))
        self.assertEqual(versions.getMajorDate('33.0'),
                         datetime.datetime(2014, 10, 14, 7, 0, tzinfo=tzutc()))
        self.assertEqual(versions.getMajorDate('33.1'),
                         datetime.datetime(2014, 11, 10, 8, 0, tzinfo=tzutc()))

        v = versions.get(base=True)
        self.assertTrue(
            versions.getMajorDate(v['release']) <= versions.getMajorDate(
                v['beta']) <= versions.getMajorDate(v['aurora']) <=
            versions.getMajorDate(v['nightly']))

        date = utils.get_date_ymd('2011-08-24T14:52:52Z')
        self.assertEqual(date - versions.getMajorDate('7'),
                         datetime.timedelta(-34, 28372))

        self.assertEqual(
            versions.getCloserMajorRelease(date),
            ('7.0', datetime.datetime(2011, 9, 27, 7, 0, tzinfo=tzutc())))
        self.assertEqual(
            versions.getCloserMajorRelease(date, negative=True),
            ('6.0', datetime.datetime(2011, 8, 16, 7, 0, tzinfo=tzutc())))
        self.assertEqual(
            versions.getCloserMajorRelease(date, negative=False),
            ('7.0', datetime.datetime(2011, 9, 27, 7, 0, tzinfo=tzutc())))
예제 #4
0
    def test_dual_esr(self):

        # Check esr & esr previous
        with self.setup_versions(nightly="55.0a1",
                                 devel="54.0b6",
                                 stable="53.0.2",
                                 esr="45.9.0esr",
                                 esr_next="52.1.1esr"):
            v = versions.get(base=True)
        self.assertDictEqual(
            v, {
                'nightly': 55,
                'beta': 54,
                'release': 53,
                'esr': 52,
                'esr_previous': 45,
            })
예제 #5
0
 def test_info_from_major(self):
     v = versions.get(base=True)
     i = socorro.ProductVersions.get_info_from_major(v)
     self.assertIsNotNone(i)
예제 #6
0
    def run(self, only=None):
        """
        Build bug analysis for a specified Bugzilla query
        Used by taskcluster - no db interaction
        """
        assert self.repository is not None, \
            'Missing mozilla repository'

        # Update HG central to get new patches revisions
        self.repository.checkout(b'central')

        # Get official mozilla release versions
        current_versions = versions.get(True)

        # Load all analysis
        for analysis in api_client.list_analysis():

            # Check version number
            current_version = current_versions.get(analysis['name'])
            if current_version is None:
                raise Exception('Unsupported analysis {}'.format(
                    analysis['name']))  # noqa
            if analysis['version'] != current_version:
                data = {
                    'version': current_version,
                }
                analysis = api_client.update_analysis(analysis['id'], data)
                logger.info('Updated analysis version',
                            name=analysis['name'],
                            version=analysis['version'])  # noqa

            # Mark bugs already in analysis
            logger.info('List remote bugs', name=analysis['name'])
            analysis_details = api_client.get_analysis(analysis['id'])
            for bug in analysis_details['bugs']:
                sync = self.get_bug_sync(bug['bugzilla_id'])
                sync.setup_remote(analysis)

            # Get bugs from bugzilla for this analysis
            logger.info('List bugzilla bugs', name=analysis['name'])
            raw_bugs = self.list_bugs(analysis['parameters'])
            for bugzilla_id, bug_data in raw_bugs.items():
                sync = self.get_bug_sync(bugzilla_id)
                sync.setup_bugzilla(analysis, bug_data)

        merge_tests = []
        for sync in self.sync.values():

            # Filter bugs when 'only' is filled
            if only is not None and sync.bugzilla_id not in only:
                logger.debug('Skip', bz_id=sync.bugzilla_id)
                continue

            if len(sync.on_bugzilla) > 0:
                if self.update_bug(sync):
                    merge_tests += sync.merge_tests

            elif len(sync.on_remote) > 0:
                self.delete_bug(sync)

        # Sort merge tests by branches
        logger.info('Running merge tests', nb=len(merge_tests))
        merge_tests = sorted(merge_tests, key=lambda x: x.branch)
        groups = itertools.groupby(merge_tests, lambda x: x.branch)
        for branch, tests in groups:

            # Switch to branch and get parent revision
            self.repository.checkout(branch)

            # Run all the merge tests for this revision
            for merge_test in tests:
                self.run_merge_test(merge_test)

        # Send report
        self.report.send()
예제 #7
0
    def run(self, only=None):
        '''
        Build bug analysis for a specified Bugzilla query
        Used by taskcluster - no db interaction
        '''
        assert self.repository is not None, \
            'Missing mozilla repository'

        # Update HG central to get new patches revisions
        self.repository.checkout(b'central')

        # Get official mozilla release versions
        current_versions = versions.get(True)

        # Load all analysis
        for analysis in api_client.list_analysis():

            # Check version number
            current_version = current_versions.get(analysis['name'])
            if current_version is None:
                raise Exception('Unsupported analysis {}'.format(analysis['name']))  # noqa
            if analysis['version'] != current_version:
                data = {
                    'version': current_version,
                }
                analysis = api_client.update_analysis(analysis['id'], data)
                logger.info('Updated analysis version', name=analysis['name'], version=analysis['version'])  # noqa

            # Mark bugs already in analysis
            logger.info('List remote bugs', name=analysis['name'])
            analysis_details = api_client.get_analysis(analysis['id'])
            for bug in analysis_details['bugs']:
                sync = self.get_bug_sync(bug['bugzilla_id'])
                sync.setup_remote(analysis)

            # Get bugs from bugzilla for this analysis
            logger.info('List bugzilla bugs', name=analysis['name'])
            raw_bugs = list_bugs(analysis['parameters'])
            for bugzilla_id, bug_data in raw_bugs.items():
                sync = self.get_bug_sync(bugzilla_id)
                sync.setup_bugzilla(analysis, bug_data)

        merge_tests = []
        for sync in self.sync.values():

            # Filter bugs when 'only' is filled
            if only is not None and sync.bugzilla_id not in only:
                logger.debug('Skip', bz_id=sync.bugzilla_id)
                continue

            if len(sync.on_bugzilla) > 0:
                if self.update_bug(sync):
                    merge_tests += sync.merge_tests

            elif len(sync.on_remote) > 0:
                self.delete_bug(sync)

        # Sort merge tests by branches
        logger.info('Running merge tests', nb=len(merge_tests))
        merge_tests = sorted(merge_tests, key=lambda x: x.branch)
        groups = itertools.groupby(merge_tests, lambda x: x.branch)
        for branch, tests in groups:

            # Switch to branch and get parent revision
            self.repository.checkout(branch)

            # Run all the merge tests for this revision
            for merge_test in tests:
                self.run_merge_test(merge_test)

        # Send report
        self.report.send(self.app_channel)
예제 #8
0
 def test_versions(self):
     v = versions.get(base=True)
     self.assertTrue(
         v['esr'] <= v['release'] <= v['beta'] < v['aurora'] < v['nightly'])