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)
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)
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)
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)
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)