aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-batch
diff options
context:
space:
mode:
authorJulien Lancelot <julien.lancelot@gmail.com>2013-05-29 17:06:53 +0200
committerJulien Lancelot <julien.lancelot@gmail.com>2013-05-29 17:06:53 +0200
commita1b777f7a44e95cec2a6787d09a381462cc184b5 (patch)
treef91f06fe8408e94f79eda4946bfb3333313e4c78 /sonar-batch
parent0132ccc4f16a3cfde9a0c168a517039a0f887b23 (diff)
downloadsonarqube-a1b777f7a44e95cec2a6787d09a381462cc184b5.tar.gz
sonarqube-a1b777f7a44e95cec2a6787d09a381462cc184b5.zip
SONAR-4334 Using the "sonar.projectDate" property must lead to an analysis failure as soon as a more recent quality snapshot exist in the DB
Diffstat (limited to 'sonar-batch')
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/ProjectConfigurator.java11
-rw-r--r--sonar-batch/src/test/java/org/sonar/batch/ProjectConfiguratorTest.java76
-rw-r--r--sonar-batch/src/test/resources/org/sonar/batch/ProjectConfiguratorTest/fail_if_not_latest_analysis.xml (renamed from sonar-batch/src/test/resources/org/sonar/batch/ProjectConfiguratorTest/isNotLatestAnalysis.xml)0
-rw-r--r--sonar-batch/src/test/resources/org/sonar/batch/ProjectConfiguratorTest/set_analysis_date_on_latest_analysis.xml (renamed from sonar-batch/src/test/resources/org/sonar/batch/ProjectConfiguratorTest/isLatestAnalysis.xml)0
-rw-r--r--sonar-batch/src/test/resources/org/sonar/batch/ProjectConfiguratorTest/set_analysis_date_on_latest_analysis_if_never_analysed.xml (renamed from sonar-batch/src/test/resources/org/sonar/batch/ProjectConfiguratorTest/isLatestAnalysisIfNeverAnalysed.xml)0
5 files changed, 50 insertions, 37 deletions
diff --git a/sonar-batch/src/main/java/org/sonar/batch/ProjectConfigurator.java b/sonar-batch/src/main/java/org/sonar/batch/ProjectConfigurator.java
index b485f8e964a..3498c241c61 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/ProjectConfigurator.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/ProjectConfigurator.java
@@ -67,15 +67,24 @@ public class ProjectConfigurator implements BatchComponent {
public ProjectConfigurator configure(Project project) {
Date analysisDate = loadAnalysisDate();
+ checkCurrentAnalyisIsTheLatestOne(project, analysisDate);
+
project
.setConfiguration(new PropertiesConfiguration()) // will be populated by ProjectSettings
.setAnalysisDate(analysisDate)
- .setLatestAnalysis(isLatestAnalysis(project.getKey(), analysisDate))
.setAnalysisVersion(loadAnalysisVersion())
.setAnalysisType(loadAnalysisType());
return this;
}
+ private void checkCurrentAnalyisIsTheLatestOne(Project project, Date analysisDate){
+ if (!isLatestAnalysis(project.getKey(), analysisDate)) {
+ throw new IllegalArgumentException(
+ "The value '"+ settings.getString(CoreProperties.PROJECT_DATE_PROPERTY) +"' of the sonar.projectDate property can't be older than the date of last known quality snapshot " +
+ "on this project. This property must be used to replay the past in a chronological order.");
+ }
+ }
+
boolean isLatestAnalysis(String projectKey, Date analysisDate) {
ResourceModel persistedProject = databaseSession.getSingleResult(ResourceModel.class, "key", projectKey, "enabled", true);
if (persistedProject != null) {
diff --git a/sonar-batch/src/test/java/org/sonar/batch/ProjectConfiguratorTest.java b/sonar-batch/src/test/java/org/sonar/batch/ProjectConfiguratorTest.java
index af8eb153d9f..7daa14f9c90 100644
--- a/sonar-batch/src/test/java/org/sonar/batch/ProjectConfiguratorTest.java
+++ b/sonar-batch/src/test/java/org/sonar/batch/ProjectConfiguratorTest.java
@@ -28,43 +28,41 @@ import org.sonar.jpa.test.AbstractDbUnitTestCase;
import java.text.SimpleDateFormat;
import java.util.Date;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.Is.is;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.fest.assertions.Assertions.assertThat;
+import static org.fest.assertions.Fail.fail;
public class ProjectConfiguratorTest extends AbstractDbUnitTestCase {
@Test
- public void analysisIsTodayByDefault() {
+ public void analysis_is_today_by_default() {
Project project = new Project("key");
new ProjectConfigurator(getSession(), new Settings()).configure(project);
Date today = new Date();
- assertTrue(today.getTime() - project.getAnalysisDate().getTime() < 1000);
+ assertThat(today.getTime() - project.getAnalysisDate().getTime()).isLessThan(1000);
}
@Test
- public void analysisDateCouldBeExplicitlySet() {
+ public void analysis_date_could_be_explicitly_set() {
Settings settings = new Settings();
settings.setProperty(CoreProperties.PROJECT_DATE_PROPERTY, "2005-01-30");
Project project = new Project("key");
new ProjectConfigurator(getSession(), settings).configure(project);
- assertEquals("30012005", new SimpleDateFormat("ddMMyyyy").format(project.getAnalysisDate()));
+ assertThat(new SimpleDateFormat("ddMMyyyy").format(project.getAnalysisDate())).isEqualTo("30012005");
}
@Test
- public void analysisTimestampCouldBeExplicitlySet() {
+ public void analysis_timestamp_could_be_explicitly_set() {
Settings settings = new Settings();
settings.setProperty(CoreProperties.PROJECT_DATE_PROPERTY, "2005-01-30T08:45:10+0000");
Project project = new Project("key");
new ProjectConfigurator(getSession(), settings).configure(project);
- assertEquals("30012005-4510", new SimpleDateFormat("ddMMyyyy-mmss").format(project.getAnalysisDate()));
+ assertThat(new SimpleDateFormat("ddMMyyyy-mmss").format(project.getAnalysisDate())).isEqualTo("30012005-4510");
}
@Test(expected = RuntimeException.class)
- public void failIfAnalyisDateIsNotValid() {
+ public void fail_if_analyis_date_is_not_valid() {
Settings configuration = new Settings();
configuration.setProperty(CoreProperties.PROJECT_DATE_PROPERTY, "2005/30/01");
Project project = new Project("key");
@@ -72,54 +70,54 @@ public class ProjectConfiguratorTest extends AbstractDbUnitTestCase {
}
@Test
- public void defaultAnalysisTypeIsDynamic() {
+ public void default_analysis_type_is_dynamic() {
Project project = new Project("key");
new ProjectConfigurator(getSession(), new Settings()).configure(project);
- assertThat(project.getAnalysisType(), is(Project.AnalysisType.DYNAMIC));
+ assertThat(project.getAnalysisType()).isEqualTo(Project.AnalysisType.DYNAMIC);
}
@Test
- public void explicitDynamicAnalysis() {
+ public void explicit_dynamic_analysis() {
Settings configuration = new Settings();
configuration.setProperty(CoreProperties.DYNAMIC_ANALYSIS_PROPERTY, "true");
Project project = new Project("key");
new ProjectConfigurator(getSession(), configuration).configure(project);
- assertThat(project.getAnalysisType(), is(Project.AnalysisType.DYNAMIC));
+ assertThat(project.getAnalysisType()).isEqualTo(Project.AnalysisType.DYNAMIC);
}
@Test
- public void explicitStaticAnalysis() {
+ public void explicit_static_analysis() {
Settings configuration = new Settings();
configuration.setProperty(CoreProperties.DYNAMIC_ANALYSIS_PROPERTY, "false");
Project project = new Project("key");
new ProjectConfigurator(getSession(), configuration).configure(project);
- assertThat(project.getAnalysisType(), is(Project.AnalysisType.STATIC));
+ assertThat(project.getAnalysisType()).isEqualTo(Project.AnalysisType.STATIC);
}
@Test
- public void explicitDynamicAnalysisReusingReports() {
+ public void explicit_dynamic_analysis_reusing_reports() {
Settings configuration = new Settings();
configuration.setProperty(CoreProperties.DYNAMIC_ANALYSIS_PROPERTY, "reuseReports");
Project project = new Project("key");
new ProjectConfigurator(getSession(), configuration).configure(project);
- assertThat(project.getAnalysisType(), is(Project.AnalysisType.REUSE_REPORTS));
+ assertThat(project.getAnalysisType()).isEqualTo(Project.AnalysisType.REUSE_REPORTS);
}
@Test
- public void isDynamicAnalysis() {
- assertThat(Project.AnalysisType.DYNAMIC.isDynamic(false), is(true));
- assertThat(Project.AnalysisType.DYNAMIC.isDynamic(true), is(true));
+ public void is_dynamic_analysis() {
+ assertThat(Project.AnalysisType.DYNAMIC.isDynamic(false)).isTrue();
+ assertThat(Project.AnalysisType.DYNAMIC.isDynamic(true)).isTrue();
- assertThat(Project.AnalysisType.STATIC.isDynamic(false), is(false));
- assertThat(Project.AnalysisType.STATIC.isDynamic(true), is(false));
+ assertThat(Project.AnalysisType.STATIC.isDynamic(false)).isFalse();
+ assertThat(Project.AnalysisType.STATIC.isDynamic(true)).isFalse();
- assertThat(Project.AnalysisType.REUSE_REPORTS.isDynamic(false), is(false));
- assertThat(Project.AnalysisType.REUSE_REPORTS.isDynamic(true), is(true));
+ assertThat(Project.AnalysisType.REUSE_REPORTS.isDynamic(false)).isFalse();
+ assertThat(Project.AnalysisType.REUSE_REPORTS.isDynamic(true)).isTrue();
}
@Test
- public void isLatestAnalysis() {
- setupData("isLatestAnalysis");
+ public void set_analysis_date_on_latest_analysis() {
+ setupData("set_analysis_date_on_latest_analysis");
Settings configuration = new Settings();
configuration.setProperty(CoreProperties.PROJECT_DATE_PROPERTY, "2010-12-25");
@@ -127,12 +125,12 @@ public class ProjectConfiguratorTest extends AbstractDbUnitTestCase {
Project project = new Project("my:key");
new ProjectConfigurator(getSession(), configuration).configure(project);
- assertThat(project.isLatestAnalysis(), is(true));
+ assertThat(new SimpleDateFormat("ddMMyyyy").format(project.getAnalysisDate())).isEqualTo("25122010");
}
@Test
- public void isLatestAnalysisIfNeverAnalysed() {
- setupData("isLatestAnalysisIfNeverAnalysed");
+ public void set_analysis_date_on_latest_analysis_if_never_analysed() {
+ setupData("set_analysis_date_on_latest_analysis_if_never_analysed");
Settings configuration = new Settings();
configuration.setProperty(CoreProperties.PROJECT_DATE_PROPERTY, "2010-12-25");
@@ -140,19 +138,25 @@ public class ProjectConfiguratorTest extends AbstractDbUnitTestCase {
Project project = new Project("my:key");
new ProjectConfigurator(getSession(), configuration).configure(project);
- assertThat(project.isLatestAnalysis(), is(true));
+ assertThat(new SimpleDateFormat("ddMMyyyy").format(project.getAnalysisDate())).isEqualTo("25122010");
}
@Test
- public void isNotLatestAnalysis() {
- setupData("isNotLatestAnalysis");
+ public void fail_if_not_latest_analysis() {
+ setupData("fail_if_not_latest_analysis");
Settings configuration = new Settings();
configuration.setProperty(CoreProperties.PROJECT_DATE_PROPERTY, "2005-12-25");
Project project = new Project("my:key");
- new ProjectConfigurator(getSession(), configuration).configure(project);
- assertThat(project.isLatestAnalysis(), is(false));
+ try {
+ new ProjectConfigurator(getSession(), configuration).configure(project);
+ fail();
+ } catch (Exception e) {
+ assertThat(e).isInstanceOf(IllegalArgumentException.class).hasMessage("The value '2005-12-25' of the sonar.projectDate property can't be older than the date " +
+ "of last known quality snapshot on this project. This property must be used to replay the past in a chronological order.");
+ }
}
+
}
diff --git a/sonar-batch/src/test/resources/org/sonar/batch/ProjectConfiguratorTest/isNotLatestAnalysis.xml b/sonar-batch/src/test/resources/org/sonar/batch/ProjectConfiguratorTest/fail_if_not_latest_analysis.xml
index 6658daa1b47..6658daa1b47 100644
--- a/sonar-batch/src/test/resources/org/sonar/batch/ProjectConfiguratorTest/isNotLatestAnalysis.xml
+++ b/sonar-batch/src/test/resources/org/sonar/batch/ProjectConfiguratorTest/fail_if_not_latest_analysis.xml
diff --git a/sonar-batch/src/test/resources/org/sonar/batch/ProjectConfiguratorTest/isLatestAnalysis.xml b/sonar-batch/src/test/resources/org/sonar/batch/ProjectConfiguratorTest/set_analysis_date_on_latest_analysis.xml
index de187166907..de187166907 100644
--- a/sonar-batch/src/test/resources/org/sonar/batch/ProjectConfiguratorTest/isLatestAnalysis.xml
+++ b/sonar-batch/src/test/resources/org/sonar/batch/ProjectConfiguratorTest/set_analysis_date_on_latest_analysis.xml
diff --git a/sonar-batch/src/test/resources/org/sonar/batch/ProjectConfiguratorTest/isLatestAnalysisIfNeverAnalysed.xml b/sonar-batch/src/test/resources/org/sonar/batch/ProjectConfiguratorTest/set_analysis_date_on_latest_analysis_if_never_analysed.xml
index a26c76aa43a..a26c76aa43a 100644
--- a/sonar-batch/src/test/resources/org/sonar/batch/ProjectConfiguratorTest/isLatestAnalysisIfNeverAnalysed.xml
+++ b/sonar-batch/src/test/resources/org/sonar/batch/ProjectConfiguratorTest/set_analysis_date_on_latest_analysis_if_never_analysed.xml