From e2f26c73c3a2fe0fd1f3d14c9d737c919874cad1 Mon Sep 17 00:00:00 2001 From: =?utf8?q?S=C3=A9bastien=20Lesaint?= Date: Wed, 27 Jan 2016 18:24:56 +0100 Subject: [PATCH] SONAR-7166 fail when projectKey in report is not the component key failure implemented as early as possible --- .../LoadReportAnalysisMetadataHolderStep.java | 13 ++++- ...dReportAnalysisMetadataHolderStepTest.java | 49 +++++++++++++++---- 2 files changed, 52 insertions(+), 10 deletions(-) diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/step/LoadReportAnalysisMetadataHolderStep.java b/server/sonar-server/src/main/java/org/sonar/server/computation/step/LoadReportAnalysisMetadataHolderStep.java index 283085f695b..f3596cc2557 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/computation/step/LoadReportAnalysisMetadataHolderStep.java +++ b/server/sonar-server/src/main/java/org/sonar/server/computation/step/LoadReportAnalysisMetadataHolderStep.java @@ -22,16 +22,21 @@ package org.sonar.server.computation.step; import org.sonar.batch.protocol.output.BatchReport; import org.sonar.server.computation.analysis.MutableAnalysisMetadataHolder; import org.sonar.server.computation.batch.BatchReportReader; +import org.sonar.server.computation.queue.CeTask; + +import static com.google.common.base.Preconditions.checkState; /** * Feed analysis metadata holder with metadata from the analysis report. */ public class LoadReportAnalysisMetadataHolderStep implements ComputationStep { + private final CeTask ceTask; private final BatchReportReader reportReader; private final MutableAnalysisMetadataHolder mutableAnalysisMetadataHolder; - public LoadReportAnalysisMetadataHolderStep(BatchReportReader reportReader, MutableAnalysisMetadataHolder mutableAnalysisMetadataHolder) { + public LoadReportAnalysisMetadataHolderStep(CeTask ceTask, BatchReportReader reportReader, MutableAnalysisMetadataHolder mutableAnalysisMetadataHolder) { + this.ceTask = ceTask; this.reportReader = reportReader; this.mutableAnalysisMetadataHolder = mutableAnalysisMetadataHolder; } @@ -39,6 +44,12 @@ public class LoadReportAnalysisMetadataHolderStep implements ComputationStep { @Override public void execute() { BatchReport.Metadata reportMetadata = reportReader.readMetadata(); + checkState( + ceTask.getComponentKey().equals(reportMetadata.getProjectKey()), + "ProjectKey in report (%s) is not consistent with projectKey under which the report as been submitted (%s)", + reportMetadata.getProjectKey(), + ceTask.getComponentKey()); + mutableAnalysisMetadataHolder.setRootComponentRef(reportMetadata.getRootComponentRef()); mutableAnalysisMetadataHolder.setBranch(reportMetadata.hasBranch() ? reportMetadata.getBranch() : null); mutableAnalysisMetadataHolder.setAnalysisDate(reportMetadata.getAnalysisDate()); diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/step/LoadReportAnalysisMetadataHolderStepTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/step/LoadReportAnalysisMetadataHolderStepTest.java index bd226fc8cbf..9d4032fcde6 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/computation/step/LoadReportAnalysisMetadataHolderStepTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/computation/step/LoadReportAnalysisMetadataHolderStepTest.java @@ -21,30 +21,37 @@ package org.sonar.server.computation.step; import org.junit.Rule; import org.junit.Test; +import org.junit.rules.ExpectedException; import org.sonar.batch.protocol.output.BatchReport; import org.sonar.server.computation.analysis.MutableAnalysisMetadataHolderRule; import org.sonar.server.computation.batch.BatchReportReaderRule; +import org.sonar.server.computation.queue.CeTask; import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; public class LoadReportAnalysisMetadataHolderStepTest { + public static final String PROJECT_KEY = "project_key"; static long ANALYSIS_DATE = 123456789L; static String BRANCH = "origin/master"; @Rule public BatchReportReaderRule reportReader = new BatchReportReaderRule(); - @Rule public MutableAnalysisMetadataHolderRule analysisMetadataHolder = new MutableAnalysisMetadataHolderRule(); + @Rule + public ExpectedException expectedException = ExpectedException.none(); - ComputationStep underTest = new LoadReportAnalysisMetadataHolderStep(reportReader, analysisMetadataHolder); + private CeTask ceTask = createCeTask(PROJECT_KEY); + private ComputationStep underTest = new LoadReportAnalysisMetadataHolderStep(ceTask, reportReader, analysisMetadataHolder); @Test public void set_root_component_ref() throws Exception { reportReader.setMetadata( - BatchReport.Metadata.newBuilder() + newBatchReportBuilder() .setRootComponentRef(1) .build()); @@ -56,7 +63,7 @@ public class LoadReportAnalysisMetadataHolderStepTest { @Test public void set_analysis_date() throws Exception { reportReader.setMetadata( - BatchReport.Metadata.newBuilder() + newBatchReportBuilder() .setAnalysisDate(ANALYSIS_DATE) .build()); @@ -68,7 +75,7 @@ public class LoadReportAnalysisMetadataHolderStepTest { @Test public void set_branch() throws Exception { reportReader.setMetadata( - BatchReport.Metadata.newBuilder() + newBatchReportBuilder() .setBranch(BRANCH) .build()); @@ -80,7 +87,7 @@ public class LoadReportAnalysisMetadataHolderStepTest { @Test public void set_null_branch_when_nothing_in_the_report() throws Exception { reportReader.setMetadata( - BatchReport.Metadata.newBuilder() + newBatchReportBuilder() .build()); underTest.execute(); @@ -91,7 +98,7 @@ public class LoadReportAnalysisMetadataHolderStepTest { @Test public void set_cross_project_duplication_to_true() throws Exception { reportReader.setMetadata( - BatchReport.Metadata.newBuilder() + newBatchReportBuilder() .setCrossProjectDuplicationActivated(true) .build()); @@ -103,7 +110,7 @@ public class LoadReportAnalysisMetadataHolderStepTest { @Test public void set_cross_project_duplication_to_false() throws Exception { reportReader.setMetadata( - BatchReport.Metadata.newBuilder() + newBatchReportBuilder() .setCrossProjectDuplicationActivated(false) .build()); @@ -115,7 +122,7 @@ public class LoadReportAnalysisMetadataHolderStepTest { @Test public void set_cross_project_duplication_to_false_when_nothing_in_the_report() throws Exception { reportReader.setMetadata( - BatchReport.Metadata.newBuilder() + newBatchReportBuilder() .build()); underTest.execute(); @@ -123,4 +130,28 @@ public class LoadReportAnalysisMetadataHolderStepTest { assertThat(analysisMetadataHolder.isCrossProjectDuplicationEnabled()).isEqualTo(false); } + @Test + public void execute_fails_with_ISE_when_projectKey_in_report_is_different_from_componentKey_in_CE_task() { + reportReader.setMetadata( + BatchReport.Metadata.newBuilder() + .setProjectKey("some other key") + .build()); + + expectedException.expect(IllegalStateException.class); + expectedException.expectMessage("ProjectKey in report (some other key) is not consistent with projectKey under which the report as been submitted (" + PROJECT_KEY + ")"); + + underTest.execute(); + } + + private static BatchReport.Metadata.Builder newBatchReportBuilder() { + return BatchReport.Metadata.newBuilder() + .setProjectKey(PROJECT_KEY); + } + + private CeTask createCeTask(String projectKey) { + CeTask res = mock(CeTask.class); + when(res.getComponentKey()).thenReturn(projectKey); + return res; + } + } -- 2.39.5