def test_find_ci_result_non_existent(self):
        drivers = [DRIVER_NON_EXISTENT]
        review = copy.deepcopy(REVIEW)
        review['comments'].append(COMMENT_SUCCESS)

        res = list(driverlog.log([REVIEW], drivers))

        self.assertEqual(0, len(res), 'No CI results expected')
Example #2
0
    def test_find_ci_result_non_existent(self):
        drivers = [DRIVER_NON_EXISTENT]
        review = copy.deepcopy(REVIEW)
        review['comments'].append(COMMENT_SUCCESS)

        res = list(driverlog.log([REVIEW], drivers))

        self.assertEqual(0, len(res), 'No CI results expected')
    def test_find_ci_result_failure(self):
        drivers = [DRIVER]
        review = copy.deepcopy(REVIEW)
        review['comments'].append(COMMENT_FAILURE)

        res = list(driverlog.log([review], drivers))

        self.assertEqual(1, len(res), 'One CI result is expected')
        self.assertEqual(False, res[0]['value'])
Example #4
0
    def test_find_ci_result_failure(self):
        drivers = [DRIVER]
        review = copy.deepcopy(REVIEW)
        review['comments'].append(COMMENT_FAILURE)

        res = list(driverlog.log([review], drivers))

        self.assertEqual(1, len(res), 'One CI result is expected')
        self.assertFalse(res[0]['value'])
    def test_find_ci_result_last_vote_only(self):
        # there may be multiple comments from the same CI,
        # only the last one is important
        drivers = [DRIVER]

        review = copy.deepcopy(REVIEW)
        review['comments'].append(COMMENT_FAILURE)
        review['comments'].append(COMMENT_SUCCESS)

        res = list(driverlog.log([review], drivers))

        self.assertEqual(1, len(res), 'One CI result is expected')
        self.assertEqual(True, res[0]['value'])
Example #6
0
    def test_find_ci_result_last_vote_only(self):
        # there may be multiple comments from the same CI,
        # only the last one is important
        drivers = [DRIVER]

        review = copy.deepcopy(REVIEW)
        review['comments'].append(COMMENT_FAILURE)
        review['comments'].append(COMMENT_SUCCESS)

        res = list(driverlog.log([review], drivers))

        self.assertEqual(1, len(res), 'One CI result is expected')
        self.assertTrue(res[0]['value'])
    def test_find_ci_result_success(self):
        drivers = [DRIVER]
        review = copy.deepcopy(REVIEW)
        review['comments'].append(COMMENT_SUCCESS)

        res = list(driverlog.log([review], drivers))

        expected_result = {
            'user_id': 'ci:virt_nova_driver',
            'value': True,
            'message': 'build successful',
            'date': 1234567890,
            'branch': 'master',
            'review_id': 'I1045730e47e9e6ad31fcdfbaefdad77e2f3b2c3e',
            'review_number': '97860',
            'driver_name': 'Virt Nova Driver',
            'driver_vendor': 'Virt Inc',
            'module': 'nova',
        }
        self.assertEqual(1, len(res), 'One CI result is expected')
        self.assertEqual(expected_result, res[0])
Example #8
0
    def test_find_ci_result_success(self):
        drivers = [DRIVER]
        review = copy.deepcopy(REVIEW)
        review['comments'].append(COMMENT_SUCCESS)

        res = list(driverlog.log([review], drivers))

        expected_result = {
            'user_id': 'ci:virt_nova_driver',
            'value': True,
            'message': 'build successful',
            'date': 1234567890,
            'branch': 'master',
            'review_id': 'I1045730e47e9e6ad31fcdfbaefdad77e2f3b2c3e',
            'review_number': '97860',
            'driver_name': 'Virt Nova Driver',
            'driver_vendor': 'Virt Inc',
            'module': 'nova',
        }
        self.assertEqual(1, len(res), 'One CI result is expected')
        self.assertEqual(expected_result, res[0])
Example #9
0
def _process_repo_ci_votes(repo, runtime_storage_inst, record_processor_inst,
                           rcs_inst):
    for branch in _get_repo_branches(repo):
        LOG.info('Processing CI votes for repo: %s, branch: %s',
                 repo['uri'], branch)

        quoted_uri = six.moves.urllib.parse.quote_plus(repo['uri'])
        rcs_key = 'ci:%s:%s' % (quoted_uri, branch)
        last_retrieval_time = runtime_storage_inst.get_by_key(rcs_key)
        current_retrieval_time = utils.date_to_timestamp('now')

        review_iterator = rcs_inst.log(repo, branch, last_retrieval_time,
                                       status='merged', grab_comments=True)
        review_iterator = driverlog.log(review_iterator, repo['drivers'])
        review_iterator_typed = _record_typer(review_iterator, 'ci')
        processed_review_iterator = record_processor_inst.process(
            review_iterator_typed)

        runtime_storage_inst.set_records(processed_review_iterator,
                                         utils.merge_records)
        runtime_storage_inst.set_by_key(rcs_key, current_retrieval_time)
Example #10
0
def _process_repo(repo, runtime_storage_inst, record_processor_inst, rcs_inst):
    uri = repo['uri']
    quoted_uri = six.moves.urllib.parse.quote_plus(uri)
    LOG.info('Processing repo uri: %s', uri)

    LOG.info('Processing blueprints for repo uri: %s', uri)
    bp_iterator = lp.log(repo)
    bp_iterator_typed = _record_typer(bp_iterator, 'bp')
    processed_bp_iterator = record_processor_inst.process(bp_iterator_typed)
    runtime_storage_inst.set_records(processed_bp_iterator,
                                     utils.merge_records)

    LOG.info('Processing bugs for repo uri: %s', uri)
    current_date = utils.date_to_timestamp('now')
    bug_modified_since = runtime_storage_inst.get_by_key(
        'bug_modified_since-%s' % repo['module'])

    bug_iterator = bps.log(repo, bug_modified_since)
    bug_iterator_typed = _record_typer(bug_iterator, 'bug')
    processed_bug_iterator = record_processor_inst.process(bug_iterator_typed)
    runtime_storage_inst.set_records(processed_bug_iterator,
                                     utils.merge_records)

    runtime_storage_inst.set_by_key('bug_modified_since-%s' % repo['module'],
                                    current_date)

    vcs_inst = vcs.get_vcs(repo, cfg.CONF.sources_root)
    vcs_inst.fetch()

    branches = {repo.get('default_branch', 'master')}
    for release in repo.get('releases'):
        if 'branch' in release:
            branches.add(release['branch'])

    for branch in branches:
        LOG.info('Processing commits in repo: %s, branch: %s', uri, branch)

        vcs_key = 'vcs:%s:%s' % (quoted_uri, branch)
        last_id = runtime_storage_inst.get_by_key(vcs_key)

        commit_iterator = vcs_inst.log(branch, last_id)
        commit_iterator_typed = _record_typer(commit_iterator, 'commit')
        processed_commit_iterator = record_processor_inst.process(
            commit_iterator_typed)
        runtime_storage_inst.set_records(processed_commit_iterator,
                                         _merge_commits)

        last_id = vcs_inst.get_last_id(branch)
        runtime_storage_inst.set_by_key(vcs_key, last_id)

        LOG.info('Processing reviews for repo: %s, branch: %s', uri, branch)

        rcs_key = 'rcs:%s:%s' % (quoted_uri, branch)
        last_retrieval_time = runtime_storage_inst.get_by_key(rcs_key)
        current_retrieval_time = int(time.time())

        review_iterator = itertools.chain(
            rcs_inst.log(repo, branch, last_retrieval_time, status='open'),
            rcs_inst.log(repo, branch, last_retrieval_time, status='merged'),
            rcs_inst.log(repo,
                         branch,
                         last_retrieval_time,
                         status='abandoned',
                         grab_comments=True),
        )
        review_iterator_typed = _record_typer(review_iterator, 'review')

        processed_review_iterator = record_processor_inst.process(
            review_iterator_typed)
        runtime_storage_inst.set_records(processed_review_iterator,
                                         utils.merge_records)

        runtime_storage_inst.set_by_key(rcs_key, current_retrieval_time)

        if 'drivers' in repo:
            LOG.info('Processing CI votes for repo: %s, branch: %s', uri,
                     branch)

            rcs_key = 'ci:%s:%s' % (quoted_uri, branch)
            last_retrieval_time = runtime_storage_inst.get_by_key(rcs_key)
            current_retrieval_time = int(time.time())

            review_iterator = rcs_inst.log(repo,
                                           branch,
                                           last_retrieval_time,
                                           status='merged',
                                           grab_comments=True)
            review_iterator = driverlog.log(review_iterator, repo['drivers'])
            review_iterator_typed = _record_typer(review_iterator, 'ci')

            processed_review_iterator = record_processor_inst.process(
                review_iterator_typed)
            runtime_storage_inst.set_records(processed_review_iterator,
                                             utils.merge_records)

            runtime_storage_inst.set_by_key(rcs_key, current_retrieval_time)
Example #11
0
def _process_repo(repo, runtime_storage_inst, record_processor_inst,
                  rcs_inst):
    uri = repo['uri']
    quoted_uri = six.moves.urllib.parse.quote_plus(uri)
    LOG.info('Processing repo uri: %s', uri)

    LOG.info('Processing blueprints for repo uri: %s', uri)
    bp_iterator = lp.log(repo)
    bp_iterator_typed = _record_typer(bp_iterator, 'bp')
    processed_bp_iterator = record_processor_inst.process(
        bp_iterator_typed)
    runtime_storage_inst.set_records(processed_bp_iterator,
                                     utils.merge_records)

    LOG.info('Processing bugs for repo uri: %s', uri)
    current_date = utils.date_to_timestamp('now')
    bug_modified_since = runtime_storage_inst.get_by_key(
        'bug_modified_since-%s' % repo['module'])

    bug_iterator = bps.log(repo, bug_modified_since)
    bug_iterator_typed = _record_typer(bug_iterator, 'bug')
    processed_bug_iterator = record_processor_inst.process(
        bug_iterator_typed)
    runtime_storage_inst.set_records(processed_bug_iterator,
                                     utils.merge_records)

    runtime_storage_inst.set_by_key(
        'bug_modified_since-%s' % repo['module'], current_date)

    vcs_inst = vcs.get_vcs(repo, cfg.CONF.sources_root)
    vcs_inst.fetch()

    branches = {repo.get('default_branch', 'master')}
    for release in repo.get('releases'):
        if 'branch' in release:
            branches.add(release['branch'])

    for branch in branches:
        LOG.info('Processing commits in repo: %s, branch: %s', uri, branch)

        vcs_key = 'vcs:%s:%s' % (quoted_uri, branch)
        last_id = runtime_storage_inst.get_by_key(vcs_key)

        commit_iterator = vcs_inst.log(branch, last_id)
        commit_iterator_typed = _record_typer(commit_iterator, 'commit')
        processed_commit_iterator = record_processor_inst.process(
            commit_iterator_typed)
        runtime_storage_inst.set_records(
            processed_commit_iterator, _merge_commits)

        last_id = vcs_inst.get_last_id(branch)
        runtime_storage_inst.set_by_key(vcs_key, last_id)

        if 'has_gerrit' not in repo:
            continue  # do not poll reviews for those that do not have them

        LOG.info('Processing reviews for repo: %s, branch: %s', uri, branch)

        rcs_key = 'rcs:%s:%s' % (quoted_uri, branch)
        last_retrieval_time = runtime_storage_inst.get_by_key(rcs_key)
        current_retrieval_time = int(time.time())

        review_iterator = itertools.chain(
            rcs_inst.log(repo, branch, last_retrieval_time, status='open'),
            rcs_inst.log(repo, branch, last_retrieval_time, status='merged'),
            rcs_inst.log(repo, branch, last_retrieval_time, status='abandoned',
                         grab_comments=True),
        )
        review_iterator_typed = _record_typer(review_iterator, 'review')

        processed_review_iterator = record_processor_inst.process(
            review_iterator_typed)
        runtime_storage_inst.set_records(processed_review_iterator,
                                         utils.merge_records)

        runtime_storage_inst.set_by_key(rcs_key, current_retrieval_time)

        if 'drivers' in repo:
            LOG.info('Processing CI votes for repo: %s, branch: %s',
                     uri, branch)

            rcs_key = 'ci:%s:%s' % (quoted_uri, branch)
            last_retrieval_time = runtime_storage_inst.get_by_key(rcs_key)
            current_retrieval_time = int(time.time())

            review_iterator = rcs_inst.log(repo, branch, last_retrieval_time,
                                           status='merged', grab_comments=True)
            review_iterator = driverlog.log(review_iterator, repo['drivers'])
            review_iterator_typed = _record_typer(review_iterator, 'ci')

            processed_review_iterator = record_processor_inst.process(
                review_iterator_typed)
            runtime_storage_inst.set_records(processed_review_iterator,
                                             utils.merge_records)

            runtime_storage_inst.set_by_key(rcs_key, current_retrieval_time)