def testCompletedMultipleDifferences(self, differences, result_values, commit_as_dict): c0 = change.Change((change.Commit('chromium', 'git_hash_0'), )) c1 = change.Change((change.Commit('chromium', 'git_hash_1'), )) c2 = change.Change((change.Commit('chromium', 'git_hash_2'), )) c2_5 = change.Change((change.Commit('chromium', 'git_hash_2_5'))) c3 = change.Change((change.Commit('chromium', 'git_hash_3'), )) change_map = {c0: [50], c1: [0], c2: [40], c2_5: [0], c3: []} differences.return_value = [(c0, c1), (c1, c2), (c2_5, c3)] result_values.side_effect = lambda c: change_map.get(c, []) commit_as_dict.side_effect = ( { 'repository': 'chromium', 'git_hash': 'git_hash_1', 'url': 'https://example.com/repository/+/git_hash_1', 'author': '*****@*****.**', 'subject': 'Subject.', 'message': 'Subject.\n\nCommit message.', }, { 'repository': 'chromium', 'git_hash': 'git_hash_2', 'url': 'https://example.com/repository/+/git_hash_2', 'author': '*****@*****.**', 'subject': 'Subject.', 'message': 'Subject.\n\nCommit message.', }, { 'repository': 'chromium', 'git_hash': 'git_hash_3', 'url': 'https://example.com/repository/+/git_hash_3', 'author': '*****@*****.**', 'subject': 'Subject.', 'message': 'Subject.\n\nCommit message.', }, ) self.get_issue.return_value = {'status': 'Untriaged'} j = job.Job.New((), (), bug_id=123456, comparison_mode='performance') j.Run() self.ExecuteDeferredTasks('default') self.assertFalse(j.failed) # We now only CC folks from the top commit. self.add_bug_comment.assert_called_once_with( 123456, _COMMENT_COMPLETED_THREE_DIFFERENCES, status='Assigned', owner='*****@*****.**', cc_list=['*****@*****.**'], labels=['Pinpoint-Multiple-Culprits'], merge_issue=None, project='chromium')
def testCompletedMultipleDifferences(self, differences, result_values, commit_as_dict): c1 = change.Change((change.Commit('chromium', 'git_hash_1'), )) c2 = change.Change((change.Commit('chromium', 'git_hash_2'), )) c3 = change.Change((change.Commit('chromium', 'git_hash_3'), )) differences.return_value = [(None, c1), (None, c2), (None, c3)] result_values.side_effect = [50], [0], [0], [40], [0], [] commit_as_dict.side_effect = ( { 'repository': 'chromium', 'git_hash': 'git_hash_1', 'url': 'https://example.com/repository/+/git_hash_1', 'author': '*****@*****.**', 'subject': 'Subject.', 'message': 'Subject.\n\nCommit message.', }, { 'repository': 'chromium', 'git_hash': 'git_hash_2', 'url': 'https://example.com/repository/+/git_hash_2', 'author': '*****@*****.**', 'subject': 'Subject.', 'message': 'Subject.\n\nCommit message.', }, { 'repository': 'chromium', 'git_hash': 'git_hash_3', 'url': 'https://example.com/repository/+/git_hash_3', 'author': '*****@*****.**', 'subject': 'Subject.', 'message': 'Subject.\n\nCommit message.', }, ) self.get_issue.return_value = {'status': 'Untriaged'} j = job.Job.New((), (), bug_id=123456, comparison_mode='performance') j.Run() self.ExecuteDeferredTasks('default') self.add_bug_comment.assert_called_once_with( 123456, _COMMENT_COMPLETED_THREE_DIFFERENCES, status='Assigned', owner='*****@*****.**', cc_list=[ '*****@*****.**', '*****@*****.**', '*****@*****.**' ], merge_issue=None)
def testCompletedWithAutorollCulpritButNotMostRecent( self, differences, result_values, commit_as_dict): """Regression test for http://crbug.com/1076756. When an autoroll has the biggest delta, assigns to its sheriff even when it is not the latest change. """ c0 = change.Change((change.Commit('chromium', 'git_hash_0'), )) c1 = change.Change((change.Commit('chromium', 'git_hash_1'), )) c2 = change.Change((change.Commit('chromium', 'git_hash_2'), )) change_map = {c0: [0], c1: [10], c2: [10]} differences.return_value = [(c0, c1), (c1, c2)] result_values.side_effect = lambda c: change_map.get(c, []) commit_as_dict.side_effect = ( { 'repository': 'chromium', 'git_hash': 'git_hash_1', 'url': 'https://example.com/repository/+/git_hash_1', 'author': '*****@*****.**', 'subject': 'Subject.', 'message': 'Subject.\n\nCommit message.\n\[email protected]', }, { 'repository': 'chromium', 'git_hash': 'git_hash_2', 'url': 'https://example.com/repository/+/git_hash_2', 'author': '*****@*****.**', 'subject': 'Subject.', 'message': 'Subject.\n\nCommit message.', }, ) self.get_issue.return_value = {'status': 'Untriaged'} j = job.Job.New((), (), bug_id=123456, comparison_mode='performance') j.put() j.Run() self.ExecuteDeferredTasks('default') self.assertFalse(j.failed) self.add_bug_comment.assert_called_once_with( mock.ANY, mock.ANY, status='Assigned', owner='*****@*****.**', cc_list=['*****@*****.**'], labels=mock.ANY, merge_issue=None)
def testCompletedMultipleDifferences_NoDeltas(self, differences, result_values, commit_as_dict): """Regression test for http://crbug.com/1078680. Picks people to notify even when none of the differences have deltas (they are all transitions to/from "No values"). """ # Two differences, neither has deltas (50 -> No Values, No Values -> 50). c0 = change.Change((change.Commit('chromium', 'git_hash_0'), )) c1 = change.Change((change.Commit('chromium', 'git_hash_1'), )) c2 = change.Change((change.Commit('chromium', 'git_hash_2'), )) change_map = {c0: [50], c1: [], c2: [50]} differences.return_value = [(c0, c1), (c1, c2)] result_values.side_effect = lambda c: change_map.get(c, []) commit_as_dict.side_effect = ( { 'repository': 'chromium', 'git_hash': 'git_hash_1', 'url': 'https://example.com/repository/+/git_hash_1', 'author': '*****@*****.**', 'subject': 'Subject.', 'message': 'Subject.\n\nCommit message.', }, { 'repository': 'chromium', 'git_hash': 'git_hash_2', 'url': 'https://example.com/repository/+/git_hash_2', 'author': '*****@*****.**', 'subject': 'Subject.', 'message': 'Subject.\n\nCommit message.', }, ) self.get_issue.return_value = {'status': 'Untriaged'} j = job.Job.New((), (), bug_id=123456, comparison_mode='performance') j.Run() self.ExecuteDeferredTasks('default') self.assertFalse(j.failed) # Notifies the owner of the first change in the list of differences, seeing # as they are all equally small. self.add_bug_comment.assert_called_once_with( 123456, mock.ANY, status='Assigned', owner='*****@*****.**', cc_list=['*****@*****.**'], labels=['Pinpoint-Multiple-Culprits'], merge_issue=None, project='chromium')
def testInitiate_FoundIsolate(self, *_): # Seed the isolate for this change. change = change_module.Change( commits=[change_module.Commit('chromium', '7c7e90be')]) isolate.Put((('Mac Builder', change, 'telemetry_perf_tests', 'https://isolate.server', '7c7e90be'), )) # Then ensure that we can find the seeded isolate for the specified # revision. self.assertDictEqual( { 'find_isolate_chromium@7c7e90be': { 'bucket': 'luci.bucket', 'builder': 'Mac Builder', 'change': mock.ANY, 'isolate_hash': '7c7e90be', 'isolate_server': 'https://isolate.server', 'status': 'completed', 'target': 'telemetry_perf_tests', }, }, task_module.Evaluate( self.job, event_module.Event( type='initiate', target_task='find_isolate_chromium@7c7e90be', payload={}), find_isolate.Evaluator(self.job)))
def testCompletedDoesNotReassign(self, differences, result_values, patch_as_dict): commits = (change.Commit('chromium', 'git_hash'), ) patch = change.GerritPatch('https://codereview.com', 672011, '2f0d5c7') c = change.Change(commits, patch) c = change.Change(commits, patch) differences.return_value = [(None, c)] result_values.side_effect = [0], [1.23456] patch_as_dict.return_value = { 'author': '*****@*****.**', 'subject': 'Subject.', 'url': 'https://codereview.com/c/672011/2f0d5c7', 'git_hash': 'abc123' } self.get_issue.return_value = {'status': 'Assigned'} j = job.Job.New((), (), bug_id=123456, comparison_mode='performance') j.Run() self.add_bug_comment.assert_called_once_with( 123456, _COMMENT_COMPLETED_WITH_PATCH, cc_list=['*****@*****.**'], merge_issue=None)
def testCompletedOneDifference(self, differences, commit_info): c = change.Change((change.Commit('chromium', 'git_hash'), )) differences.return_value = [(1, c)] commit_info.return_value = { 'author': { 'email': '*****@*****.**' }, 'committer': { 'time': 'Fri Jan 01 00:01:00 2016' }, 'message': 'Subject.\n\n' 'Commit message.\n' 'Reviewed-by: Reviewer Name <*****@*****.**>', } j = job.Job.New({}, [], False, bug_id=123456) j.put() j.Run() self.add_bug_comment.assert_called_once_with( 123456, _COMMENT_COMPLETED_ONE_DIFFERENCE, status='Assigned', owner='*****@*****.**', cc_list=['*****@*****.**', '*****@*****.**'])
def Parameterized_TestCompletedMultipleDifferences(self, number_culprits, expected_num_ccs, differences, result_values, commit_as_dict): changes = [ change.Change((change.Commit('chromium', 'git_hash_%d' % (i, )), )) for i in range(1, number_culprits + 1) ] # Return [(None,c1), (c1,c2), (c2,c3), ...] differences.return_value = zip([None] + changes, changes) # Ensure culprits are ordered by deriving change results values from commit # names. E.g.: # Change(git_hash_1) -> result_value=[1], # Change(git_hash_2) -> result_value=[4], # etc. def ResultValuesFromFakeGitHash(change_obj): if change_obj is None: return [0] v = int(change_obj.commits[0].git_hash[len('git_hash_'):]) return [v * v] # Square the value to ensure increasing deltas. result_values.side_effect = ResultValuesFromFakeGitHash commit_as_dict.side_effect = [{ 'repository': 'chromium', 'git_hash': 'git_hash_%d' % (i, ), 'url': 'https://example.com/repository/+/git_hash_%d' % (i, ), 'author': '*****@*****.**' % (i, ), 'subject': 'Subject.', 'message': 'Subject.\n\nCommit message.', } for i in range(1, number_culprits + 1)] self.get_issue.return_value = {'status': 'Untriaged'} j = job.Job.New((), (), bug_id=123456, comparison_mode='performance') j.Run() self.ExecuteDeferredTasks('default') self.assertFalse(j.failed) expected_ccs = [ '*****@*****.**' % (i, ) for i in range(number_culprits, number_culprits - expected_num_ccs, -1) ] # We only CC folks from the top commits. self.add_bug_comment.assert_called_once_with( 123456, mock.ANY, status='Assigned', owner=expected_ccs[0], cc_list=sorted(expected_ccs), labels=['Pinpoint-Multiple-Culprits'], merge_issue=None, project='chromium')
def testCompletedWithCommit(self, differences, result_values, commit_as_dict): c = change.Change((change.Commit('chromium', 'git_hash'), )) differences.return_value = [(None, c)] result_values.side_effect = [0], [1.23456] commit_as_dict.return_value = { 'repository': 'chromium', 'git_hash': 'git_hash', 'url': 'https://example.com/repository/+/git_hash', 'author': '*****@*****.**', 'subject': 'Subject.', 'message': 'Subject.\n\nCommit message.', } self.get_issue.return_value = {'status': 'Untriaged'} j = job.Job.New((), (), bug_id=123456, comparison_mode='performance') j.Run() self.ExecuteDeferredTasks('default') self.assertFalse(j.failed) self.add_bug_comment.assert_called_once_with( 123456, mock.ANY, status='Assigned', owner='*****@*****.**', labels=['Pinpoint-Culprit-Found'], cc_list=['*****@*****.**'], merge_issue=None, project='chromium') message = self.add_bug_comment.call_args[0][1] self.assertIn('Found a significant difference at 1 commit.', message) self.assertIn('<b>Subject.</b>', message) self.assertIn('https://example.com/repository/+/git_hash', message)
def testCompletedSkipsMergeWhenDuplicate( self, differences, result_values, commit_as_dict): c = change.Change((change.Commit('chromium', 'git_hash'),)) differences.return_value = [(None, c)] result_values.side_effect = [0], [1.23456] commit_as_dict.return_value = { 'repository': 'chromium', 'git_hash': 'git_hash', 'author': '*****@*****.**', 'subject': 'Subject.', 'url': 'https://example.com/repository/+/git_hash', 'message': 'Subject.\n\nCommit message.', } def _GetIssue(bug_id): if bug_id == 111222: return {'status': 'Duplicate', 'id': '111222'} else: return {'status': 'Untriaged'} self.get_issue.side_effect = _GetIssue layered_cache.SetExternal('commit_hash_git_hash', 111222) j = job.Job.New((), (), bug_id=123456, comparison_mode='performance') j.Run() self.ExecuteDeferredTasks('default') self.add_bug_comment.assert_called_once_with( 123456, _COMMENT_COMPLETED_WITH_COMMIT, status='Assigned', owner='*****@*****.**', cc_list=['*****@*****.**'], merge_issue=None)
def testIsolateLookupSuccess(self): change = change_module.Change( (change_module.Commit('chromium', 'f9f2b720'), )) quest = find_isolate.FindIsolate('Mac Builder', 'telemetry_perf_tests') execution = quest.Start(change) execution.Poll() expected_result_arguments = { 'isolate_server': 'https://isolate.server', 'isolate_hash': '7c7e90be', } expected_as_dict = { 'completed': True, 'exception': None, 'details': [ { 'key': 'builder', 'value': 'Mac Builder', }, { 'key': 'isolate', 'value': '7c7e90be', 'url': 'https://isolate.server/browse?digest=7c7e90be', }, ], } self.assertExecutionSuccess(execution) self.assertEqual(execution.result_values, ()) self.assertEqual(execution.result_arguments, expected_result_arguments) self.assertEqual(execution.AsDict(), expected_as_dict)
def testSuccesfulBuilderLookupForAllBuilders(self): builder_testers = ( ('arm-builder-rel', 'health-plan-clankium-phone'), ('Android Builder', 'Android Nexus5 Perf'), ('Android arm64 Builder', 'Android Nexus5X Perf'), ('Linux Builder', 'Linux Perf'), ('Mac Builder', 'Mac Air Perf'), ('Win Builder', 'Win 7 Perf'), ('Win x64 Builder', 'Win Zenbook Perf'), ) change = change_module.Change((change_module.Commit('src', 'git hash'), )) isolate.Put( (builder, change, 'telemetry_perf_tests', hex(hash(builder))) for builder, _ in builder_testers) for builder, tester in builder_testers: quest = find_isolate.FindIsolate(tester, 'telemetry_perf_tests') execution = quest.Start(change) execution.Poll() self.assertExecutionSuccess(execution) self.assertEqual(execution.result_arguments, {'isolate_hash': hex(hash(builder))})
def testSimultaneousBuilds(self, put, get_job_status): # Two builds started at the same time on the same Change should reuse the # same build request. change = change_module.Change( (change_module.Commit('src', 'base git hash'),)) quest = find_isolate.FindIsolate('Mac Builder', 'telemetry_perf_tests') execution_1 = quest.Start(change) execution_2 = quest.Start(change) # Request a build. put.return_value = {'build': {'id': 'build_id'}} execution_1.Poll() execution_2.Poll() self.assertFalse(execution_1.completed) self.assertFalse(execution_2.completed) self.assertEqual(put.call_count, 1) # Check build status. get_job_status.return_value = {'build': {'status': 'STARTED'}} execution_1.Poll() execution_2.Poll() self.assertFalse(execution_1.completed) self.assertFalse(execution_2.completed) self.assertEqual(get_job_status.call_count, 2) # Look up isolate hash. isolate.Put((('Mac Builder', change, 'telemetry_perf_tests', 'isolate git hash'),)) execution_1.Poll() execution_2.Poll() self.assertExecutionSuccess(execution_1) self.assertExecutionSuccess(execution_2)
def testCompletedDoesNotReopen(self, differences, result_values, patch_as_dict): commits = (change.Commit('chromium', 'git_hash'), ) patch = change.GerritPatch('https://codereview.com', 672011, '2f0d5c7') c = change.Change(commits, patch) differences.return_value = [(None, c)] result_values.side_effect = [40], [20] patch_as_dict.return_value = { 'url': 'https://codereview.com/c/672011/2f0d5c7', 'author': '*****@*****.**', 'subject': 'Subject.', 'message': 'Subject.\n\nCommit message.', } self.get_issue.return_value = {'status': 'Fixed'} j = job.Job.New((), (), bug_id=123456, comparison_mode='performance') j.Run() self.ExecuteDeferredTasks('default') self.assertFalse(j.failed) self.add_bug_comment.assert_called_once_with( 123456, mock.ANY, owner=None, status=None, cc_list=['*****@*****.**'], labels=mock.ANY, merge_issue=None, project='chromium') message = self.add_bug_comment.call_args[0][1] self.assertIn('10 revisions compared', message) labels = self.add_bug_comment.call_args[1]['labels'] self.assertIn('Pinpoint-Job-Completed', labels) self.assertNotIn('-Pinpoint-Job-Completed', labels) self.assertIn('Pinpoint-Culprit-Found', labels) self.assertNotIn('-Pinpoint-Culprit-Found', labels)
def testCompletedDoesNotReassign( self, differences, result_values, patch_as_dict): commits = (change.Commit('chromium', 'git_hash'),) patch = change.GerritPatch('https://codereview.com', 672011, '2f0d5c7') c = change.Change(commits, patch) c = change.Change(commits, patch) differences.return_value = [(None, c)] result_values.side_effect = [40], [20] patch_as_dict.return_value = { 'url': 'https://codereview.com/c/672011/2f0d5c7', 'author': '*****@*****.**', 'subject': 'Subject.', 'message': 'Subject.\n\nCommit message.', } self.get_issue.return_value = {'status': 'Assigned'} j = job.Job.New((), (), bug_id=123456, comparison_mode='performance') j.Run() self.ExecuteDeferredTasks('default') self.assertFalse(j.failed) self.add_bug_comment.assert_called_once_with( 123456, _COMMENT_COMPLETED_WITH_PATCH, owner=None, status=None, cc_list=['*****@*****.**'], labels=['Pinpoint-Culprit-Found'], merge_issue=None, project='chromium')
def testCompletedWithAutoroll( self, differences, result_values, commit_as_dict): c = change.Change((change.Commit('chromium', 'git_hash'),)) differences.return_value = [(None, c)] result_values.side_effect = [20], [30] commit_as_dict.return_value = { 'repository': 'chromium', 'git_hash': 'git_hash', 'url': 'https://example.com/repository/+/git_hash', 'author': '*****@*****.**', 'subject': 'Subject.', 'message': 'Subject.\n\nCommit message.\n\[email protected]', } self.get_issue.return_value = {'status': 'Untriaged'} j = job.Job.New((), (), bug_id=123456, comparison_mode='performance') j.put() j.Run() self.ExecuteDeferredTasks('default') self.assertFalse(j.failed) self.add_bug_comment.assert_called_once_with( 123456, _COMMENT_COMPLETED_WITH_AUTOROLL_COMMIT, status='Assigned', owner='*****@*****.**', cc_list=['*****@*****.**'], labels=['Pinpoint-Culprit-Found'], merge_issue=None, project='chromium')
def testCompletedMergeIntoExisting( self, differences, result_values, commit_as_dict): c = change.Change((change.Commit('chromium', 'git_hash'),)) differences.return_value = [(None, c)] result_values.side_effect = [0], [1.23456] commit_as_dict.return_value = { 'repository': 'chromium', 'git_hash': 'git_hash', 'author': '*****@*****.**', 'subject': 'Subject.', 'url': 'https://example.com/repository/+/git_hash', 'message': 'Subject.\n\nCommit message.', } self.get_issue.return_value = { 'status': 'Untriaged', 'id': '111222', 'projectId': 'chromium' } layered_cache.SetExternal('commit_hash_git_hash', 'chromium:111222') j = job.Job.New((), (), bug_id=123456, comparison_mode='performance') j.Run() self.ExecuteDeferredTasks('default') self.assertFalse(j.failed) self.add_bug_comment.assert_called_once_with( 123456, _COMMENT_COMPLETED_WITH_COMMIT, status='Assigned', owner='*****@*****.**', cc_list=[], labels=['Pinpoint-Culprit-Found'], merge_issue='111222', project='chromium')
def testCompletedWithCommitAndDocs( self, differences, result_values, commit_as_dict): c = change.Change((change.Commit('chromium', 'git_hash'),)) differences.return_value = [(None, c)] result_values.side_effect = [1.23456], [0] commit_as_dict.return_value = { 'repository': 'chromium', 'git_hash': 'git_hash', 'url': 'https://example.com/repository/+/git_hash', 'author': '*****@*****.**', 'subject': 'Subject.', 'message': 'Subject.\n\nCommit message.', } self.get_issue.return_value = {'status': 'Untriaged'} j = job.Job.New( (), (), bug_id=123456, comparison_mode='performance', tags={'test_path': 'master/bot/benchmark'}) diag_dict = generic_set.GenericSet([[u'Benchmark doc link', u'http://docs']]) diag = histogram.SparseDiagnostic( data=diag_dict.AsDict(), start_revision=1, end_revision=sys.maxsize, name=reserved_infos.DOCUMENTATION_URLS.name, test=utils.TestKey('master/bot/benchmark')) diag.put() j.Run() self.ExecuteDeferredTasks('default') self.assertFalse(j.failed) self.add_bug_comment.assert_called_once_with( 123456, _COMMENT_COMPLETED_WITH_COMMIT_AND_DOCS, status='Assigned', owner='*****@*****.**', labels=['Pinpoint-Culprit-Found'], cc_list=['*****@*****.**'], merge_issue=None, project='chromium')
def testCompletedWithCommit(self, differences, result_values, commit_as_dict): c = change.Change((change.Commit('chromium', 'git_hash'), )) differences.return_value = [(None, c)] result_values.side_effect = [0], [1.23456] commit_as_dict.return_value = { 'repository': 'chromium', 'git_hash': 'git_hash', 'url': 'https://example.com/repository/+/git_hash', 'author': '*****@*****.**', 'subject': 'Subject.', 'message': 'Subject.\n\nCommit message.', } self.get_issue.return_value = {'status': 'Untriaged'} j = job.Job.New((), (), bug_id=123456, comparison_mode='performance') j.Run() self.ExecuteDeferredTasks('default') self.assertFalse(j.failed) self.add_bug_comment.assert_called_once_with( 123456, _COMMENT_COMPLETED_WITH_COMMIT, status='Assigned', owner='*****@*****.**', cc_list=['*****@*****.**'], merge_issue=None)
def testCompletedWithAutoroll(self, differences, commit_as_dict): c = change.Change((change.Commit('chromium', 'git_hash'), )) differences.return_value = [(None, c, [0], [1.23456])] commit_as_dict.return_value = { 'repository': 'chromium', 'git_hash': 'git_hash', 'author': '*****@*****.**', 'subject': 'Subject.', 'reviewers': ['*****@*****.**'], 'url': 'https://example.com/repository/+/git_hash', 'tbr': '*****@*****.**', } self.get_issue.return_value = {'status': 'Untriaged'} j = job.Job.New((), (), bug_id=123456, comparison_mode='performance') j.put() j.Run() self.add_bug_comment.assert_called_once_with( 123456, _COMMENT_COMPLETED_WITH_AUTOROLL_COMMIT, status='Assigned', owner='*****@*****.**', cc_list=['*****@*****.**'])
def setUp(self): super(_FindIsolateExecutionTest, self).setUp() change = change_module.Change( (change_module.Commit('chromium', 'f9f2b720'), )) isolate.Put( 'https://isolate.server', (('Mac Builder', change, 'telemetry_perf_tests', '7c7e90be'), ))
def testCompletedMultipleDifferences(self, differences, commit_info): c1 = change.Change((change.Commit('chromium', 'git_hash_1'), )) c2 = change.Change((change.Commit('chromium', 'git_hash_2'), )) differences.return_value = [(1, c1), (2, c2)] commit_info.side_effect = ( { 'author': { 'email': '*****@*****.**' }, 'committer': { 'time': 'Fri Jan 01 00:01:00 2016' }, 'message': 'Subject.\n\n' 'Commit message.\n' 'Reviewed-by: Reviewer Name <*****@*****.**>', }, { 'author': { 'email': '*****@*****.**' }, 'committer': { 'time': 'Fri Jan 02 00:01:00 2016' }, 'message': 'Subject.\n\n' 'Commit message.\n' 'Reviewed-by: Reviewer Name <*****@*****.**>\n' 'Reviewed-by: Reviewer Name <*****@*****.**>', }, ) j = job.Job.New({}, [], False, bug_id=123456) j.put() j.Run() self.add_bug_comment.assert_called_once_with( 123456, _COMMENT_COMPLETED_TWO_DIFFERENCES, status='Assigned', owner='*****@*****.**', cc_list=[ '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**' ])
def testBuildLifecycle(self, put, get_job_status): change = change_module.Change( (change_module.Commit('src', 'base git hash'), change_module.Commit('v8', 'dep git hash')), patch=change_module.Patch('https://example.org', 2565263002, 20001)) quest = find_isolate.FindIsolate('Mac Pro Perf', 'telemetry_perf_tests') execution = quest.Start(change) # Request a build. put.return_value = {'build': {'id': 'build_id'}} execution.Poll() self.assertFalse(execution.completed) put.assert_called_once_with( find_isolate.BUCKET, { 'builder_name': 'Mac Builder', 'properties': { 'clobber': True, 'parent_got_revision': 'base git hash', 'deps_revision_overrides': { 'https://chromium.googlesource.com/v8/v8': 'dep git hash', }, 'patch_storage': 'rietveld', 'rietveld': 'https://example.org', 'issue': 2565263002, 'patchset': 20001, } }) # Check build status. get_job_status.return_value = {'build': {'status': 'STARTED'}} execution.Poll() self.assertFalse(execution.completed) get_job_status.assert_called_once_with('build_id') # Look up isolate hash. isolate.Put((('Mac Builder', change, 'telemetry_perf_tests', 'isolate git hash'), )) execution.Poll() self.assertExecutionSuccess(execution)
def ReconstituteChange(change_dict): return change_module.Change( commits=[ change_module.Commit( repository=commit.get('repository'), git_hash=commit.get('git_hash')) for commit in change_dict.get('commits') ], patch=change_dict.get('patch'))
def testCompletedSkipsMergeWhenDuplicate(self, differences, result_values, commit_as_dict): c = change.Change((change.Commit('chromium', 'git_hash'), )) differences.return_value = [(None, c)] result_values.side_effect = [0], [1.23456] commit_as_dict.return_value = { 'repository': 'chromium', 'git_hash': 'git_hash', 'author': '*****@*****.**', 'subject': 'Subject.', 'url': 'https://example.com/repository/+/git_hash', 'message': 'Subject.\n\nCommit message.', } def _GetIssue(bug_id, project='chromium'): if bug_id == '111222': return { 'status': 'Duplicate', 'projectId': project, 'id': '111222' } else: return { 'status': 'Untriaged', 'projectId': project, 'id': str(bug_id) } self.get_issue.side_effect = _GetIssue layered_cache.SetExternal('commit_hash_git_hash', 'chromium:111222') j = job.Job.New((), (), bug_id=123456, comparison_mode='performance', project='chromium') j.Run() self.ExecuteDeferredTasks('default') self.assertFalse(j.failed) self.add_bug_comment.assert_called_once_with( 123456, mock.ANY, status='Assigned', owner='*****@*****.**', labels=mock.ANY, cc_list=['*****@*****.**'], merge_issue=None, project='chromium') message = self.add_bug_comment.call_args[0][1] self.assertIn('Found a significant difference at 1 commit.', message) self.assertIn('https://example.com/repository/+/git_hash', message) labels = self.add_bug_comment.call_args[1]['labels'] self.assertIn('Pinpoint-Job-Completed', labels) self.assertNotIn('-Pinpoint-Job-Completed', labels) self.assertIn('Pinpoint-Culprit-Found', labels) self.assertNotIn('-Pinpoint-Culprit-Found', labels)
def testCompletedMultipleDifferences(self, differences, commit_as_dict): c1 = change.Change((change.Commit('chromium', 'git_hash_1'), )) c2 = change.Change((change.Commit('chromium', 'git_hash_2'), )) differences.return_value = [(1, c1), (2, c2)] commit_as_dict.side_effect = ( { 'repository': 'chromium', 'git_hash': 'git_hash_1', 'author': '*****@*****.**', 'subject': 'Subject.', 'reviewers': ['*****@*****.**'], 'url': 'https://example.com/repository/+/git_hash_1', }, { 'repository': 'chromium', 'git_hash': 'git_hash_2', 'author': '*****@*****.**', 'subject': 'Subject.', 'reviewers': ['*****@*****.**', '*****@*****.**'], 'url': 'https://example.com/repository/+/git_hash_2', }, ) self.get_issue.return_value = {'status': 'Untriaged'} j = job.Job.New({}, [], True, bug_id=123456) j.put() j.Run() self.add_bug_comment.assert_called_once_with( 123456, _COMMENT_COMPLETED_TWO_DIFFERENCES, status='Assigned', owner='*****@*****.**', cc_list=[ '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**' ])
def testCompletedMultipleDifferences_BlameAbsoluteLargest( self, differences, result_values, commit_as_dict): c1 = change.Change((change.Commit('chromium', 'git_hash_1'), )) c2 = change.Change((change.Commit('chromium', 'git_hash_2'), )) c3 = change.Change((change.Commit('chromium', 'git_hash_3'), )) change_map = {c1: [10], c2: [0], c3: [-100]} differences.return_value = [(None, c1), (c1, c2), (c2, c3)] result_values.side_effect = lambda c: change_map.get(c, []) commit_as_dict.side_effect = FakeCommitAsDict self.get_issue.return_value = {'status': 'Untriaged'} j = job.Job.New((), (), bug_id=123456, comparison_mode='performance') j.Run() self.ExecuteDeferredTasks('default') self.assertFalse(j.failed) # We now only CC folks from the top commit. self.add_bug_comment.assert_called_once_with( 123456, mock.ANY, status='Assigned', owner='*****@*****.**', cc_list=['*****@*****.**'], labels=mock.ANY, merge_issue=None, project='chromium') message = self.add_bug_comment.call_args[0][1] self.assertIn('Found significant differences at 2 commits.', message) self.assertIn('https://example.com/repository/+/git_hash_3', message) self.assertIn('https://example.com/repository/+/git_hash_2', message) self.assertIn('https://example.com/repository/+/git_hash_1', message) labels = self.add_bug_comment.call_args[1]['labels'] self.assertIn('Pinpoint-Job-Completed', labels) self.assertNotIn('-Pinpoint-Job-Completed', labels) self.assertIn('Pinpoint-Multiple-Culprits', labels) self.assertNotIn('-Pinpoint-Multiple-Culprits', labels) self.assertIn('Pinpoint-Multiple-MissingValues', labels) self.assertNotIn('-Pinpoint-Multiple-MissingValues', labels)
def testBuildSucceededButIsolateIsMissing(self, put, get_job_status): change = change_module.Change( (change_module.Commit('src', 'base git hash'), change_module.Commit('v8', 'dep git hash')), patch=change_module.Patch('https://example.org', 2565263002, 20001)) quest = find_isolate.FindIsolate('Mac Pro Perf', 'telemetry_perf_tests') execution = quest.Start(change) # Request a build. put.return_value = {'build': {'id': 'build_id'}} execution.Poll() # Check build status. get_job_status.return_value = { 'build': { 'status': 'COMPLETED', 'result': 'SUCCESS', } } execution.Poll() self.assertExecutionFailure(execution, find_isolate.BuildError)
def testIsolateLookupSuccess(self): change = change_module.Change((change_module.Commit('src', 'f9f2b720'),)) quest = find_isolate.FindIsolate('Mac Builder', 'telemetry_perf_tests') execution = quest.Start(change) execution.Poll() self.assertExecutionSuccess(execution) self.assertEqual(execution.result_values, ()) self.assertEqual(execution.result_arguments, {'isolate_hash': '7c7e90be'}) self.assertEqual( { 'completed': True, 'exception': None, 'details': {'build': None, 'builder': 'Mac Builder'}, 'result_arguments': {'isolate_hash': u'7c7e90be'}, 'result_values': (), }, execution.AsDict())
def testBuildSucceededButIsolateIsMissing(self, put, get_job_status): change = change_module.Change( (change_module.Commit('chromium', 'base git hash'), )) quest = find_isolate.FindIsolate('Mac Builder', 'telemetry_perf_tests') execution = quest.Start(change) # Request a build. put.return_value = {'build': {'id': 'build_id'}} execution.Poll() # Check build status. get_job_status.return_value = { 'build': { 'status': 'COMPLETED', 'result': 'SUCCESS', } } with self.assertRaises(find_isolate.IsolateNotFoundError): execution.Poll()