]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-5628 add medium test
authorTeryk Bellahsene <teryk.bellahsene@sonarsource.com>
Wed, 19 Nov 2014 10:15:05 +0000 (11:15 +0100)
committerTeryk Bellahsene <teryk.bellahsene@sonarsource.com>
Wed, 19 Nov 2014 10:15:05 +0000 (11:15 +0100)
server/sonar-server/src/main/java/org/sonar/server/computation/DataCleanerStep.java
server/sonar-server/src/main/java/org/sonar/server/properties/ProjectSettingsFactory.java
server/sonar-server/src/test/java/org/sonar/server/component/SnapshotTesting.java
server/sonar-server/src/test/java/org/sonar/server/computation/DataCleanerStepMediumTest.java [new file with mode: 0644]
server/sonar-server/src/test/java/org/sonar/server/computation/DataCleanerStepTest.java
server/sonar-server/src/test/java/org/sonar/server/properties/ProjectSettingsFactoryTest.java
sonar-core/src/main/java/org/sonar/core/component/ComponentDto.java
sonar-core/src/main/java/org/sonar/core/computation/dbcleaner/DefaultPurgeTask.java
sonar-core/src/main/java/org/sonar/core/purge/PurgeConfiguration.java

index 6c6b7f9a280027a8f502c7a6f36d5f3984385297..86e953a638c3534403deb5a0e3562a8478ceaf7d 100644 (file)
@@ -46,8 +46,8 @@ public class DataCleanerStep implements ComputationStep {
   public void execute(DbSession session, AnalysisReportDto report, ComponentDto project) {
     Long projectId = project.getId();
 
-    Settings settings = projectSettingsFactory.newProjectSettings(projectId, session);
-    PurgeConfiguration purgeConfiguration = newDefaultPurgeConfiguration(projectId, settings);
+    Settings settings = projectSettingsFactory.newProjectSettings(session, projectId);
+    PurgeConfiguration purgeConfiguration = newDefaultPurgeConfiguration(settings, projectId);
 
     purgeTask.purge(session, purgeConfiguration, settings);
 
index 782266222df5782cd65b86edc05658b51e81ad6b..3a9793e7fb947237ed36f12192d1370521e2bd69 100644 (file)
@@ -41,7 +41,7 @@ public class ProjectSettingsFactory implements ServerComponent {
     this.settings = settings;
   }
 
-  public Settings newProjectSettings(long projectId, DbSession session) {
+  public Settings newProjectSettings(DbSession session, long projectId) {
     List<PropertyDto> propertyList = dao.selectProjectProperties(projectId, session);
 
     return new ProjectSettings(settings, getPropertyMap(propertyList));
index ee5ac9102a15d028ddc5eae46ef0945fefca6f7c..eb27722379abc62e9c6378bc8c54e2aab3c1fa9f 100644 (file)
@@ -40,6 +40,9 @@ public class SnapshotTesting {
     return new SnapshotDto()
       .setResourceId(project.getId())
       .setRootProjectId(project.getId())
+      .setStatus(SnapshotDto.STATUS_PROCESSED)
+      .setQualifier(project.qualifier())
+      .setScope(project.scope())
       .setLast(true);
   }
 
diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/DataCleanerStepMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/DataCleanerStepMediumTest.java
new file mode 100644 (file)
index 0000000..23e8865
--- /dev/null
@@ -0,0 +1,151 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+
+package org.sonar.server.computation;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.ClassRule;
+import org.junit.Test;
+import org.sonar.api.utils.DateUtils;
+import org.sonar.core.component.ComponentDto;
+import org.sonar.core.component.SnapshotDto;
+import org.sonar.core.computation.db.AnalysisReportDto;
+import org.sonar.core.computation.db.AnalysisReportDto.Status;
+import org.sonar.core.computation.dbcleaner.DbCleanerConstants;
+import org.sonar.core.computation.dbcleaner.ProjectPurgeTask;
+import org.sonar.core.persistence.DbSession;
+import org.sonar.core.persistence.MyBatis;
+import org.sonar.core.properties.PropertyDto;
+import org.sonar.server.component.ComponentTesting;
+import org.sonar.server.component.SnapshotTesting;
+import org.sonar.server.db.DbClient;
+import org.sonar.server.issue.index.IssueIndex;
+import org.sonar.server.properties.ProjectSettingsFactory;
+import org.sonar.server.search.IndexClient;
+import org.sonar.server.tester.ServerTester;
+
+import java.util.Date;
+
+import static org.fest.assertions.Assertions.assertThat;
+
+public class DataCleanerStepMediumTest {
+
+  @ClassRule
+  public static ServerTester tester = new ServerTester();
+
+  private DataCleanerStep sut;
+  private DbClient dbClient;
+  private DbSession dbSession;
+  private IndexClient indexClient;
+  private ProjectSettingsFactory projectSettingsFactory;
+  private ProjectPurgeTask purgeTask;
+
+  @Before
+  public void before() throws Exception {
+    this.dbClient = tester.get(DbClient.class);
+    this.dbSession = dbClient.openSession(false);
+
+    this.indexClient = tester.get(IndexClient.class);
+    this.projectSettingsFactory = tester.get(ProjectSettingsFactory.class);
+    this.purgeTask = tester.get(ProjectPurgeTask.class);
+
+    this.sut = new DataCleanerStep(projectSettingsFactory, purgeTask, indexClient.get(IssueIndex.class));
+  }
+
+  @After
+  public void after() throws Exception {
+    MyBatis.closeQuietly(dbSession);
+  }
+
+  @Test
+  public void use_global_settings_when_no_other_specified() throws Exception {
+    // ARRANGE
+    Date now = new Date();
+    Date aWeekAgo = DateUtils.addDays(now, -7);
+
+    ComponentDto project = ComponentTesting.newProjectDto()
+      .setId(1L)
+      .setKey("123")
+      .setCreatedAt(aWeekAgo)
+      .setUpdatedAt(aWeekAgo);
+    dbClient.componentDao().insert(dbSession, project);
+
+    SnapshotDto snapshot = SnapshotTesting.createForProject(project)
+      .setCreatedAt(aWeekAgo)
+      .setUpdatedAt(aWeekAgo);
+    dbClient.snapshotDao().insert(dbSession, snapshot);
+
+    AnalysisReportDto report = AnalysisReportDto.newForTests(1L)
+      .setProjectKey("123")
+      .setSnapshotId(snapshot.getId())
+      .setStatus(Status.PENDING);
+    dbClient.analysisReportDao().insert(dbSession, report);
+
+    dbClient.propertiesDao().setProperty(new PropertyDto().setKey(DbCleanerConstants.WEEKS_BEFORE_DELETING_ALL_SNAPSHOTS).setValue("52"));
+    dbSession.commit();
+
+    // ACT
+    sut.execute(dbSession, report, project);
+    dbSession.commit();
+
+    // ASSERT
+    assertThat(dbClient.snapshotDao().getNullableByKey(dbSession, snapshot.getId())).isNotNull();
+  }
+
+  @Test
+  public void use_project_settings_if_specified() throws Exception {
+    // ARRANGE
+    Date now = new Date();
+    Date twoWeeksAgo = DateUtils.addDays(now, -2 * 7);
+    Date aLongTimeAgo = DateUtils.addDays(now, -365 * 7);
+
+    ComponentDto project = ComponentTesting.newProjectDto()
+      .setKey("123")
+      .setCreatedAt(aLongTimeAgo)
+      .setUpdatedAt(aLongTimeAgo);
+    dbClient.componentDao().insert(dbSession, project);
+
+    SnapshotDto snapshot = SnapshotTesting.createForProject(project)
+      .setCreatedAt(twoWeeksAgo)
+      .setUpdatedAt(twoWeeksAgo)
+      .setStatus("P")
+      .setLast(true);
+
+    dbClient.snapshotDao().insert(dbSession, snapshot);
+
+    AnalysisReportDto report = new AnalysisReportDto()
+      .setProjectKey("123")
+      .setSnapshotId(snapshot.getId())
+      .setStatus(Status.PENDING);
+    dbClient.analysisReportDao().insert(dbSession, report);
+
+    dbClient.propertiesDao().setProperty(new PropertyDto().setKey(DbCleanerConstants.WEEKS_BEFORE_DELETING_ALL_SNAPSHOTS).setValue("4"));
+    dbClient.propertiesDao().setProperty(new PropertyDto().setKey(DbCleanerConstants.WEEKS_BEFORE_DELETING_ALL_SNAPSHOTS).setValue("1").setResourceId(project.getId()));
+    dbSession.commit();
+
+    // ACT
+    sut.execute(dbSession, report, project);
+    dbSession.commit();
+
+    // ASSERT
+    assertThat(dbClient.snapshotDao().getNullableByKey(dbSession, snapshot.getId())).isNull();
+  }
+}
index 562a9ad8e42085c897cfd03813707f700df9029a..ad016a66ec1aa93df5298177082243ee65f74cbc 100644 (file)
@@ -53,7 +53,7 @@ public class DataCleanerStepTest {
     this.issueIndex = mock(IssueIndex.class);
     this.settings = mock(ProjectSettings.class);
     this.projectSettingsFactory = mock(ProjectSettingsFactory.class);
-    when(projectSettingsFactory.newProjectSettings(anyLong(), any(DbSession.class))).thenReturn(settings);
+    when(projectSettingsFactory.newProjectSettings(any(DbSession.class), anyLong())).thenReturn(settings);
     when(settings.getInt(any(String.class))).thenReturn(123);
 
     this.sut = new DataCleanerStep(projectSettingsFactory, purgeTask, issueIndex);
@@ -66,7 +66,7 @@ public class DataCleanerStepTest {
 
     sut.execute(mock(DbSession.class), report, project);
 
-    verify(projectSettingsFactory).newProjectSettings(anyLong(), any(DbSession.class));
+    verify(projectSettingsFactory).newProjectSettings(any(DbSession.class), anyLong());
     verify(purgeTask).purge(any(DbSession.class), any(PurgeConfiguration.class), any(Settings.class));
     verify(issueIndex).deleteClosedIssuesOfProjectBefore(anyString(), any(Date.class));
   }
index 45c72b01a9c7fa44f1129a0db6aba0095fe55bd9..7a02b665a6caf73da677d7a08566fc9845a0a649 100644 (file)
@@ -50,7 +50,7 @@ public class ProjectSettingsFactoryTest {
 
   @Test
   public void newProjectSettings_returns_a_ProjectSettings() throws Exception {
-    Settings projectSettings = sut.newProjectSettings(1L, mock(DbSession.class));
+    Settings projectSettings = sut.newProjectSettings(mock(DbSession.class), 1L);
 
     assertThat(projectSettings).isInstanceOf(ProjectSettings.class);
   }
index 0a25f91081a296d3b8117bcaa943da9fb88ba0b4..719cd46ba12857c2d27fc51e8683d97dca750a41 100644 (file)
@@ -243,4 +243,16 @@ public class ComponentDto extends Dto<String> implements Component {
   public int hashCode() {
     return id.hashCode();
   }
+
+  @Override
+  public ComponentDto setCreatedAt(Date datetime) {
+    super.setCreatedAt(datetime);
+    return this;
+  }
+
+  @Override
+  public ComponentDto setUpdatedAt(Date datetime) {
+    super.setUpdatedAt(datetime);
+    return this;
+  }
 }
index b405f04ae667193a2be58caedf1a41880c89d122..51128905fa07834ceb3e7a579f3018b3a10ea980 100644 (file)
@@ -103,6 +103,6 @@ public class DefaultPurgeTask implements PurgeTask {
   }
 
   public PurgeConfiguration newPurgeConfigurationOnResource(long resourceId) {
-    return newDefaultPurgeConfiguration(resourceId, settings);
+    return newDefaultPurgeConfiguration(settings, resourceId);
   }
 }
index 1078be70dbd1afe1270bb71da09ba43bf8722d92..d3fc9c1c4bd78dd554faf627a1d19f0e16c064b0 100644 (file)
@@ -49,7 +49,7 @@ public class PurgeConfiguration {
     this.system2 = system2;
   }
 
-  public static PurgeConfiguration newDefaultPurgeConfiguration(long resourceId, Settings settings) {
+  public static PurgeConfiguration newDefaultPurgeConfiguration(Settings settings, long resourceId) {
     String[] scopes = new String[] {Scopes.FILE};
     if (settings.getBoolean(DbCleanerConstants.PROPERTY_CLEAN_DIRECTORY)) {
       scopes = new String[] {Scopes.DIRECTORY, Scopes.FILE};