def testSendNotificationForCulprit(self, mock_post, _): repo_name = 'chromium' revision = 'rev1' revert_status = None culprit = WfSuspectedCL.Create(repo_name, revision, 123) culprit.put() culprit_link = culprit.GetCulpritLink() false_positive_bug_link = gerrit.CreateFinditWrongBugLink( gerrit.FINDIT_BUILD_FAILURE_COMPONENT, culprit_link, revision) parameters = SendNotificationForCulpritParameters( cl_key=culprit.key.urlsafe(), force_notify=False, revert_status=revert_status, failure_type=failure_type.COMPILE) self.assertTrue( gerrit.SendNotificationForCulprit(parameters, self.codereview_info)) message = textwrap.dedent(""" Findit (https://goo.gl/kROfz5) %s this CL at revision %s as the culprit for failures in the build cycles as shown on: https://analysis.chromium.org/waterfall/culprit?key=%s If it is a false positive, please report it at %s.""") % ( 'identified', self.culprit_commit_position, culprit.key.urlsafe(), false_positive_bug_link) mock_post.assert_called_once_with(self.review_change_id, message, True)
def SendNotificationForCulprit(parameters): culprit = entity_util.GetEntityFromUrlsafeKey(parameters.cl_key) assert culprit revision = culprit.revision repo_name = culprit.repo_name force_notify = parameters.force_notify revert_status = parameters.revert_status sent = False should_send = False action_settings = waterfall_config.GetActionSettings() # Set some impossible default values to prevent notification by default. build_num_threshold = action_settings.get( 'cr_notification_build_threshold', 100000) if _ShouldSendNotification(repo_name, revision, force_notify, revert_status, build_num_threshold): should_send = True codereview_info = GetCodeReviewDataForACulprit(parameters.cl_key) sent = gerrit.SendNotificationForCulprit(parameters, codereview_info) MonitoringCulpritNotification(parameters.failure_type, 'culprit', sent, should_send) return sent
def testSendNotificationForCulpritNoCodeReview(self, _): repo_name = 'chromium' revision = 'rev1' revert_status = services_constants.CREATED_BY_SHERIFF culprit = WfSuspectedCL.Create(repo_name, revision, 123) culprit.put() parameters = SendNotificationForCulpritParameters( cl_key=culprit.key.urlsafe(), force_notify=False, revert_status=revert_status, failure_type=failure_type.COMPILE) self.assertFalse( gerrit.SendNotificationForCulprit(parameters, self.codereview_info))