]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-7166 fail when projectKey in report is not the component key
authorSébastien Lesaint <sebastien.lesaint@sonarsource.com>
Wed, 27 Jan 2016 17:24:56 +0000 (18:24 +0100)
committerSébastien Lesaint <sebastien.lesaint@sonarsource.com>
Thu, 28 Jan 2016 13:55:17 +0000 (14:55 +0100)
failure implemented as early as possible

server/sonar-server/src/main/java/org/sonar/server/computation/step/LoadReportAnalysisMetadataHolderStep.java
server/sonar-server/src/test/java/org/sonar/server/computation/step/LoadReportAnalysisMetadataHolderStepTest.java

index 283085f695baaafaa8fce636a1c75cab8f81b7c3..f3596cc2557b595b127e0e251d13cc0563eee939 100644 (file)
@@ -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());
index bd226fc8cbf645dfef18155d4a439dca0fbde5b7..9d4032fcde677c568c94a2a56daef3c512a5ff6d 100644 (file)
@@ -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;
+  }
+
 }