From 2a87f9a8efb518b1a5b6fa611bb0a694503c559c Mon Sep 17 00:00:00 2001 From: Duarte Meneses Date: Wed, 3 Apr 2019 11:38:14 +0200 Subject: [PATCH] SONAR-11858 Fix quality issues --- .../projectanalysis/issue/IssueLifecycle.java | 11 +- .../component/BranchPersisterImplTest.java | 2 +- .../step/LoadPeriodsStepTest.java | 120 ++++++------------ .../sonar/server/branch/pr/ws/ListAction.java | 1 + .../core/issue/tracking/AbstractTracker.java | 11 -- .../batch/fs/internal/StatusPredicate.java | 2 +- 6 files changed, 48 insertions(+), 99 deletions(-) diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/issue/IssueLifecycle.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/issue/IssueLifecycle.java index 55c4305918fb..89dd50d97e1d 100644 --- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/issue/IssueLifecycle.java +++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/issue/IssueLifecycle.java @@ -25,21 +25,21 @@ import java.util.Optional; import org.sonar.api.issue.Issue; import org.sonar.api.rules.RuleType; +import org.sonar.ce.task.projectanalysis.analysis.AnalysisMetadataHolder; import org.sonar.core.issue.DefaultIssue; import org.sonar.core.issue.DefaultIssueComment; import org.sonar.core.issue.FieldDiffs; import org.sonar.core.issue.IssueChangeContext; import org.sonar.core.util.Uuids; -import org.sonar.ce.task.projectanalysis.analysis.AnalysisMetadataHolder; import org.sonar.server.issue.IssueFieldsSetter; import org.sonar.server.issue.workflow.IssueWorkflow; /** * Sets the appropriate fields when an issue is : * */ public class IssueLifecycle { @@ -94,7 +94,8 @@ public void copyExistingOpenIssueFromLongLivingBranch(DefaultIssue raw, DefaultI public void mergeConfirmedOrResolvedFromShortLivingBranch(DefaultIssue raw, DefaultIssue base, String fromShortBranchName) { copyAttributesOfIssueFromOtherBranch(raw, base); - raw.setFieldChange(changeContext, IssueFieldsSetter.FROM_SHORT_BRANCH, fromShortBranchName, analysisMetadataHolder.isPullRequest() ? analysisMetadataHolder.getPullRequestKey() : analysisMetadataHolder.getBranch().getName()); + raw.setFieldChange(changeContext, IssueFieldsSetter.FROM_SHORT_BRANCH, fromShortBranchName, + analysisMetadataHolder.isPullRequest() ? analysisMetadataHolder.getPullRequestKey() : analysisMetadataHolder.getBranch().getName()); } private void copyAttributesOfIssueFromOtherBranch(DefaultIssue to, DefaultIssue from) { diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/component/BranchPersisterImplTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/component/BranchPersisterImplTest.java index cb4764c1b7ba..fb4e6a51e929 100644 --- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/component/BranchPersisterImplTest.java +++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/component/BranchPersisterImplTest.java @@ -62,7 +62,7 @@ public class BranchPersisterImplTest { @Rule public ExpectedException exception = ExpectedException.none(); - BranchPersister underTest = new BranchPersisterImpl(dbTester.getDbClient(), treeRootHolder, analysisMetadataHolder); + private BranchPersister underTest = new BranchPersisterImpl(dbTester.getDbClient(), treeRootHolder, analysisMetadataHolder); @Test public void persist_fails_with_ISE_if_no_component_for_main_branches() { diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/LoadPeriodsStepTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/LoadPeriodsStepTest.java index 2d219d0825cf..c2b3b13c6790 100644 --- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/LoadPeriodsStepTest.java +++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/LoadPeriodsStepTest.java @@ -63,6 +63,7 @@ import static org.apache.commons.lang.RandomStringUtils.randomAlphanumeric; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.fail; +import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; @@ -139,7 +140,7 @@ public void feed_one_period() { when(system2Mock.now()).thenReturn(november30th2008.getTime()); when(analysisMetadataHolder.isFirstAnalysis()).thenReturn(false); setupRoot(project); - setupBranchWithNoManualBaseline(analysisMetadataHolder, project); + setupBranchWithNoManualBaseline(project); String textDate = "2008-11-22"; settings.setProperty("sonar.leak.period", textDate); @@ -161,7 +162,7 @@ public void ignore_unprocessed_snapshots() { when(analysisMetadataHolder.getAnalysisDate()).thenReturn(november30th2008.getTime()); when(analysisMetadataHolder.isFirstAnalysis()).thenReturn(false); setupRoot(project); - setupBranchWithNoManualBaseline(analysisMetadataHolder, project); + setupBranchWithNoManualBaseline(project); settings.setProperty("sonar.leak.period", "100"); underTest.execute(new TestComputationStepContext()); @@ -182,7 +183,7 @@ public void feed_period_by_date() { when(system2Mock.now()).thenReturn(november30th2008.getTime()); when(analysisMetadataHolder.isFirstAnalysis()).thenReturn(false); setupRoot(project); - setupBranchWithNoManualBaseline(analysisMetadataHolder, project); + setupBranchWithNoManualBaseline(project); String textDate = "2008-11-22"; settings.setProperty("sonar.leak.period", textDate); @@ -209,7 +210,7 @@ public void feed_period_by_date_and_ignore_baseline_when_not_eligible_for_manual dbTester.commit(); when(system2Mock.now()).thenReturn(november30th2008.getTime()); when(analysisMetadataHolder.isFirstAnalysis()).thenReturn(false); - when(analysisMetadataHolder.getBranch()).thenReturn(branchOf(branch)); + setBranchOf(branch); setupRoot(branch); String textDate = "2008-11-22"; @@ -243,8 +244,7 @@ public void do_not_fail_when_project_has_no_BranchDto(String leakPeriodSettingVa when(system2Mock.now()).thenReturn(november30th2008.getTime()); when(analysisMetadataHolder.getAnalysisDate()).thenReturn(november30th2008.getTime()); when(analysisMetadataHolder.isFirstAnalysis()).thenReturn(false); - Branch branch = mockBranch(BranchType.LONG); - when(analysisMetadataHolder.getBranch()).thenReturn(branch); + setMetadataBranch(BranchType.LONG); setupRoot(project); settings.setProperty("sonar.leak.period", leakPeriodSettingValue); @@ -257,7 +257,7 @@ public void fail_with_ISE_when_manual_baseline_is_set_but_does_not_exist_in_DB(S OrganizationDto organization = dbTester.organizations().insert(); ComponentDto project = dbTester.components().insertMainBranch(organization); dbTester.components().setManualBaseline(project, new SnapshotDto().setUuid("nonexistent")); - when(analysisMetadataHolder.getBranch()).thenReturn(branchOf(project)); + setBranchOf(project); setupRoot(project); expectedException.expect(IllegalStateException.class); @@ -275,7 +275,7 @@ public void fail_with_ISE_when_manual_baseline_is_set_but_does_not_belong_to_cur ComponentDto otherProject = dbTester.components().insertMainBranch(organization); SnapshotDto otherProjectAnalysis = dbTester.components().insertSnapshot(otherProject); dbTester.components().setManualBaseline(project, otherProjectAnalysis); - when(analysisMetadataHolder.getBranch()).thenReturn(branchOf(project)); + setBranchOf(project); setupRoot(project); expectedException.expect(IllegalStateException.class); @@ -299,7 +299,7 @@ public void feed_period_by_manual_baseline_ignores_leak_period_setting(String le when(analysisMetadataHolder.getAnalysisDate()).thenReturn(november30th2008.getTime()); when(analysisMetadataHolder.isFirstAnalysis()).thenReturn(false); dbTester.components().setManualBaseline(project, manualBaselineAnalysis); - when(analysisMetadataHolder.getBranch()).thenReturn(branchOf(project)); + setBranchOf(project); setupRoot(project); settings.setProperty("sonar.leak.period", leakPeriodSettingValue); @@ -324,7 +324,7 @@ public void feed_period_by_manual_baseline_on_long_living_branch(String leakPeri when(analysisMetadataHolder.getAnalysisDate()).thenReturn(november30th2008.getTime()); when(analysisMetadataHolder.isFirstAnalysis()).thenReturn(false); dbTester.components().setManualBaseline(branch, manualBaselineAnalysis); - when(analysisMetadataHolder.getBranch()).thenReturn(branchOf(branch)); + setBranchOf(branch); setupRoot(branch); settings.setProperty("sonar.leak.period", leakPeriodSettingValue); @@ -355,7 +355,7 @@ public void feed_period_parameter_as_null_when_manual_baseline_has_no_version() ComponentDto project = dbTester.components().insertMainBranch(organization); SnapshotDto manualBaselineAnalysis = dbTester.components().insertSnapshot(project); dbTester.components().setManualBaseline(project, manualBaselineAnalysis); - when(analysisMetadataHolder.getBranch()).thenReturn(branchOf(project)); + setBranchOf(project); setupRoot(project); settings.setProperty("sonar.leak.period", "ignored"); @@ -371,7 +371,7 @@ public void feed_period_parameter_as_null_when_manual_baseline_has_same_project_ ComponentDto project = dbTester.components().insertMainBranch(organization); SnapshotDto manualBaselineAnalysis = dbTester.components().insertSnapshot(project, t -> t.setProjectVersion(version).setProjectVersion(version)); dbTester.components().setManualBaseline(project, manualBaselineAnalysis); - when(analysisMetadataHolder.getBranch()).thenReturn(branchOf(project)); + setBranchOf(project); setupRoot(project); settings.setProperty("sonar.leak.period", "ignored"); @@ -387,7 +387,7 @@ public void feed_no_period_parameter_as_projectVersion_when_manual_baseline_has_ ComponentDto project = dbTester.components().insertMainBranch(organization); SnapshotDto manualBaselineAnalysis = dbTester.components().insertSnapshot(project, t -> t.setProjectVersion(projectVersion)); dbTester.components().setManualBaseline(project, manualBaselineAnalysis); - when(analysisMetadataHolder.getBranch()).thenReturn(branchOf(project)); + setBranchOf(project); setupRoot(project); settings.setProperty("sonar.leak.period", "ignored"); @@ -405,7 +405,7 @@ public void feed_no_period_parameter_as_version_event_version_when_manual_baseli SnapshotDto manualBaselineAnalysis = dbTester.components().insertSnapshot(project, t -> t.setProjectVersion(projectVersion)); dbTester.events().insertEvent(EventTesting.newEvent(manualBaselineAnalysis).setCategory(CATEGORY_VERSION).setName(eventVersion)); dbTester.components().setManualBaseline(project, manualBaselineAnalysis); - when(analysisMetadataHolder.getBranch()).thenReturn(branchOf(project)); + setBranchOf(project); setupRoot(project); settings.setProperty("sonar.leak.period", "ignored"); @@ -422,60 +422,18 @@ public static Object[][] projectVersionNullOrNot() { }; } - private Branch branchOf(ComponentDto project) { + private Branch setBranchOf(ComponentDto project) { BranchDto branchDto = dbTester.getDbClient().branchDao().selectByUuid(dbTester.getSession(), project.uuid()).get(); - return new Branch() { - @Override - public BranchType getType() { - return branchDto.getBranchType(); - } - - @Override - public boolean isMain() { - throw new UnsupportedOperationException("isMain not implemented"); - } - - @Override - public boolean isLegacyFeature() { - throw new UnsupportedOperationException("isLegacyFeature not implemented"); - } - - @Override - public String getName() { - throw new UnsupportedOperationException("getName not implemented"); - } - - @Override - public String getMergeBranchUuid() { - throw new UnsupportedOperationException("getMergeBranchUuid not implemented"); - } - - @Override - public boolean supportsCrossProjectCpd() { - throw new UnsupportedOperationException("supportsCrossProjectCpd not implemented"); - } - - @Override - public String getPullRequestKey() { - throw new UnsupportedOperationException("getPullRequestKey not implemented"); - } - - @Override - public String getTargetBranchName() { - throw new UnsupportedOperationException(); - } - - @Override - public String generateKey(String projectKey, @Nullable String fileOrDirPath) { - throw new UnsupportedOperationException("generateKey not implemented"); - } - }; + return setMetadataBranch(branchDto.getBranchType()); } - private Branch mockBranch(BranchType branchType) { - Branch mock = mock(Branch.class); - when(mock.getType()).thenReturn(branchType); - return mock; + private Branch setMetadataBranch(BranchType branchType) { + Branch branch = mock(Branch.class, invoc -> { + throw new UnsupportedOperationException(); + }); + doReturn(branchType).when(branch).getType(); + when(analysisMetadataHolder.getBranch()).thenReturn(branch); + return branch; } @Test @@ -490,7 +448,7 @@ public void search_by_date_return_nearest_later_analysis() { when(system2Mock.now()).thenReturn(november30th2008.getTime()); when(analysisMetadataHolder.isFirstAnalysis()).thenReturn(false); setupRoot(project); - setupBranchWithNoManualBaseline(analysisMetadataHolder, project); + setupBranchWithNoManualBaseline(project); String date = "2008-11-13"; settings.setProperty("sonar.leak.period", date); @@ -509,7 +467,7 @@ public void fail_with_MessageException_if_period_is_date_after_today() { when(system2Mock.now()).thenReturn(november30th2008.getTime()); when(analysisMetadataHolder.isFirstAnalysis()).thenReturn(false); setupRoot(project); - setupBranchWithNoManualBaseline(analysisMetadataHolder, project); + setupBranchWithNoManualBaseline(project); String propertyValue = "2008-12-01"; settings.setProperty("sonar.leak.period", propertyValue); @@ -525,7 +483,7 @@ public void fail_with_MessageException_if_date_does_not_exist() { when(system2Mock.now()).thenReturn(november30th2008.getTime()); when(analysisMetadataHolder.isFirstAnalysis()).thenReturn(false); setupRoot(project); - setupBranchWithNoManualBaseline(analysisMetadataHolder, project); + setupBranchWithNoManualBaseline(project); String propertyValue = "2008-11-31"; settings.setProperty("sonar.leak.period", propertyValue); @@ -541,7 +499,7 @@ public void fail_with_MessageException_if_period_is_today_but_no_analysis_today( when(system2Mock.now()).thenReturn(november30th2008.getTime()); when(analysisMetadataHolder.isFirstAnalysis()).thenReturn(false); setupRoot(project); - setupBranchWithNoManualBaseline(analysisMetadataHolder, project); + setupBranchWithNoManualBaseline(project); String propertyValue = "2008-11-30"; settings.setProperty("sonar.leak.period", propertyValue); @@ -558,7 +516,7 @@ public void fail_with_MessageException_if_period_is_0_or_less(int zeroOrLess) { when(system2Mock.now()).thenReturn(november30th2008.getTime()); when(analysisMetadataHolder.isFirstAnalysis()).thenReturn(false); setupRoot(project); - setupBranchWithNoManualBaseline(analysisMetadataHolder, project); + setupBranchWithNoManualBaseline(project); String propertyValue = String.valueOf(zeroOrLess); settings.setProperty("sonar.leak.period", propertyValue); @@ -581,7 +539,7 @@ public void fail_with_ISE_if_not_firstAnalysis_but_no_snapshot_in_DB() { when(system2Mock.now()).thenReturn(november30th2008.getTime()); when(analysisMetadataHolder.isFirstAnalysis()).thenReturn(false); setupRoot(project); - setupBranchWithNoManualBaseline(analysisMetadataHolder, project); + setupBranchWithNoManualBaseline(project); settings.setProperty("sonar.leak.period", "previous_version"); expectedException.expect(IllegalStateException.class); @@ -606,7 +564,7 @@ public void fail_with_MessageException_if_string_is_not_an_existing_version_even when(system2Mock.now()).thenReturn(november30th2008.getTime()); when(analysisMetadataHolder.isFirstAnalysis()).thenReturn(false); setupRoot(project); - setupBranchWithNoManualBaseline(analysisMetadataHolder, project); + setupBranchWithNoManualBaseline(project); settings.setProperty("sonar.leak.period", propertyValue); try { @@ -680,7 +638,7 @@ public void feed_period_by_days() { when(analysisMetadataHolder.getAnalysisDate()).thenReturn(november30th2008.getTime()); when(analysisMetadataHolder.isFirstAnalysis()).thenReturn(false); setupRoot(project); - setupBranchWithNoManualBaseline(analysisMetadataHolder, project); + setupBranchWithNoManualBaseline(project); settings.setProperty("sonar.leak.period", "10"); underTest.execute(new TestComputationStepContext()); @@ -709,7 +667,7 @@ public void feed_period_by_previous_version() { when(system2Mock.now()).thenReturn(november30th2008.getTime()); when(analysisMetadataHolder.isFirstAnalysis()).thenReturn(false); setupRoot(project, "1.1"); - setupBranchWithNoManualBaseline(analysisMetadataHolder, project); + setupBranchWithNoManualBaseline(project); settings.setProperty("sonar.leak.period", "previous_version"); underTest.execute(new TestComputationStepContext()); @@ -733,7 +691,7 @@ public void feed_period_by_previous_version_with_previous_version_deleted() { when(system2Mock.now()).thenReturn(november30th2008.getTime()); when(analysisMetadataHolder.isFirstAnalysis()).thenReturn(false); setupRoot(project, "1.1"); - setupBranchWithNoManualBaseline(analysisMetadataHolder, project); + setupBranchWithNoManualBaseline(project); settings.setProperty("sonar.leak.period", "previous_version"); underTest.execute(new TestComputationStepContext()); @@ -752,7 +710,7 @@ public void feed_period_by_previous_version_with_first_analysis_when_no_previous when(system2Mock.now()).thenReturn(november30th2008.getTime()); when(analysisMetadataHolder.isFirstAnalysis()).thenReturn(false); setupRoot(project, "1.1"); - setupBranchWithNoManualBaseline(analysisMetadataHolder, project); + setupBranchWithNoManualBaseline(project); settings.setProperty("sonar.leak.period", "previous_version"); underTest.execute(new TestComputationStepContext()); @@ -771,7 +729,7 @@ public void feed_period_by_previous_version_with_first_analysis_when_previous_sn when(system2Mock.now()).thenReturn(november30th2008.getTime()); when(analysisMetadataHolder.isFirstAnalysis()).thenReturn(false); setupRoot(project, "1.1"); - setupBranchWithNoManualBaseline(analysisMetadataHolder, project); + setupBranchWithNoManualBaseline(project); settings.setProperty("sonar.leak.period", "previous_version"); underTest.execute(new TestComputationStepContext()); @@ -795,7 +753,7 @@ public void feed_period_by_version() { when(system2Mock.now()).thenReturn(november30th2008.getTime()); when(analysisMetadataHolder.isFirstAnalysis()).thenReturn(false); setupRoot(project, "1.1"); - setupBranchWithNoManualBaseline(analysisMetadataHolder, project); + setupBranchWithNoManualBaseline(project); settings.setProperty("sonar.leak.period", "1.0"); underTest.execute(new TestComputationStepContext()); @@ -817,7 +775,7 @@ public void feed_period_by_version_with_only_one_existing_version() { when(system2Mock.now()).thenReturn(november30th2008.getTime()); when(analysisMetadataHolder.isFirstAnalysis()).thenReturn(false); setupRoot(project, "0.9"); - setupBranchWithNoManualBaseline(analysisMetadataHolder, project); + setupBranchWithNoManualBaseline(project); settings.setProperty("sonar.leak.period", "0.9"); underTest.execute(new TestComputationStepContext()); @@ -863,9 +821,9 @@ private void setupRoot(ComponentDto project, String version) { when(configurationRepository.getConfiguration()).thenReturn(settings.asConfig()); } - private void setupBranchWithNoManualBaseline(AnalysisMetadataHolder analysisMetadataHolder, ComponentDto projectOrLongBranch) { + private void setupBranchWithNoManualBaseline(ComponentDto projectOrLongBranch) { dbTester.components().unsetManualBaseline(projectOrLongBranch); - when(analysisMetadataHolder.getBranch()).thenReturn(branchOf(projectOrLongBranch)); + setBranchOf(projectOrLongBranch); } private static void verifyInvalidValueMessage(MessageException e, String propertyValue) { diff --git a/server/sonar-server/src/main/java/org/sonar/server/branch/pr/ws/ListAction.java b/server/sonar-server/src/main/java/org/sonar/server/branch/pr/ws/ListAction.java index 4ee21954cdbb..109e3f780f95 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/branch/pr/ws/ListAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/branch/pr/ws/ListAction.java @@ -108,6 +108,7 @@ public void handle(Request request, Response response) throws Exception { Map mergeBranchesByUuid = dbClient.branchDao() .selectByUuids(dbSession, pullRequests.stream().map(BranchDto::getMergeBranchUuid).filter(Objects::nonNull).collect(toList())) .stream().collect(uniqueIndex(BranchDto::getUuid)); + Map branchStatisticsByBranchUuid = issueIndex.searchBranchStatistics(project.uuid(), pullRequestUuids).stream() .collect(uniqueIndex(BranchStatistics::getBranchUuid, Function.identity())); Map qualityGateMeasuresByComponentUuids = dbClient.liveMeasureDao() diff --git a/sonar-core/src/main/java/org/sonar/core/issue/tracking/AbstractTracker.java b/sonar-core/src/main/java/org/sonar/core/issue/tracking/AbstractTracker.java index 53473607f241..8e53bab64872 100644 --- a/sonar-core/src/main/java/org/sonar/core/issue/tracking/AbstractTracker.java +++ b/sonar-core/src/main/java/org/sonar/core/issue/tracking/AbstractTracker.java @@ -56,17 +56,6 @@ protected void match(Tracking tracking, Function