def testOnBuildFailureAnalysisResultRequestedNotSupport( self, mock_compile_analysis): build_id = 80004567 build = LuciFailedBuild.Create( luci_project='chromium', luci_bucket='ci', luci_builder='Linux Builder', build_id=80004567, legacy_build_number=4567, 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.INFRA) build.put() request = findit_result.BuildFailureAnalysisRequest( build_id=build_id, failed_steps=['browser_tests']) self.assertEqual([], api.OnBuildFailureAnalysisResultRequested(request)) self.assertFalse(mock_compile_analysis.called)
def testOnBuildFailureAnalysisResultRequestedTest(self, mock_test_analysis): luci_project = 'chromium' luci_bucket = 'ci' luci_builder = 'Linux Builder' build_number = 4567 build = LuciFailedBuild.Create( luci_project=luci_project, luci_bucket=luci_bucket, luci_builder=luci_builder, build_id=80004567, legacy_build_number=build_number, 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() request = findit_result.BuildFailureAnalysisRequest( build_id=80004567, failed_steps=['test step']) self.assertEqual(['responses'], api.OnBuildFailureAnalysisResultRequested(request)) mock_test_analysis.assert_called_once_with(request, build)
def setUp(self): super(ChromeOSProjectAPITest, self).setUp() self.first_failed_commit_id = 'git_sha' self.first_failed_commit_position = 65450 self.context = Context(luci_project_name='chromeos', gitiles_host='gitiles.host.com', gitiles_project='project/name', gitiles_ref='ref/heads/master', gitiles_id='git_sha') self.builder = BuilderID(project='chromeos', bucket='postsubmit', builder='builder-postsubmit') self.group_build_id = 8000000000189 self.group_build = LuciFailedBuild.Create( luci_project=self.context.luci_project_name, luci_bucket=self.builder.bucket, luci_builder='builder2-postsubmit', build_id=self.group_build_id, legacy_build_number=12345, gitiles_host=self.context.gitiles_host, gitiles_project=self.context.gitiles_project, gitiles_ref=self.context.gitiles_ref, gitiles_id=self.context.gitiles_id, commit_position=self.first_failed_commit_position, 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) self.group_build.put()
def setUp(self): super(CompileFailureTest, self).setUp() self.build_id = 9876543210 self.edges = [ (['target1.o'], 'CXX'), (['target2.o'], 'ACTION'), ] build = LuciFailedBuild.Create( luci_project='chromium', luci_bucket='ci', luci_builder='Linux Builder', build_id=self.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() self.target_entities = [] for output_targets, rule in self.edges: target = CompileFailure.Create(build.key, 'compile', output_targets, rule) target.put() self.target_entities.append(target)
def testOnCompileFailureAnalysisResultRequestedAnalysisRunning(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() compile_failure = CompileFailure.Create(build.key, self.compile_step_name, ['target1'], 'CXX') 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.RUNNING analysis.Save() responses = compile_api.OnCompileFailureAnalysisResultRequested( request, build) self.assertEqual(1, len(responses)) self.assertEqual(0, len(responses[0].culprits)) self.assertFalse(responses[0].is_finished) self.assertTrue(responses[0].is_supported)
def testCreateLuciFailedBuildForCompileFailure(self): build_id = 87654321 commit_position = 65432 legacy_build_number = 12345 build = LuciFailedBuild.Create( luci_project='chromium', luci_bucket='ci', luci_builder='Linux Builder', build_id=build_id, legacy_build_number=legacy_build_number, gitiles_host='chromium.googlesource.com', gitiles_project='chromium/src', gitiles_ref='refs/heads/master', gitiles_id='git_hash', commit_position=commit_position, 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() # Get entity by build_id. build = LuciFailedBuild.get_by_id(build_id) self.assertIsNotNone(build) self.assertEqual(StepTypeEnum.COMPILE, build.build_failure_type) self.assertEqual(commit_position, build.gitiles_commit.commit_position) self.assertEqual('chromium/ci', build.bucket_id) self.assertEqual('chromium/ci/Linux Builder', build.builder_id) # Get entity by build number. res1 = LuciFailedBuild.GetBuildByNumber('chromium', 'ci', 'Linux Builder', legacy_build_number) self.assertEqual(build_id, res1.build_id) # Get entity by commit_position. res2 = LuciFailedBuild.query( ndb.AND( LuciFailedBuild.builder_id == 'chromium/ci/Linux Builder', LuciFailedBuild.gitiles_commit.commit_position == commit_position)).fetch() self.assertEqual(1, len(res2)) self.assertEqual(build_id, res2[0].build_id)
def _CreateLuciBuild(self, build_id): 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.TEST) build.put() return build
def setUp(self): super(CompileAnalysisAPITest, self).setUp() self.build_id = 8000000000123 self.build_number = 123 self.builder = BuilderID(project='chromium', bucket='ci', builder='Linux Tests') self.build = self._MockBuild(self.build_id, self.build_number, 'git_sha_123') self.rerun_builder = BuilderID(project='chromium', bucket='try', builder='findit_variables') self.context = Context(luci_project_name='chromium', gitiles_host='gitiles.host.com', gitiles_project='project/name', gitiles_ref='ref/heads/master', gitiles_id='git_sha_123') self.build_entity = LuciFailedBuild.Create( luci_project=self.build.builder.project, luci_bucket=self.build.builder.bucket, luci_builder=self.build.builder.builder, build_id=self.build.id, legacy_build_number=self.build.number, gitiles_host=self.context.gitiles_host, gitiles_project=self.context.gitiles_project, gitiles_ref=self.context.gitiles_ref, gitiles_id=self.context.gitiles_id, commit_position=123, status=self.build.status, create_time=self.build.create_time.ToDatetime(), start_time=self.build.start_time.ToDatetime(), end_time=self.build.end_time.ToDatetime(), build_failure_type=StepTypeEnum.COMPILE) self.build_entity.put() self.analysis_api = CompileAnalysisAPI() self.compile_failure = self.analysis_api._CreateFailure( self.build_entity.key, 'compile', self.build_id, 8000000000122, None, frozenset(['a.o']), None) self.compile_failure.put()
def setUp(self): super(AnalysisUtilTest, self).setUp() self.gitiles_host = 'gitiles.host.com' self.gitiles_project = 'project/name' self.gitiles_ref = 'ref/heads/master' self.build = LuciFailedBuild.Create( luci_project='chromium', luci_bucket='ci', luci_builder='Linux Builder', build_id=9876543210, 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) self.build.put() self.compile_failure_1 = CompileFailure.Create(self.build.key, 'compile', ['a.o'], 'CC') self.compile_failure_1.put() self.compile_failure_2 = CompileFailure.Create(self.build.key, 'compile', ['b.o'], 'CC') self.compile_failure_2.put() self.commits = [] for i in xrange(0, 11): self.commits.append(self._CreateGitilesCommit('r%d' % i, 100 + i))
def setUp(self): super(CompileFailureRerunAnalysisTest, self).setUp() self.build_id = 8000000000123 self.build_number = 123 self.builder = BuilderID(project='chromium', bucket='ci', builder='linux-rel') self.build = Build(id=self.build_id, builder=self.builder, number=self.build_number, status=common_pb2.FAILURE) self.build.input.gitiles_commit.host = 'gitiles.host.com' self.build.input.gitiles_commit.project = 'project/name' self.build.input.gitiles_commit.ref = 'ref/heads/master' self.build.input.gitiles_commit.id = 'git_sha_123' self.build.create_time.FromDatetime(datetime(2019, 4, 9)) self.build.start_time.FromDatetime(datetime(2019, 4, 9, 0, 1)) self.build.end_time.FromDatetime(datetime(2019, 4, 9, 1)) self.context = Context(luci_project_name='chromium', gitiles_host='gitiles.host.com', gitiles_project='project/name', gitiles_ref='ref/heads/master', gitiles_id='git_sha') build_entity = LuciFailedBuild.Create( luci_project=self.context.luci_project_name, luci_bucket=self.build.builder.bucket, luci_builder=self.build.builder.builder, build_id=self.build_id, legacy_build_number=self.build_number, gitiles_host=self.context.gitiles_host, gitiles_project=self.context.gitiles_project, gitiles_ref=self.context.gitiles_ref, gitiles_id=self.context.gitiles_id, commit_position=6000005, 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_entity.put() self.compile_failure = CompileFailure.Create( failed_build_key=build_entity.key, step_ui_name='compile', output_targets=['a.o'], first_failed_build_id=self.build_id, failure_group_build_id=None) self.compile_failure.put() self.analysis = CompileFailureAnalysis.Create( luci_project=self.context.luci_project_name, luci_bucket=self.build.builder.bucket, luci_builder=self.build.builder.builder, build_id=self.build_id, gitiles_host=self.context.gitiles_host, gitiles_project=self.context.gitiles_project, gitiles_ref=self.context.gitiles_ref, last_passed_gitiles_id='left_sha', last_passed_commit_position=6000000, first_failed_gitiles_id=self.context.gitiles_id, first_failed_commit_position=6000005, rerun_builder_id='chromium/findit/findit-variables', compile_failure_keys=[self.compile_failure.key]) self.analysis.Save()
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)