Example #1
0
    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')
Example #2
0
    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)
Example #3
0
    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)
Example #4
0
    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)))
Example #6
0
    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)
Example #7
0
    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=['*****@*****.**', '*****@*****.**'])
Example #8
0
    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')
Example #9
0
 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)
Example #10
0
  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)
Example #12
0
    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)
Example #14
0
 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)
Example #15
0
 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')
Example #16
0
  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')
Example #17
0
 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')
Example #18
0
 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')
Example #19
0
    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)
Example #20
0
    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'), ))
Example #22
0
    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=[
                '*****@*****.**', '*****@*****.**',
                '*****@*****.**', '*****@*****.**'
            ])
Example #23
0
    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)
Example #24
0
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'))
Example #25
0
    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)
Example #26
0
    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=[
                '*****@*****.**', '*****@*****.**',
                '*****@*****.**', '*****@*****.**'
            ])
Example #27
0
    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)
Example #28
0
    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()