diff options
author | Julien Lancelot <julien.lancelot@gmail.com> | 2013-05-29 17:06:53 +0200 |
---|---|---|
committer | Julien Lancelot <julien.lancelot@gmail.com> | 2013-05-29 17:06:53 +0200 |
commit | a1b777f7a44e95cec2a6787d09a381462cc184b5 (patch) | |
tree | f91f06fe8408e94f79eda4946bfb3333313e4c78 /sonar-batch | |
parent | 0132ccc4f16a3cfde9a0c168a517039a0f887b23 (diff) | |
download | sonarqube-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.java | 11 | ||||
-rw-r--r-- | sonar-batch/src/test/java/org/sonar/batch/ProjectConfiguratorTest.java | 76 | ||||
-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 |