def testTriggerV2BuildFailed(self, mock_post): mock_build = Build() mock_headers = {'X-Prpc-Grpc-Code': '0'} binary_data = mock_build.SerializeToString() mock_post.return_value = (403, binary_data, mock_headers) builder = BuilderID(project='chromium', bucket='try', builder='linux-rel') gitiles_commit = GitilesCommit( project='gitiles/project', host='gitiles.host.com', ref='refs/heads/master', id='git_hash') properties = { 'property1': 'property1', 'property2': ['property2'], 'property3': { 'property3-key': 'property3-value' } } tags = [{'key': 'tag-key', 'value': 'tag-value'}] dimensions = [{'key': 'gpu', 'value': 'NVidia'}] build = buildbucket_client.TriggerV2Build( builder, gitiles_commit, properties, tags=tags, dimensions=dimensions) self.assertIsNone(build)
def testGetStepLogViewUrlPartialMatching(self, partial_match, full_step_name, expected_url_in_build1, expected_url_in_build2): mock_step1 = Step() mock_step1.name = 'step_name' mock_log1 = common_pb2.Log() mock_log1.name = 'log' mock_log1.view_url = 'view_url' mock_step1.logs.extend([mock_log1]) mock_step2 = Step() mock_step2.name = 'step_name_longer' mock_log2 = common_pb2.Log() mock_log2.name = 'log' mock_log2.view_url = 'view_url_partial_match' mock_step2.logs.extend([mock_log2]) mock_build1 = Build() mock_build1.steps.extend([mock_step1, mock_step2]) self.assertEqual( expected_url_in_build1, step_util._GetStepLogViewUrl(mock_build1, full_step_name, 'log', partial_match=partial_match)) mock_build2 = Build() mock_build2.steps.extend([mock_step2]) self.assertEqual( expected_url_in_build2, step_util._GetStepLogViewUrl(mock_build2, full_step_name, 'log', partial_match=partial_match))
def testGetBuildNumberFromBuildId(self, mock_post): build_id = 10000 expected_build_number = 12345 mock_build = Build() mock_build.id = build_id mock_build.status = 12 mock_build.output.properties['mastername'] = 'chromium.linux' mock_build.output.properties['buildername'] = 'Linux Builder' mock_build.output.properties['buildnumber'] = expected_build_number mock_build.output.properties.get_or_create_struct( 'swarm_hashes_ref/heads/mockmaster(at){#123}' )['mock_target'] = 'mock_hash' gitiles_commit = mock_build.input.gitiles_commit gitiles_commit.host = 'gitiles.host' gitiles_commit.project = 'gitiles/project' gitiles_commit.ref = 'refs/heads/mockmaster' mock_build.builder.project = 'mock_luci_project' mock_build.builder.bucket = 'mock_bucket' mock_build.builder.builder = 'Linux Builder' mock_headers = {'X-Prpc-Grpc-Code': '0'} binary_data = mock_build.SerializeToString() mock_post.return_value = (200, binary_data, mock_headers) self.assertEqual(expected_build_number, buildbucket_client.GetBuildNumberFromBuildId(build_id))
def testUpdateCompileFailuresWithFirstFailureInfoPrevBuildInfraFailure( self, mock_prev_builds, mock_get_build): """Test for previous build failed with different steps.""" mock_step1 = Step() mock_step1.name = 'compile' mock_step1.status = common_pb2.INFRA_FAILURE build_122_id = 8000000000122 build_122 = Build(id=build_122_id, builder=self.builder, number=self.build_number - 1, status=common_pb2.FAILURE) build_122.steps.extend([mock_step1]) build_121_id = 8000000000121 build_121 = Build(id=build_121_id, builder=self.builder, number=self.build_number - 2, status=common_pb2.SUCCESS) build_121.input.gitiles_commit.id = 'git_sha_121' build_121_info = { 'id': build_121_id, 'number': self.build_number - 2, 'commit_id': 'git_sha_121' } mock_prev_builds.return_value = SearchBuildsResponse( builds=[build_122, build_121]) mock_get_build.return_value = build_122 detailed_compile_failures = { 'compile': { 'failures': { frozenset(['target1', 'target2']): { 'rule': 'CXX', 'first_failed_build': self.build_info, 'last_passed_build': None, }, }, 'first_failed_build': self.build_info, 'last_passed_build': None, }, } pre_compile_analysis.UpdateCompileFailuresWithFirstFailureInfo( self.context, self.build, detailed_compile_failures) expected_failures = { 'compile': { 'failures': { frozenset(['target1', 'target2']): { 'rule': 'CXX', 'first_failed_build': self.build_info, 'last_passed_build': build_121_info, }, }, 'first_failed_build': self.build_info, 'last_passed_build': build_121_info, }, } self.assertEqual(expected_failures, detailed_compile_failures)
def testGetBlameListForV2Build(self, mock_search_build, mock_revisions): gitiles_project = 'chromium/src' gitiles_host = 'chromium.googlesource.com' gitiles_ref = 'refs/heads/master' build = Build(id=80000000123) build.input.gitiles_commit.project = gitiles_project build.input.gitiles_commit.host = gitiles_host build.input.gitiles_commit.ref = gitiles_ref build.input.gitiles_commit.id = 'rev4' previous_build = Build(id=80000000122) previous_build.input.gitiles_commit.project = gitiles_project previous_build.input.gitiles_commit.host = gitiles_host previous_build.input.gitiles_commit.ref = gitiles_ref previous_build.input.gitiles_commit.id = 'rev1' mock_search_build.return_value = SearchBuildsResponse( builds=[previous_build]) expected_blame_list = ['rev4', 'rev3', 'rev2'] mock_revisions.return_value = expected_blame_list self.assertEqual(expected_blame_list, buildbot.GetBlameListForV2Build(build)) mock_revisions.assert_called_once_with( 'rev1', 'rev4', 'https://chromium.googlesource.com/chromium/src.git')
def testSucessfulPushTryJob(self, mock_post, *_): mock_build = Build() mock_build.id = 8945610992972640896 mock_build.status = 12 mock_build.output.properties['mastername'] = 'luci.chromium.findit' mock_build.output.properties['buildername'] = ('findit_variable') mock_build.output.properties['target_mastername'] = 'chromium.linux' mock_build.output.properties['target_buildername'] = ( 'linux_chromium_compile_dbg_ng') mock_build.output.properties.get_or_create_struct( 'swarm_hashes_ref/heads/mockmaster(at){#123}_with_patch' )['mock_target'] = 'mock_hash' mock_build.output.properties.get_or_create_struct( 'swarm_hashes_ref/heads/mockmaster(at){#123}_without_patch' )['mock_target'] = 'mock_hash_without' mock_build.output.properties['repository'] = ( 'https://test.googlesource.com/team/project.git') mock_build.output.properties['gitiles_ref'] = 'refs/heads/mockmaster' mock_change = mock_build.input.gerrit_changes.add() mock_change.host = 'mock.gerrit.host' mock_change.change = 12345 mock_change.patchset = 1 mock_build.builder.project = 'mock_luci_project' mock_build.builder.bucket = 'mock_bucket' mock_build.builder.builder = 'findit_variable' mock_headers = {'X-Prpc-Grpc-Code': '0'} binary_data = mock_build.SerializeToString() mock_post.return_value = (200, binary_data, mock_headers) request_body = json.dumps({ 'message': { 'attributes': { 'build_id': str(mock_build.id), }, 'data': base64.b64encode( json.dumps({ 'build': { 'project': 'chromium', 'bucket': 'luci.chromium.ci', 'status': 'COMPLETED', 'parameters_json': '{"builder_name": "builder"}', } })), }, }) response = self.test_app.post('/index-isolated-builds?format=json', params=request_body) self.assertEqual(200, response.status_int) self.assertEqual( 123, IsolatedTarget.get_by_id( '8945610992972640896/mock_target').commit_position) self.assertEqual(2, len(json.loads(response.body)['created_rows'])) # Ensure target values were used. entry = IsolatedTarget.get_by_id('8945610992972640896/mock_target') self.assertEqual('chromium.linux', entry.master_name) self.assertEqual('linux_chromium_compile_dbg_ng', entry.builder_name)
def testGetRecentCompletedBuilds(self, mock_fn): mock_fn.return_value = SearchBuildsResponse( builds=[Build(number=34), Build(number=33), Build(number=32)]) self.assertEqual([34, 33, 32], buildbot.GetRecentCompletedBuilds( 'm', 'b', RetryHttpClient()))
def testExtractBuildInfoFromV2BuildComplete(self, *_): master_name = 'chromium.linux' builder_name = 'Linux Tests' bucket = 'ci' build_id = 8765000000056123 build_number = 56123 build_start_time = datetime(2019, 5, 21) build_end_time = datetime(2019, 5, 21, 1) gitiles_id = 'rev4' build = Build(id=build_id, number=build_number, builder=BuilderID(project='chromium', bucket=bucket, builder=builder_name)) build.input.gitiles_commit.project = 'chromium/src' build.input.gitiles_commit.host = 'chromium.googlesource.com' build.input.gitiles_commit.ref = 'refs/heads/master' build.input.gitiles_commit.id = gitiles_id build.input.properties['$recipe_engine/runtime'] = {'is_luci': True} build.input.properties['parent_buildername'] = 'Linux Builder' build.input.properties['parent_mastername'] = 'chromium.linux' build.create_time.FromDatetime(build_start_time) build.end_time.FromDatetime(build_end_time) build.status = common_pb2.FAILURE step1 = Step(name='s1', status=common_pb2.SUCCESS) log = step1.logs.add() log.name = 'stdout' step2 = Step(name='s2', status=common_pb2.SUCCESS) step3 = Step(name='s3', status=common_pb2.FAILURE) log = step3.logs.add() log.name = 'stdout' step4 = Step(name='s4', status=common_pb2.FAILURE) step_fr = Step(name='Failure reason', status=common_pb2.FAILURE) build.steps.extend([step1, step2, step3, step4, step_fr]) build_info = buildbot.ExtractBuildInfoFromV2Build( master_name, builder_name, build_number, build) self.assertEqual(master_name, build_info.master_name) self.assertEqual(builder_name, build_info.builder_name) self.assertEqual(build_number, build_info.build_number) self.assertEqual(build_start_time, build_info.build_start_time) self.assertEqual(build_end_time, build_info.build_end_time) self.assertEqual(gitiles_id, build_info.chromium_revision) self.assertEqual(654332, build_info.commit_position) self.assertTrue(build_info.completed) self.assertEqual(common_pb2.FAILURE, build_info.result) self.assertItemsEqual(['rev2', 'rev3'], build_info.blame_list) self.assertItemsEqual(['s3'], build_info.failed_steps) self.assertItemsEqual(['s1'], build_info.passed_steps) self.assertItemsEqual(['s3', 's4', 'Failure reason'], build_info.not_passed_steps) self.assertEqual(bucket, build_info.buildbucket_bucket) self.assertEqual(str(build_id), build_info.buildbucket_id) self.assertTrue(build_info.is_luci)
def testGetStepLogFromBuildObjectPartialMatch(self, mock_get_log_url): step_util.GetStepLogFromBuildObject(Build(), 'full_step_name', 'http_client') self.assertIn(False, mock_get_log_url.call_args[0]) step_util.GetStepLogFromBuildObject(Build(), 'full_step_name', 'http_client', partial_match=True) self.assertIn(True, mock_get_log_url.call_args[0])
def testGetV2BuildByBuilderAndBuildNumber(self, mock_post): master_name = 'tryserver.chromium.win' mock_build = Build() mock_build.input.properties['mastername'] = master_name mock_headers = {'X-Prpc-Grpc-Code': '0'} binary_data = mock_build.SerializeToString() mock_post.return_value = (200, binary_data, mock_headers) build = buildbucket_client.GetV2BuildByBuilderAndBuildNumber( 'chromium', 'try', 'win10_chromium_x64_rel_ng', 123) self.assertEqual(master_name, build.input.properties['mastername'])
def testSucessfulPushCIBuild(self, mock_post, *_): mock_build = Build() mock_build.id = 8945610992972640896 mock_build.status = 12 mock_build.output.properties['mastername'] = 'chromium.linux' mock_build.output.properties['buildername'] = 'Linux Builder' mock_build.output.properties.get_or_create_struct( 'swarm_hashes_ref/heads/mockmaster(at){#123}' )['mock_target'] = 'mock_hash' gitiles_commit = mock_build.input.gitiles_commit gitiles_commit.host = 'gitiles.host' gitiles_commit.project = 'gitiles/project' gitiles_commit.ref = 'refs/heads/mockmaster' mock_build.builder.project = 'mock_luci_project' mock_build.builder.bucket = 'mock_bucket' mock_build.builder.builder = 'Linux Builder' mock_headers = {'X-Prpc-Grpc-Code': '0'} binary_data = mock_build.SerializeToString() mock_post.return_value = (200, binary_data, mock_headers) request_body = json.dumps({ 'message': { 'attributes': { 'build_id': str(mock_build.id), }, 'data': base64.b64encode( json.dumps({ 'build': { 'project': 'chromium', 'bucket': 'luci.chromium.ci', 'status': 'COMPLETED', 'parameters_json': '{"builder_name": "builder"}', } })), }, }) response = self.test_app.post('/index-isolated-builds?format=json', params=request_body) self.assertEqual(200, response.status_int) self.assertEqual( 123, IsolatedTarget.get_by_id( '8945610992972640896/mock_target').commit_position) self.assertEqual( 8945610992972640896, IsolatedTarget.get_by_id( '8945610992972640896/mock_target').build_id) self.assertEqual(1, len(json.loads(response.body)['created_rows']))
def TriggerV2Build(builder, gitiles_commit, properties, tags=None, dimensions=None): """Triggers a build using buildbucket v2 API. Args: builder (build_pb2.BuilderID): Information about the builder the build runs on. gitiles_commit (common_pb2.GitilesCommit): Input commit the build runs. properties (dict): Input properties of the build. tags (list of dict): Tags for the build. In the format: [ { 'key': 'tag-key', 'value': 'tag-value' }, ... ] dimensions (list of dict): configured dimensions of the build. Format: [ { 'key': 'dimension-key', 'value': 'dimension-value' }, ... ] """ request = ScheduleBuildRequest(builder=builder, gitiles_commit=gitiles_commit, tags=tags or [], dimensions=dimensions or []) request.properties.update(properties) status_code, content, response_headers = FinditHttpClient().Post( _BUILDBUCKET_V2_SCHEDULE_BUILD_ENDPOINT, request.SerializeToString(), headers={'Content-Type': 'application/prpc; encoding=binary'}) if status_code == 200 and response_headers.get( 'X-Prpc-Grpc-Code') == GRPC_OK: result = Build() result.ParseFromString(content) return result logging.warning('Unexpected status_code: %d and prpc code: %s', status_code, response_headers.get('X-Prpc-Grpc-Code')) return None
def testGetStepLogViewUrlNoMatchingLog(self): build_id = 8945610992972640896 mock_log = Step.Log() mock_log.name = 'another_log' mock_log.view_url = 'view_url' mock_step1 = Step() mock_step1.name = 's1' mock_step1.logs.extend([mock_log]) mock_step2 = Step() mock_step2.name = 's2' mock_step2.logs.extend([mock_log]) mock_build = Build() mock_build.id = build_id mock_build.steps.extend([mock_step1, mock_step2]) self.assertIsNone(step_util._GetStepLogViewUrl(mock_build, 's2', 'log'))
def testGetCompileRerunBuildInputPropertiesOtherStep(self): build = Build() build.input.properties['build_target'] = {'name': 'abc'} self.assertIsNone( ChromeOSProjectAPI().GetCompileRerunBuildInputProperties( build, {}))
def testBackfillIfSkippedAnalyses(self, mock_trigger_new_analysis, mock_get_failures, *_): first_failed_build_id = 8000000000128 first_failure = TestFailure.Create( ndb.Key(LuciFailedBuild, first_failed_build_id), self.test_step_name, 'test8', first_failed_build_id=first_failed_build_id, failure_group_build_id=first_failed_build_id, properties={'needs_bisection': False}) first_failure.put() current_build_id = 8000000000123 test_failure = TestFailure.Create( ndb.Key(LuciFailedBuild, current_build_id), self.test_step_name, 'test8', first_failed_build_id=first_failed_build_id, failure_group_build_id=first_failed_build_id, merged_failure_key=first_failure.key) test_failure.put() mock_get_failures.return_value = {first_failed_build_id: [first_failure]} context = Context( luci_project_name='chromeos', gitiles_host='gitiles.host.com', gitiles_project='project/name', gitiles_ref='ref/heads/master', gitiles_id='git_sha_123') build = Build(id=current_build_id) test_analysis.BackfillIfSkippedAnalyses(context, build) mock_trigger_new_analysis.assert_called_once_with( 'ChromeOSProjectAPI', 'prev_context', 'prev_build', [first_failure])
def testGetStepLogForLuciBuildNoViewUrl(self, mock_get_build, mock_get_log, _): build_id = '8945610992972640896' mock_log = Step.Log() mock_log.name = 'step_metadata' mock_log.view_url = 'view_url' mock_step = Step() mock_step.name = 's' mock_step.logs.extend([mock_log]) mock_build = Build() mock_build.id = int(build_id) mock_build.steps.extend([mock_step]) mock_get_build.return_value = mock_build self.assertIsNone( step_util.GetStepLogForLuciBuild(build_id, 's', None, 'step_metadata')) self.assertFalse(mock_get_log.called)
def testGetFailuresWithMatchingCompileFailureGroupsNoExistingGroup(self): build_id = 8000000000122 build = Build(builder=self.builder, number=122, id=build_id) build.input.gitiles_commit.host = 'gitiles.host.com' build.input.gitiles_commit.project = 'project/name' build.input.gitiles_commit.ref = 'ref/heads/master' build.input.gitiles_commit.id = 'git_sha' last_passed_build_info = { 'id': 8000000000121, 'number': 121, 'commit_id': 'git_sha_121' } output_target1 = json.dumps({ 'category': 'chromeos-base', 'packageName': 'target1' }) first_failures_in_current_build = { 'failures': { 'install packages': { 'output_targets': [frozenset([output_target1])], 'last_passed_build': last_passed_build_info, }, }, 'last_passed_build': last_passed_build_info } self.assertEqual( {}, ChromeOSProjectAPI().GetFailuresWithMatchingCompileFailureGroups( self.context, build, first_failures_in_current_build))
def testGetCompileRerunBuildInputProperties(self): build_target = 'abc' output_target1 = json.dumps({ 'category': 'chromeos-base', 'packageName': 'target1' }) targets = {'install packages': [output_target1]} build = Build() build.input.properties['build_target'] = {'name': build_target} expected_prop = { 'recipe': 'build_target', 'build_target': { 'name': build_target }, '$chromeos/cros_bisect': { 'targets': [output_target1] }, } self.assertEqual( expected_prop, ChromeOSProjectAPI().GetCompileRerunBuildInputProperties( build, targets))
def testGetFailuresWithMatchingTestFailureGroupsNoExistingGroup(self): build_id = 8000000000122 build = Build(builder=self.builder, number=122, id=build_id) build.input.gitiles_commit.host = 'gitiles.host.com' build.input.gitiles_commit.project = 'project/name' build.input.gitiles_commit.ref = 'ref/heads/master' build.input.gitiles_commit.id = 'git_sha' last_passed_build_info = { 'id': 8000000000121, 'number': 121, 'commit_id': 'git_sha_121' } first_failures_in_current_build = { 'failures': { 'step': { 'atomic_failures': [], 'last_passed_build': last_passed_build_info, }, }, 'last_passed_build': last_passed_build_info, } self.assertEqual( {}, ChromeOSProjectAPI().GetFailuresWithMatchingTestFailureGroups( self.context, build, first_failures_in_current_build))
def _CreateBuildbucketBuild(self, build_id, build_number): build = Build(id=build_id, number=build_number) build.input.gitiles_commit.host = 'gitiles.host.com' build.input.gitiles_commit.project = 'project/name' build.input.gitiles_commit.ref = 'ref/heads/master' build.input.gitiles_commit.id = 'git_sha' return build
def testGetStepLogForLuciBuild(self, mock_get_build, mock_get_log, _): build_id = '8945610992972640896' mock_log = Step.Log() mock_log.name = 'step_metadata' mock_log.view_url = 'view_url' mock_step = Step() mock_step.name = 's' mock_step.logs.extend([mock_log]) mock_build = Build() mock_build.id = int(build_id) mock_build.steps.extend([mock_step]) mock_get_build.return_value = mock_build self.assertEqual( 'log', step_util.GetStepLogForLuciBuild(build_id, 's', None, 'step_metadata')) mock_get_log.assert_called_once_with('view_url', None)
def testCompileFailure(self, mock_analyzer, _): build = Build() step = build.steps.add() step.name = 'compile' step.status = common_pb2.FAILURE self.assertTrue(api.OnBuildFailure(self.context, build)) mock_analyzer.assert_called_once_with(self.context, build, [step])
def testGetStepStartAndEndTime(self): build_id = '8945610992972640896' start_time = datetime.datetime(2019, 3, 6) end_time = datetime.datetime(2019, 3, 6, 0, 0, 10) step = Step() step.name = 's' step.start_time.FromDatetime(start_time) step.end_time.FromDatetime(end_time) build = Build() build.id = int(build_id) build.steps.extend([step]) self.assertEqual((start_time, end_time), step_util.GetStepStartAndEndTime(build, 's')) self.assertEqual((None, None), step_util.GetStepStartAndEndTime(build, 's2'))
def testGetAnalyzedBuildIdFromRerunBuild(self): analyzed_build_id = 8000000000123 build = Build(tags=[{ 'key': 'analyzed_build_id', 'value': str(analyzed_build_id) }]) self.assertEqual(analyzed_build_id, build_util.GetAnalyzedBuildIdFromRerunBuild(build))
def testAnalyzeTestFailureNoFirstFailure(self, mock_failures, mock_first_failure, *_): build = Build() test_failures = [] self.assertFalse( test_analysis.AnalyzeTestFailure(self.context, build, test_failures)) mock_failures.assert_called_once_with(build, test_failures) mock_first_failure.assert_called_once_with(self.context, build, {})
def testSkipFailedBuildNotMatchingGitilesProject(self, mocked_GetV2Build, *_): build = Build() build.input.gitiles_commit.host = 'wrong.host.com' build.input.gitiles_commit.project = 'wrong/project' mocked_GetV2Build.return_value = build self.assertFalse( api.OnBuildCompletion('project', 'ci', 'builder', 123, 'FAILURE')) mocked_GetV2Build.assert_called_once_with( 123, fields=FieldMask(paths=['*']))
def testGetFailuresWithMatchingCompileFailureGroupsWithExistingGroup(self): build_id = 8000000000122 build = Build(builder=self.builder, number=122, id=build_id) build.input.gitiles_commit.host = 'gitiles.host.com' build.input.gitiles_commit.project = 'project/name' build.input.gitiles_commit.ref = 'ref/heads/master' build.input.gitiles_commit.id = 'git_sha' last_passed_build_info = { 'id': 8000000000121, 'number': 121, 'commit_id': 'git_sha_121' } first_failures_in_current_build = { 'failures': { 'install packages': { 'output_targets': [ frozenset(['target1']), ], 'last_passed_build': last_passed_build_info, }, }, 'last_passed_build': last_passed_build_info } compile_failure = CompileFailure.Create( self.group_build.key, 'install packages', ['target1'], 'CXX', first_failed_build_id=self.group_build_id, last_passed_build_id=8000000000160) compile_failure.put() CompileFailureGroup.Create( luci_project=self.context.luci_project_name, luci_bucket=build.builder.bucket, build_id=self.group_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_build_info['commit_id'], last_passed_commit_position=654321, first_failed_gitiles_id=self.first_failed_commit_id, first_failed_commit_position=654340, compile_failure_keys=[compile_failure.key]).put() expected_failures_with_existing_group = { 'install packages': { frozenset(['target1']): self.group_build_id } } self.assertEqual( expected_failures_with_existing_group, ChromeOSProjectAPI().GetFailuresWithMatchingCompileFailureGroups( self.context, build, first_failures_in_current_build))
def testGetBuildFailureInfo(self, mock_build, *_): master_name = 'm' builder_name = 'b' build_number = 223 self._CreateAndSaveWfAnanlysis(master_name, builder_name, build_number, analysis_status.PENDING) build = WfBuild.Create(master_name, builder_name, build_number) build.build_id = '80000000223' build.completed = True build.put() build_223 = Build( id=80000000223, number=build_number, status=common_pb2.FAILURE) build_223.input.gitiles_commit.id = 'rev223' step1 = Step(name='compile', status=common_pb2.SUCCESS) log = step1.logs.add() log.name = 'stdout' step2 = Step(name='abc_test', status=common_pb2.FAILURE) log = step2.logs.add() log.name = 'stdout' build_223.steps.extend([step1, step2]) mock_build.return_value = build_223 failure_info, should_proceed = ci_failure.GetBuildFailureInfo( master_name, builder_name, build_number) expected_failure_info = { 'failed': True, 'master_name': master_name, 'builder_name': builder_name, 'build_number': build_number, 'is_luci': None, 'buildbucket_bucket': '', 'buildbucket_id': '80000000223', 'chromium_revision': 'rev223', 'builds': { build_number: { 'blame_list': ['rev223'], 'chromium_revision': 'rev223' } }, 'failed_steps': { 'abc_test': { 'current_failure': build_number, 'first_failure': build_number, 'supported': True } }, 'failure_type': failure_type.TEST, 'parent_mastername': None, 'parent_buildername': None, } self.assertEqual(expected_failure_info, failure_info) self.assertTrue(should_proceed)
def testAnalyzeCompileFailureNoFirstFailure(self, mock_failures, mock_first_failure, *_): build = Build() compile_failures = [] self.assertFalse( compile_api.AnalyzeCompileFailure(self.context, build, compile_failures)) mock_failures.assert_called_once_with(build, compile_failures) mock_first_failure.assert_called_once_with(self.context, build, {})
def testOnRerunBuildCompletionUnsupportedPurpose(self): build = Build(id=800000502, tags=[{ 'key': constants.RERUN_BUILD_PURPOSE_TAG_KEY, 'value': 'some purpose' }, { 'key': 'analyzed_build_id', 'value': '800000000' }]) self.assertFalse(api.OnRerunBuildCompletion(self.context, build))