def testSubmitRevertSucceed(self, mock_fn, mock_commit, *_): repo_name = 'chromium' revision = 'rev1' commit_position = 123 cl_info = ClInfo(self.review_server_host, self.review_change_id) cl_info.commits.append( Commit('20001', 'rev1', [], datetime(2017, 2, 1, 0, 0, 0))) mock_fn.return_value = cl_info mock_commit.return_value = True culprit = WfSuspectedCL.Create(repo_name, revision, commit_position) revert = RevertCL() revert_change_id = '54321' revert.revert_cl_url = 'https://%s/q/%s' % (self.review_server_host, revert_change_id) culprit.revert_cl = revert culprit.revert_status = status.COMPLETED culprit.put() revert_status = constants.CREATED_BY_FINDIT pipeline_input = SubmitRevertCLParameters( cl_key=culprit.key.urlsafe(), revert_status=revert_status, failure_type=failure_type.COMPILE) pipeline = SubmitRevertCLPipeline(pipeline_input) self.assertEqual(constants.COMMITTED, pipeline.run(pipeline_input)) culprit = WfSuspectedCL.Get(repo_name, revision) self.assertEqual(culprit.revert_submission_status, status.COMPLETED) mock_commit.assert_called_with(revert_change_id)
def testLogUnexpectedAbortingPipelineIdNotMatch(self): repo_name = 'chromium' revision = 'rev1' culprit = WfSuspectedCL.Create(repo_name, revision, 123) culprit.submit_revert_pipeline_id = 'pipeline_id' culprit.put() revert_status = constants.CREATED_BY_FINDIT pipeline_input = SubmitRevertCLParameters( cl_key=culprit.key.urlsafe(), revert_status=revert_status, failure_type=failure_type.COMPILE) pipeline = SubmitRevertCLPipeline(pipeline_input) pipeline.start_test() pipeline.OnAbort(pipeline_input) culprit = WfSuspectedCL.Get(repo_name, revision) self.assertEqual(culprit.submit_revert_pipeline_id, 'pipeline_id')
def testLogUnexpectedAborting(self): repo_name = 'chromium' revision = 'rev1' culprit = WfSuspectedCL.Create(repo_name, revision, 123) culprit.revert_submission_status = status.RUNNING culprit.put() revert_status = constants.CREATED_BY_FINDIT pipeline_input = SubmitRevertCLParameters( cl_key=culprit.key.urlsafe(), revert_status=revert_status, failure_type=failure_type.COMPILE) SubmitRevertCLPipeline(pipeline_input).OnAbort(pipeline_input) culprit = WfSuspectedCL.Get(repo_name, revision) self.assertEquals(culprit.revert_submission_status, status.ERROR)
def RunImpl(self, pipeline_input): culprits_should_take_actions = ( test_culprit_action.GetCulpritsShouldTakeActions(pipeline_input)) if not culprits_should_take_actions: return master_name, builder_name, build_number = ( pipeline_input.build_key.GetParts()) build_key = BaseBuildModel.CreateBuildKey(master_name, builder_name, build_number) culprits = pipeline_input.culprits build_failure_type = failure_type.TEST for culprit_revision in culprits_should_take_actions: culprit_key = culprits.get(culprit_revision) assert culprit_key, ( 'Failed to get culprit_key for culprit {} when analyzing failures' ' at build {}/{}/{}'.format(culprit_revision, master_name, builder_name, build_number)) revert_status = constants.SKIPPED if test_culprit_action.CanAutoCreateRevert( culprit_key, pipeline_input): # pragma: no branch. revert_status = yield CreateRevertCLPipeline( CreateRevertCLParameters(cl_key=culprit_key, build_key=build_key, failure_type=build_failure_type)) if test_culprit_action.CanAutoCommitRevertByFindit(): submit_revert_pipeline_input = self.CreateInputObjectInstance( SubmitRevertCLParameters, cl_key=culprit_key, revert_status=revert_status, failure_type=build_failure_type) yield SubmitRevertCLPipeline(submit_revert_pipeline_input) # Checks if any of the culprits was also found by heuristic analysis, # if so send notification right away. send_notification_to_culprit_input = self.CreateInputObjectInstance( SendNotificationForCulpritParameters, cl_key=culprit_key, force_notify=culprit_action.ShouldForceNotify( culprit_key, pipeline_input), revert_status=revert_status, failure_type=build_failure_type) yield SendNotificationForCulpritPipeline( send_notification_to_culprit_input)
def RunImpl(self, pipeline_input): if not compile_culprit_action.ShouldTakeActionsOnCulprit( pipeline_input): return master_name, builder_name, build_number = ( pipeline_input.build_key.GetParts()) culprits = pipeline_input.culprits culprit = culprits.values()[0] force_notify = culprit_action.ShouldForceNotify( culprit, pipeline_input) build_key = BaseBuildModel.CreateBuildKey(master_name, builder_name, build_number) build_failure_type = failure_type.COMPILE revert_status = constants.SKIPPED commit_status = constants.SKIPPED if compile_culprit_action.CanAutoCreateRevert(): revert_status = yield CreateRevertCLPipeline( CreateRevertCLParameters(cl_key=culprit, build_key=build_key, failure_type=build_failure_type)) if compile_culprit_action.CanAutoCommitRevertByFindit(): submit_revert_pipeline_input = self.CreateInputObjectInstance( SubmitRevertCLParameters, cl_key=culprit, revert_status=revert_status, failure_type=build_failure_type) commit_status = yield SubmitRevertCLPipeline( submit_revert_pipeline_input) send_notification_to_irc_input = self.CreateInputObjectInstance( SendNotificationToIrcParameters, cl_key=culprit, revert_status=revert_status, commit_status=commit_status, failure_type=build_failure_type) yield SendNotificationToIrcPipeline(send_notification_to_irc_input) send_notification_to_culprit_input = self.CreateInputObjectInstance( SendNotificationForCulpritParameters, cl_key=culprit, force_notify=force_notify, revert_status=revert_status, failure_type=build_failure_type) yield SendNotificationForCulpritPipeline( send_notification_to_culprit_input)