예제 #1
0
    def testGetCulprit(self):
        gitiles_id = 'git_hash'
        Culprit.Create(self.gitiles_host, self.gitiles_project,
                       self.gitiles_ref, gitiles_id, 65432).put()

        culprit = Culprit.GetOrCreate(self.gitiles_host, self.gitiles_project,
                                      self.gitiles_ref, gitiles_id)

        self.assertIsNotNone(culprit)
        self.assertEqual([], culprit.failure_urlsafe_keys)
예제 #2
0
    def testCreateCulprit(self):
        gitiles_id = '67890'
        culprit = Culprit.GetOrCreate(
            self.gitiles_host,
            self.gitiles_project,
            self.gitiles_ref,
            gitiles_id,
            commit_position=67890,
            failure_urlsafe_keys=['failure_urlsafe_key'])

        self.assertIsNotNone(culprit)
        self.assertEqual(['failure_urlsafe_key'], culprit.failure_urlsafe_keys)
예제 #3
0
    def testGetCulpritsForFailures(self):
        culprit = CulpritNdb.Create(self.gitiles_host, self.gitiles_project,
                                    self.gitiles_ref, 'git_hash_123', 123)
        culprit.put()

        failure1 = CompileFailure.Create(self.build.key, 'compile', ['a.o'],
                                         'CC')
        failure1.culprit_commit_key = culprit.key
        failure1.put()

        failure2 = CompileFailure.Create(self.build.key, 'compile', ['b.o'],
                                         'CC')
        failure2.culprit_commit_key = culprit.key
        failure2.put()

        culprits = analysis_util.GetCulpritsForFailures([failure1, failure2])
        self.assertEqual(1, len(culprits))
        self.assertEqual('git_hash_123', culprits[0].commit.id)
def _SaveCulpritInCompileFailures(compile_failures, culprit_commit):
  """Saves the culprit to compile failures.

  Args:
    compile_failures (list of CompileFailure): CompileFailures that are caused
      by the culprit_commit.
    culprit_commit (GitilesCommit): The commit that caused compile failure(s).
  """
  culprit_entity = Culprit.GetOrCreate(
      gitiles_host=culprit_commit.gitiles_host,
      gitiles_project=culprit_commit.gitiles_project,
      gitiles_ref=culprit_commit.gitiles_ref,
      gitiles_id=culprit_commit.gitiles_id,
      commit_position=culprit_commit.commit_position,
      failure_urlsafe_keys=[cf.key.urlsafe() for cf in compile_failures])

  for failure in compile_failures:
    failure.culprit_commit_key = culprit_entity.key
  ndb.put_multi(compile_failures)
예제 #5
0
    def testOnCompileFailureAnalysisResultRequested(self):
        build_id = 800000000123
        request = findit_result.BuildFailureAnalysisRequest(
            build_id=build_id, failed_steps=[self.compile_step_name])

        build = LuciFailedBuild.Create(
            luci_project='chromium',
            luci_bucket='ci',
            luci_builder='Linux Builder',
            build_id=build_id,
            legacy_build_number=12345,
            gitiles_host='chromium.googlesource.com',
            gitiles_project='chromium/src',
            gitiles_ref='refs/heads/master',
            gitiles_id='git_hash',
            commit_position=65450,
            status=20,
            create_time=datetime(2019, 3, 28),
            start_time=datetime(2019, 3, 28, 0, 1),
            end_time=datetime(2019, 3, 28, 1),
            build_failure_type=StepTypeEnum.COMPILE)
        build.put()

        culprit_id = 'git_hash_65432'
        culprit_commit_position = 65432
        culprit = Culprit.Create(self.context.gitiles_host,
                                 self.context.gitiles_project,
                                 self.context.gitiles_ref, culprit_id,
                                 culprit_commit_position)
        culprit.put()

        compile_failure = CompileFailure.Create(build.key,
                                                self.compile_step_name,
                                                ['target1'], 'CXX')
        compile_failure.culprit_commit_key = culprit.key
        compile_failure.first_failed_build_id = build.build_id
        compile_failure.failure_group_build_id = build.build_id
        compile_failure.put()

        analysis = CompileFailureAnalysis.Create(
            luci_project=self.context.luci_project_name,
            luci_bucket='postsubmit',
            luci_builder='Linux Builder',
            build_id=build_id,
            gitiles_host=self.context.gitiles_host,
            gitiles_project=self.context.gitiles_project,
            gitiles_ref=self.context.gitiles_ref,
            last_passed_gitiles_id='last_passed_git_hash',
            last_passed_commit_position=65430,
            first_failed_gitiles_id='git_hash',
            first_failed_commit_position=65450,
            rerun_builder_id='chromeos/postsubmit/builder-bisect',
            compile_failure_keys=[])
        analysis.status = analysis_status.COMPLETED
        analysis.Save()

        responses = compile_api.OnCompileFailureAnalysisResultRequested(
            request, build)

        self.assertEqual(1, len(responses))
        self.assertEqual(1, len(responses[0].culprits))
        self.assertEqual(culprit_id, responses[0].culprits[0].commit.id)
        self.assertTrue(responses[0].is_finished)
        self.assertTrue(responses[0].is_supported)
예제 #6
0
  def testOnTestFailureAnalysisResultRequestedGetCulpritFromMergedFailure(self):
    build_id = 800000000123
    request = findit_result.BuildFailureAnalysisRequest(
        build_id=build_id, failed_steps=[self.test_step_name])

    culprit_id = 'git_hash_65432'
    culprit_commit_position = 65432
    culprit = Culprit.Create(
        self.context.gitiles_host, self.context.gitiles_project,
        self.context.gitiles_ref, culprit_id, culprit_commit_position)
    culprit.put()

    merge_failure = TestFailure.Create(
        ndb.Key(LuciFailedBuild, build_id), self.test_step_name, 'test7')
    merge_failure.culprit_commit_key = culprit.key
    merge_failure.first_failed_build_id = build_id
    merge_failure.failure_group_build_id = build_id
    merge_failure.put()

    analysis = TestFailureAnalysis.Create(
        luci_project=self.context.luci_project_name,
        luci_bucket='postsubmit',
        luci_builder='Linux Builder',
        build_id=build_id,
        gitiles_host=self.context.gitiles_host,
        gitiles_project=self.context.gitiles_project,
        gitiles_ref=self.context.gitiles_ref,
        last_passed_gitiles_id='last_passed_git_hash',
        last_passed_commit_position=65430,
        first_failed_gitiles_id='git_hash',
        first_failed_commit_position=65450,
        rerun_builder_id='chromeos/postsubmit/builder-bisect',
        test_failure_keys=[merge_failure.key])
    analysis.status = analysis_status.COMPLETED
    analysis.Save()

    build = LuciFailedBuild.Create(
        luci_project='chromium',
        luci_bucket='ci',
        luci_builder='Linux Builder',
        build_id=800000000124,
        legacy_build_number=12345,
        gitiles_host='chromium.googlesource.com',
        gitiles_project='chromium/src',
        gitiles_ref='refs/heads/master',
        gitiles_id='git_hash',
        commit_position=65450,
        status=20,
        create_time=datetime(2019, 3, 28),
        start_time=datetime(2019, 3, 28, 0, 1),
        end_time=datetime(2019, 3, 28, 1),
        build_failure_type=StepTypeEnum.TEST)
    build.put()

    test_failure = TestFailure.Create(
        ndb.Key(LuciFailedBuild, 800000000124), self.test_step_name, 'test7')
    test_failure.merged_failure_key = merge_failure.key
    test_failure.first_failed_build_id = build.build_id
    test_failure.failure_group_build_id = build.build_id
    test_failure.put()

    responses = test_analysis.OnTestFailureAnalysisResultRequested(
        request, build)

    self.assertEqual(1, len(responses))
    self.assertEqual(1, len(responses[0].culprits))
    self.assertEqual(culprit_id, responses[0].culprits[0].commit.id)
    self.assertTrue(responses[0].is_finished)
    self.assertEqual('test7', responses[0].test_name)