Пример #1
0
  def testSaveFlakeCulpritsForSuspectedRevisionsNoChangeLog(
      self, mocked_commit_position, mocked_commit_info):
    master_name = 'm'
    builder_name = 'b'
    build_number = 123
    step_name = 's'
    test_name = 't'
    suspected_revision = 'r1'
    suspected_commit_position = 995
    suspected_revisions = [suspected_revision]

    mocked_commit_position.return_value = suspected_commit_position

    analysis = MasterFlakeAnalysis.Create(master_name, builder_name,
                                          build_number, step_name, test_name)

    analysis.data_points = [
        DataPoint.Create(commit_position=1000, git_hash=suspected_revision)
    ]
    analysis.Save()

    mocked_commit_info.return_value = None
    heuristic_analysis.SaveFlakeCulpritsForSuspectedRevisions(
        analysis.key.urlsafe(), suspected_revisions)

    suspect = FlakeCulprit.Get('chromium', suspected_revision)
    self.assertIsNone(suspect)
Пример #2
0
def UpdateCulprit(analysis_urlsafe_key,
                  revision,
                  commit_position,
                  repo_name='chromium'):
    """Sets culprit information.

  Args:
    analysis_urlafe_key (str): The urlsafe-key to the MasterFlakeAnalysis to
        update culprit information for.
    revision (str): The culprit's chromium revision.
    commit_position (int): The culprit's commit position.
    repo_name (str): The name of the repo the culprit is in.
  """
    culprit = (FlakeCulprit.Get(repo_name, revision)
               or FlakeCulprit.Create(repo_name, revision, commit_position))

    needs_updating = False

    if culprit.url is None:
        change_log = _GIT_REPO.GetChangeLog(revision)

        if change_log:
            culprit.url = change_log.code_review_url or change_log.commit_url
            needs_updating = True
        else:
            logging.error('Unable to retrieve change logs for %s', revision)

    if analysis_urlsafe_key not in culprit.flake_analysis_urlsafe_keys:
        culprit.flake_analysis_urlsafe_keys.append(analysis_urlsafe_key)
        needs_updating = True

    if needs_updating:
        culprit.put()

    return culprit
Пример #3
0
def SaveFlakeCulpritsForSuspectedRevisions(analysis_urlsafe_key,
                                           suspected_revisions,
                                           repo_name='chromium'):
    """Saves each suspect to the datastore as a FlakeCulprit.

    Also updates a MasterFlakeAnalysis' heuristic analysis results to include
        each suspect.

  Args:
    analysis_urlsafe_key (str): The urlsafe key of the MasterFlakeAnalysis to
        update.
    suspected_revisions (list): A list of revisions suspected to have caused the
        flakiness to create FlakeCulprits for.
  """
    analysis = ndb.Key(urlsafe=analysis_urlsafe_key).get()
    assert analysis

    for revision in suspected_revisions:
        commit_position = git.GetCommitPositionFromRevision(revision)
        assert commit_position, 'Canot create FlakeCulprit without commit position'
        suspect = (FlakeCulprit.Get(repo_name, revision) or
                   FlakeCulprit.Create(repo_name, revision, commit_position))

        if suspect.url is None:
            commits_info = git.GetCommitsInfo([revision])

            if commits_info:
                suspect.url = commits_info[revision]['url']
                suspect.put()
            else:
                logging.error('Unable to retrieve change logs for %s',
                              revision)
                continue

        # Save each culprit to the analysis' list of heuristic culprits.
        suspect_urlsafe_key = suspect.key.urlsafe()
        if suspect_urlsafe_key not in analysis.suspect_urlsafe_keys:
            analysis.suspect_urlsafe_keys.append(suspect_urlsafe_key)

    analysis.heuristic_analysis_status = analysis_status.COMPLETED
    analysis.put()
Пример #4
0
  def testSaveFlakeCulpritsForSuspectedRevisions(self, mocked_commit_position,
                                                 mocked_commit_info):
    master_name = 'm'
    builder_name = 'b'
    build_number = 123
    step_name = 's'
    test_name = 't'
    suspected_revision = 'r1'
    suspected_commit_position = 995
    suspected_revisions = [suspected_revision]

    mocked_commit_position.return_value = suspected_commit_position

    analysis = MasterFlakeAnalysis.Create(master_name, builder_name,
                                          build_number, step_name, test_name)
    analysis.data_points = [
        DataPoint.Create(commit_position=1000, git_hash=suspected_revision)
    ]
    analysis.Save()

    mocked_commit_info.return_value = {
        suspected_revision: {
            'revision': suspected_revision,
            'repo_name': 'chromium',
            'commit_position': suspected_commit_position,
            'url': 'url',
            'author': '*****@*****.**'
        }
    }

    heuristic_analysis.SaveFlakeCulpritsForSuspectedRevisions(
        analysis.key.urlsafe(), suspected_revisions)

    analysis = MasterFlakeAnalysis.GetVersion(
        master_name, builder_name, build_number, step_name, test_name)
    suspect = FlakeCulprit.Get('chromium', suspected_revision)
    self.assertIsNotNone(suspect)
    self.assertIn(suspect.key.urlsafe(), analysis.suspect_urlsafe_keys)