diff options
author | Duarte Meneses <duarte.meneses@sonarsource.com> | 2017-07-24 16:09:49 +0200 |
---|---|---|
committer | Julien HENRY <julien.henry@sonarsource.com> | 2017-08-07 11:44:06 +0200 |
commit | ce007ea402d4a0aac78c5d6e3d1ec19864067e77 (patch) | |
tree | 47d34171a277d95e44fa0e524abe9d60a9199e2e | |
parent | eacbf52a96ed3dca7652dd4f34dd604d8f9c14a2 (diff) | |
download | sonarqube-ce007ea402d4a0aac78c5d6e3d1ec19864067e77.tar.gz sonarqube-ce007ea402d4a0aac78c5d6e3d1ec19864067e77.zip |
SONAR-9601 Read analysis incremental flag and file status from report
17 files changed, 239 insertions, 2 deletions
diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/analysis/AnalysisMetadataHolder.java b/server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/analysis/AnalysisMetadataHolder.java index 2338a6bd55f..16840e230f1 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/analysis/AnalysisMetadataHolder.java +++ b/server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/analysis/AnalysisMetadataHolder.java @@ -53,6 +53,11 @@ public interface AnalysisMetadataHolder { * @throws IllegalStateException if baseProjectSnapshot has not been set */ boolean isFirstAnalysis(); + + /** + * Whether this is an incremental analysis or a full analysis. + */ + boolean isIncrementalAnalysis(); /** * Return the last analysis of the project. diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/analysis/AnalysisMetadataHolderImpl.java b/server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/analysis/AnalysisMetadataHolderImpl.java index 0ddc18542f1..a5b3128a0aa 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/analysis/AnalysisMetadataHolderImpl.java +++ b/server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/analysis/AnalysisMetadataHolderImpl.java @@ -34,6 +34,7 @@ public class AnalysisMetadataHolderImpl implements MutableAnalysisMetadataHolder private final InitializedProperty<Organization> organization = new InitializedProperty<>(); private final InitializedProperty<String> uuid = new InitializedProperty<>(); private final InitializedProperty<Long> analysisDate = new InitializedProperty<>(); + private final InitializedProperty<Boolean> incrementalAnalysis = new InitializedProperty<>(); private final InitializedProperty<Analysis> baseProjectSnapshot = new InitializedProperty<>(); private final InitializedProperty<Boolean> crossProjectDuplicationEnabled = new InitializedProperty<>(); private final InitializedProperty<String> branch = new InitializedProperty<>(); @@ -92,6 +93,19 @@ public class AnalysisMetadataHolderImpl implements MutableAnalysisMetadataHolder } @Override + public MutableAnalysisMetadataHolder setIncrementalAnalysis(boolean isIncrementalAnalysis) { + checkState(!incrementalAnalysis.isInitialized(), "Incremental analysis flag has already been set"); + this.incrementalAnalysis.setProperty(isIncrementalAnalysis); + return this; + } + + @Override + public boolean isIncrementalAnalysis() { + checkState(incrementalAnalysis.isInitialized(), "Incremental analysis flag has not been set"); + return this.incrementalAnalysis.getProperty(); + } + + @Override public MutableAnalysisMetadataHolder setBaseAnalysis(@Nullable Analysis baseAnalysis) { checkState(!this.baseProjectSnapshot.isInitialized(), "Base project snapshot has already been set"); this.baseProjectSnapshot.setProperty(baseAnalysis); diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/analysis/MutableAnalysisMetadataHolder.java b/server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/analysis/MutableAnalysisMetadataHolder.java index 3032d536b2e..b72db656916 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/analysis/MutableAnalysisMetadataHolder.java +++ b/server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/analysis/MutableAnalysisMetadataHolder.java @@ -41,6 +41,11 @@ public interface MutableAnalysisMetadataHolder extends AnalysisMetadataHolder { MutableAnalysisMetadataHolder setAnalysisDate(long date); /** + * @throws IllegalStateException if it has already been set + */ + MutableAnalysisMetadataHolder setIncrementalAnalysis(boolean isIncrementalAnalysis); + + /** * @throws IllegalStateException if baseAnalysis has already been set */ MutableAnalysisMetadataHolder setBaseAnalysis(@Nullable Analysis baseAnalysis); diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/component/Component.java b/server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/component/Component.java index 89481723f5f..0d2b65169d0 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/component/Component.java +++ b/server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/component/Component.java @@ -58,8 +58,14 @@ public interface Component { } } + enum Status { + UNAVAILABLE, SAME, CHANGED, ADDED; + } + Type getType(); + Status getStatus(); + /** * Returns the component uuid */ diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/component/ComponentImpl.java b/server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/component/ComponentImpl.java index 490ed4e5345..e7686fa9d2f 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/component/ComponentImpl.java +++ b/server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/component/ComponentImpl.java @@ -35,6 +35,7 @@ import static org.apache.commons.lang.StringUtils.trimToNull; @Immutable public class ComponentImpl implements Component { private final Type type; + private final Status status; private final String name; private final String key; private final String uuid; @@ -49,6 +50,7 @@ public class ComponentImpl implements Component { private ComponentImpl(Builder builder) { this.type = builder.type; + this.status = builder.status; this.key = builder.key; this.name = builder.name; this.description = builder.description; @@ -62,6 +64,11 @@ public class ComponentImpl implements Component { public Type getType() { return type; } + + @Override + public Status getStatus() { + return status; + } @Override public String getUuid() { @@ -125,8 +132,10 @@ public class ComponentImpl implements Component { private static final String UUID_CANNOT_BE_NULL = "uuid can't be null"; private static final String REPORT_ATTRIBUTES_CANNOT_BE_NULL = "reportAttributes can't be null"; private static final String NAME_CANNOT_BE_NULL = "name can't be null"; - + private static final String STATUS_CANNOT_BE_NULL = "status can't be null"; + private final Type type; + private Status status; private ReportAttributes reportAttributes; private String uuid; private String key; @@ -153,6 +162,11 @@ public class ComponentImpl implements Component { public String getUuid() { return uuid; } + + public Builder setStatus(Status status) { + this.status = requireNonNull(status, STATUS_CANNOT_BE_NULL); + return this; + } public Builder setKey(String s) { this.key = requireNonNull(s, KEY_CANNOT_BE_NULL); @@ -187,6 +201,7 @@ public class ComponentImpl implements Component { requireNonNull(uuid, UUID_CANNOT_BE_NULL); requireNonNull(key, KEY_CANNOT_BE_NULL); requireNonNull(name, NAME_CANNOT_BE_NULL); + requireNonNull(status, STATUS_CANNOT_BE_NULL); return new ComponentImpl(this); } } diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/component/ComponentRootBuilder.java b/server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/component/ComponentRootBuilder.java index ab731524c02..75a964a0e40 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/component/ComponentRootBuilder.java +++ b/server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/component/ComponentRootBuilder.java @@ -125,6 +125,7 @@ public class ComponentRootBuilder { return ComponentImpl.builder(convertType(reportComponent.getType())) .setUuid(uuidSupplier.apply(componentKey)) .setKey(componentKey) + .setStatus(convertStatus(reportComponent.getStatus())) .setDescription(trimToNull(reportComponent.getDescription())) .setFileAttributes(createFileAttributes(reportComponent)) .addChildren(toArray(buildChildren(reportComponent, latestModuleKey), Component.class)); @@ -197,6 +198,22 @@ public class ComponentRootBuilder { component.getLines()); } + static Component.Status convertStatus(ScannerReport.Component.FileStatus status) { + switch(status) { + case ADDED: + return Component.Status.ADDED; + case SAME: + return Component.Status.SAME; + case CHANGED: + return Component.Status.CHANGED; + case UNAVAILABLE: + return Component.Status.UNAVAILABLE; + case UNRECOGNIZED: + default: + throw new IllegalArgumentException("Unsupported ComponentType value " + status); + } + } + @VisibleForTesting static Component.Type convertType(ScannerReport.Component.ComponentType type) { switch (type) { diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/step/LoadReportAnalysisMetadataHolderStep.java b/server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/step/LoadReportAnalysisMetadataHolderStep.java index 5898ef8b095..f4cff3f6738 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/step/LoadReportAnalysisMetadataHolderStep.java +++ b/server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/step/LoadReportAnalysisMetadataHolderStep.java @@ -95,6 +95,7 @@ public class LoadReportAnalysisMetadataHolderStep implements ComputationStep { mutableAnalysisMetadataHolder.setRootComponentRef(reportMetadata.getRootComponentRef()); mutableAnalysisMetadataHolder.setBranch(isNotEmpty(reportMetadata.getBranch()) ? reportMetadata.getBranch() : null); mutableAnalysisMetadataHolder.setCrossProjectDuplicationEnabled(reportMetadata.getCrossProjectDuplicationActivated()); + mutableAnalysisMetadataHolder.setIncrementalAnalysis(reportMetadata.getIncremental()); mutableAnalysisMetadataHolder.setQProfilesByLanguage(transformValues(reportMetadata.getQprofilesPerLanguage(), TO_COMPUTE_QPROFILE)); mutableAnalysisMetadataHolder.setOrganization(organization); } diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/step/ValidateProjectStep.java b/server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/step/ValidateProjectStep.java index 6c7ff308160..0eb52d2aa9b 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/step/ValidateProjectStep.java +++ b/server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/step/ValidateProjectStep.java @@ -115,6 +115,7 @@ public class ValidateProjectStep implements ComputationStep { this.rawProject = rawProject; String rawProjectKey = rawProject.getKey(); validateBranch(); + validateNotIncrementalAndFirstAnalysis(rawProjectKey); validateBatchKey(rawProject); Optional<ComponentDto> baseProject = loadBaseComponent(rawProjectKey); @@ -132,6 +133,13 @@ public class ValidateProjectStep implements ComputationStep { } } + private void validateNotIncrementalAndFirstAnalysis(String rawProjectKey) { + if (analysisMetadataHolder.isIncrementalAnalysis() && analysisMetadataHolder.isFirstAnalysis()) { + validationMessages.add(format("The project \"%s\" hasn't been analysed before and the first analysis can't be incremental." + + " Please launch a full analysis of the project.", rawProjectKey)); + } + } + private void validateProjectKey(Optional<ComponentDto> baseProject, String rawProjectKey) { if (baseProject.isPresent() && !baseProject.get().projectUuid().equals(baseProject.get().uuid())) { // Project key is already used as a module of another project diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/analysis/AnalysisMetadataHolderImplTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/analysis/AnalysisMetadataHolderImplTest.java index 4cb9539c18f..707acbeaffb 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/analysis/AnalysisMetadataHolderImplTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/analysis/AnalysisMetadataHolderImplTest.java @@ -199,7 +199,7 @@ public class AnalysisMetadataHolderImplTest { new AnalysisMetadataHolderImpl().isCrossProjectDuplicationEnabled(); } - + @Test public void setIsCrossProjectDuplicationEnabled_throws_ISE_when_called_twice() { AnalysisMetadataHolderImpl underTest = new AnalysisMetadataHolderImpl(); @@ -211,6 +211,52 @@ public class AnalysisMetadataHolderImplTest { } @Test + public void setIsIncrementalAnalysis_throws_ISE_when_called_twice() { + AnalysisMetadataHolderImpl underTest = new AnalysisMetadataHolderImpl(); + underTest.setIncrementalAnalysis(true); + + expectedException.expect(IllegalStateException.class); + expectedException.expectMessage("Incremental analysis flag has already been set"); + underTest.setIncrementalAnalysis(false); + } + + @Test + public void isIncrementalAnalysis_return_true() { + AnalysisMetadataHolderImpl underTest = new AnalysisMetadataHolderImpl(); + + underTest.setIncrementalAnalysis(true); + + assertThat(underTest.isIncrementalAnalysis()).isEqualTo(true); + } + + @Test + public void isIncrementalAnalysis_return_false() { + AnalysisMetadataHolderImpl underTest = new AnalysisMetadataHolderImpl(); + + underTest.setIncrementalAnalysis(false); + + assertThat(underTest.isIncrementalAnalysis()).isEqualTo(false); + } + + @Test + public void isIncrementalAnalysisEnabled_throws_ISE_when_holder_is_not_initialized() { + expectedException.expect(IllegalStateException.class); + expectedException.expectMessage("Incremental analysis flag has not been set"); + + new AnalysisMetadataHolderImpl().isIncrementalAnalysis(); + } + + @Test + public void setIsIncrementalAnalys_throws_ISE_when_called_twice() { + AnalysisMetadataHolderImpl underTest = new AnalysisMetadataHolderImpl(); + underTest.setIncrementalAnalysis(true); + + expectedException.expect(IllegalStateException.class); + expectedException.expectMessage("Incremental analysis flag has already been set"); + underTest.setIncrementalAnalysis(false); + } + + @Test public void set_branch() { AnalysisMetadataHolderImpl underTest = new AnalysisMetadataHolderImpl(); diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/analysis/AnalysisMetadataHolderRule.java b/server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/analysis/AnalysisMetadataHolderRule.java index dc6e1da9fa6..41a06d3f9ee 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/analysis/AnalysisMetadataHolderRule.java +++ b/server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/analysis/AnalysisMetadataHolderRule.java @@ -40,6 +40,8 @@ public class AnalysisMetadataHolderRule extends ExternalResource implements Muta private final InitializedProperty<Long> analysisDate = new InitializedProperty<>(); + private final InitializedProperty<Boolean> incremental = new InitializedProperty<>(); + private final InitializedProperty<Analysis> baseAnalysis = new InitializedProperty<>(); private final InitializedProperty<Boolean> crossProjectDuplicationEnabled = new InitializedProperty<>(); @@ -171,4 +173,16 @@ public class AnalysisMetadataHolderRule extends ExternalResource implements Muta checkState(qProfilesPerLanguage.isInitialized(), "QProfile per language has not been set"); return qProfilesPerLanguage.getProperty(); } + + @Override + public boolean isIncrementalAnalysis() { + checkState(incremental.isInitialized(), "Incremental mode flag has not been set"); + return incremental.getProperty(); + } + + @Override + public AnalysisMetadataHolderRule setIncrementalAnalysis(boolean isIncrementalAnalysis) { + this.incremental.setProperty(isIncrementalAnalysis); + return this; + } } diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/analysis/MutableAnalysisMetadataHolderRule.java b/server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/analysis/MutableAnalysisMetadataHolderRule.java index 473fc706e01..39bdf31b1f8 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/analysis/MutableAnalysisMetadataHolderRule.java +++ b/server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/analysis/MutableAnalysisMetadataHolderRule.java @@ -129,4 +129,15 @@ public class MutableAnalysisMetadataHolderRule extends ExternalResource implemen public Map<String, QualityProfile> getQProfilesByLanguage() { return delegate.getQProfilesByLanguage(); } + + @Override + public boolean isIncrementalAnalysis() { + return delegate.isIncrementalAnalysis(); + } + + @Override + public MutableAnalysisMetadataHolder setIncrementalAnalysis(boolean isIncrementalAnalysis) { + delegate.setIncrementalAnalysis(isIncrementalAnalysis); + return this; + } } diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/component/ComponentImplTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/component/ComponentImplTest.java index 1ef919a3185..df3d2148023 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/component/ComponentImplTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/component/ComponentImplTest.java @@ -23,6 +23,7 @@ import java.util.Arrays; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; +import org.sonar.server.computation.task.projectanalysis.component.Component.Status; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.fail; @@ -54,6 +55,25 @@ public class ComponentImplTest { } @Test + public void builder_throws_NPE_if_status_arg_is_Null() { + thrown.expect(NullPointerException.class); + + builder(FILE).setStatus(null); + } + + @Test + public void builder_throws_NPE_if_status_is_Null() { + thrown.expect(NullPointerException.class); + + builder(Component.Type.DIRECTORY) + .setName("DIR") + .setKey(KEY) + .setUuid(UUID) + .setReportAttributes(ReportAttributes.newBuilder(1).build()) + .build(); + } + + @Test public void set_key_throws_NPE_if_component_arg_is_Null() { thrown.expect(NullPointerException.class); @@ -154,12 +174,14 @@ public class ComponentImplTest { .setName("CHILD_NAME") .setKey("CHILD_KEY") .setUuid("CHILD_UUID") + .setStatus(Status.UNAVAILABLE) .setReportAttributes(ReportAttributes.newBuilder(2).build()) .build(); ComponentImpl componentImpl = builder(Component.Type.DIRECTORY) .setName("DIR") .setKey(KEY) .setUuid(UUID) + .setStatus(Status.UNAVAILABLE) .setReportAttributes(ReportAttributes.newBuilder(1).build()) .addChildren(child) .build(); @@ -193,6 +215,7 @@ public class ComponentImplTest { return builder(type) .setName("name_" + key) .setKey(key) + .setStatus(Status.UNAVAILABLE) .setUuid("uuid_" + key) .setReportAttributes(ReportAttributes.newBuilder(key.hashCode()) .build()); diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/component/ReportComponent.java b/server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/component/ReportComponent.java index 7c90e551f5b..f4f27679803 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/component/ReportComponent.java +++ b/server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/component/ReportComponent.java @@ -40,6 +40,7 @@ public class ReportComponent implements Component { public static final Component DUMB_PROJECT = builder(Type.PROJECT, 1).setKey("PROJECT_KEY").setUuid("PROJECT_UUID").setName("Project Name").setVersion("1.0-SNAPSHOT").build(); private final Type type; + private final Status status; private final String name; @CheckForNull private final String description; @@ -51,6 +52,7 @@ public class ReportComponent implements Component { private ReportComponent(Builder builder) { this.type = builder.type; + this.status = builder.status; this.key = builder.key; this.name = builder.name == null ? String.valueOf(builder.key) : builder.name; this.description = builder.description; @@ -67,6 +69,11 @@ public class ReportComponent implements Component { public Type getType() { return type; } + + @Override + public Status getStatus() { + return status; + } @Override public String getUuid() { @@ -159,6 +166,7 @@ public class ReportComponent implements Component { public static final class Builder { private final Type type; private final int ref; + private Status status; private String uuid; private String key; private String name; @@ -174,6 +182,11 @@ public class ReportComponent implements Component { this.ref = ref; } + public Builder setStatus(Status s) { + this.status = Objects.requireNonNull(s); + return this; + } + public Builder setUuid(String s) { this.uuid = Objects.requireNonNull(s); return this; @@ -222,4 +235,5 @@ public class ReportComponent implements Component { return new ReportComponent(this); } } + } diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/component/ViewsComponent.java b/server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/component/ViewsComponent.java index 9f9824dce02..b9fbf989025 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/component/ViewsComponent.java +++ b/server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/component/ViewsComponent.java @@ -136,6 +136,11 @@ public class ViewsComponent implements Component { public Type getType() { return type; } + + @Override + public Status getStatus() { + return Status.UNAVAILABLE; + } @Override public String getUuid() { diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/step/BuildComponentTreeStepTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/step/BuildComponentTreeStepTest.java index 06bce8981c1..b949295806c 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/step/BuildComponentTreeStepTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/step/BuildComponentTreeStepTest.java @@ -36,6 +36,7 @@ import org.sonar.db.component.SnapshotDto; import org.sonar.db.organization.OrganizationDto; import org.sonar.scanner.protocol.output.ScannerReport; import org.sonar.scanner.protocol.output.ScannerReport.Component.ComponentType; +import org.sonar.scanner.protocol.output.ScannerReport.Component.FileStatus; import org.sonar.server.computation.task.projectanalysis.analysis.AnalysisMetadataHolderImpl; import org.sonar.server.computation.task.projectanalysis.analysis.MutableAnalysisMetadataHolder; import org.sonar.server.computation.task.projectanalysis.analysis.MutableAnalysisMetadataHolderRule; @@ -339,6 +340,7 @@ public class BuildComponentTreeStepTest { ScannerReport.Component.Builder builder = ScannerReport.Component.newBuilder() .setType(componentType) .setRef(componentRef) + .setStatus(FileStatus.UNAVAILABLE) .setLines(1); if (key != null) { builder.setKey(key); diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/step/LoadReportAnalysisMetadataHolderStepTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/step/LoadReportAnalysisMetadataHolderStepTest.java index 1e0b1e246d5..3169ada19ed 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/step/LoadReportAnalysisMetadataHolderStepTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/step/LoadReportAnalysisMetadataHolderStepTest.java @@ -147,6 +147,31 @@ public class LoadReportAnalysisMetadataHolderStepTest { assertThat(analysisMetadataHolder.isCrossProjectDuplicationEnabled()).isEqualTo(false); } + + @Test + public void set_incremental_analysis_to_true() { + reportReader.setMetadata( + newBatchReportBuilder() + .setIncremental(true) + .build()); + + underTest.execute(); + + assertThat(analysisMetadataHolder.isIncrementalAnalysis()).isTrue(); + } + + @Test + public void set_incremental_analysis_to_false() { + reportReader.setMetadata( + newBatchReportBuilder() + .setIncremental(false) + .build()); + + underTest.execute(); + + assertThat(analysisMetadataHolder.isIncrementalAnalysis()).isFalse(); + } + @Test public void set_cross_project_duplication_to_false_when_nothing_in_the_report() { diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/step/ValidateProjectStepTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/step/ValidateProjectStepTest.java index f1c0120b291..499699b183e 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/step/ValidateProjectStepTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/step/ValidateProjectStepTest.java @@ -62,6 +62,7 @@ public class ValidateProjectStepTest { @Rule public AnalysisMetadataHolderRule analysisMetadataHolder = new AnalysisMetadataHolderRule() .setAnalysisDate(new Date(DEFAULT_ANALYSIS_TIME)) + .setIncrementalAnalysis(false) .setBranch(DEFAULT_BRANCH); DbClient dbClient = dbTester.getDbClient(); @@ -290,4 +291,29 @@ public class ValidateProjectStepTest { underTest.execute(); } + + @Test + public void fail_if_incremental_and_first_analysis() { + analysisMetadataHolder.setBaseAnalysis(null); + //setAnalysisDate(DateUtils.parseDate("2015-01-01")); + + reportReader.putComponent(ScannerReport.Component.newBuilder() + .setRef(1) + .setType(ComponentType.PROJECT) + .setKey(PROJECT_KEY) + .addChildRef(2) + .build()); + + analysisMetadataHolder.setIncrementalAnalysis(true); + + //dbTester.getSession().commit(); + + treeRootHolder.setRoot(ReportComponent.builder(Component.Type.PROJECT, 1).setUuid("ABCD").setKey(PROJECT_KEY).build()); + + thrown.expect(MessageException.class); + thrown.expectMessage("Validation of project failed:"); + thrown.expectMessage("hasn't been analysed before and the first analysis can't be incremental. Please launch a full analysis of the project."); + + underTest.execute(); + } } |