Browse Source

SONAR-7166 fail when projectKey in report is not the component key

failure implemented as early as possible
tags/5.4-M10
Sébastien Lesaint 8 years ago
parent
commit
e2f26c73c3

+ 12
- 1
server/sonar-server/src/main/java/org/sonar/server/computation/step/LoadReportAnalysisMetadataHolderStep.java View 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());

+ 40
- 9
server/sonar-server/src/test/java/org/sonar/server/computation/step/LoadReportAnalysisMetadataHolderStepTest.java View 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;
}

}

Loading…
Cancel
Save