From d953e9749d7f3b6def56f38382dac43a58e7f628 Mon Sep 17 00:00:00 2001 From: Janos Gyerik Date: Wed, 18 Jan 2017 17:00:43 +0100 Subject: [PATCH] SONARGITUB-26 set status even when unexpected errors (#27) --- .../github/PullRequestIssuePostJob.java | 21 ++++++++++++++----- .../github/PullRequestIssuePostJobTest.java | 11 ++++++++++ 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/sonar/plugins/github/PullRequestIssuePostJob.java b/src/main/java/org/sonar/plugins/github/PullRequestIssuePostJob.java index 976182f..3b00311 100644 --- a/src/main/java/org/sonar/plugins/github/PullRequestIssuePostJob.java +++ b/src/main/java/org/sonar/plugins/github/PullRequestIssuePostJob.java @@ -23,17 +23,22 @@ import java.util.HashMap; import java.util.Map; import java.util.stream.StreamSupport; +import org.kohsuke.github.GHCommitState; import org.sonar.api.batch.fs.InputComponent; import org.sonar.api.batch.fs.InputFile; import org.sonar.api.batch.postjob.PostJob; import org.sonar.api.batch.postjob.PostJobContext; import org.sonar.api.batch.postjob.PostJobDescriptor; import org.sonar.api.batch.postjob.issue.PostJobIssue; +import org.sonar.api.utils.log.Logger; +import org.sonar.api.utils.log.Loggers; /** * Compute comments to be added on the pull request. */ public class PullRequestIssuePostJob implements PostJob { + private static final Logger LOG = Loggers.get(PullRequestFacade.class); + private static final Comparator ISSUE_COMPARATOR = new IssueComparator(); private final PullRequestFacade pullRequestFacade; @@ -56,15 +61,21 @@ public void describe(PostJobDescriptor descriptor) { @Override public void execute(PostJobContext context) { GlobalReport report = new GlobalReport(markDownUtils, gitHubPluginConfiguration.tryReportIssuesInline()); - Map> commentsToBeAddedByLine = processIssues(report, context.issues()); + try { + Map> commentsToBeAddedByLine = processIssues(report, context.issues()); - updateReviewComments(commentsToBeAddedByLine); + updateReviewComments(commentsToBeAddedByLine); - pullRequestFacade.deleteOutdatedComments(); + pullRequestFacade.deleteOutdatedComments(); - pullRequestFacade.createOrUpdateGlobalComments(report.hasNewIssue() ? report.formatForMarkdown() : null); + pullRequestFacade.createOrUpdateGlobalComments(report.hasNewIssue() ? report.formatForMarkdown() : null); - pullRequestFacade.createOrUpdateSonarQubeStatus(report.getStatus(), report.getStatusDescription()); + pullRequestFacade.createOrUpdateSonarQubeStatus(report.getStatus(), report.getStatusDescription()); + } catch (Exception e) { + String msg = "SonarQube failed to complete the review of this pull request"; + LOG.error(msg, e); + pullRequestFacade.createOrUpdateSonarQubeStatus(GHCommitState.ERROR, msg + ": " + e.getMessage()); + } } private Map> processIssues(GlobalReport report, Iterable issues) { diff --git a/src/test/java/org/sonar/plugins/github/PullRequestIssuePostJobTest.java b/src/test/java/org/sonar/plugins/github/PullRequestIssuePostJobTest.java index 5bd11ab..d1317a3 100644 --- a/src/test/java/org/sonar/plugins/github/PullRequestIssuePostJobTest.java +++ b/src/test/java/org/sonar/plugins/github/PullRequestIssuePostJobTest.java @@ -225,4 +225,15 @@ public void testPullRequestAnalysisWithNewBlockerAndCriticalIssues() { verify(pullRequestFacade).createOrUpdateSonarQubeStatus(GHCommitState.ERROR, "SonarQube reported 2 issues, with 1 critical and 1 blocker"); } + + @Test + public void should_update_sonarqube_status_even_if_unexpected_errors_were_raised() { + String innerMsg = "Failed to get issues"; + // not really realistic unexpected error, but good enough for this test + when(context.issues()).thenThrow(new IllegalStateException(innerMsg)); + pullRequestIssuePostJob.execute(context); + + String msg = "SonarQube failed to complete the review of this pull request: " + innerMsg; + verify(pullRequestFacade).createOrUpdateSonarQubeStatus(GHCommitState.ERROR, msg); + } }