diff options
author | Teryk Bellahsene <teryk.bellahsene@sonarsource.com> | 2014-10-23 17:15:00 +0200 |
---|---|---|
committer | Teryk Bellahsene <teryk.bellahsene@sonarsource.com> | 2014-10-27 09:08:39 +0100 |
commit | 4c64f4f00be61229d4c4c8be8f8bec9b25df2bac (patch) | |
tree | b5844e988c063e80cb3cc6cede99d4f68a61fb7f /plugins/sonar-dbcleaner-plugin | |
parent | 9c467f71a35ebb691acbb77bb1de3d825c4b109d (diff) | |
download | sonarqube-4c64f4f00be61229d4c4c8be8f8bec9b25df2bac.tar.gz sonarqube-4c64f4f00be61229d4c4c8be8f8bec9b25df2bac.zip |
SONAR-5628 - Compute Engine - Move DbCleaner
Diffstat (limited to 'plugins/sonar-dbcleaner-plugin')
19 files changed, 36 insertions, 1127 deletions
diff --git a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/DbCleanerPlugin.java b/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/DbCleanerPlugin.java index 01397e6be89..56cad6f8a84 100644 --- a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/DbCleanerPlugin.java +++ b/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/DbCleanerPlugin.java @@ -17,98 +17,27 @@ * 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.plugins.dbcleaner; import com.google.common.collect.ImmutableList; -import org.sonar.api.CoreProperties; -import org.sonar.api.PropertyType; +import com.google.common.collect.Lists; import org.sonar.api.SonarPlugin; import org.sonar.api.config.PropertyDefinition; -import org.sonar.api.resources.Qualifiers; -import org.sonar.plugins.dbcleaner.api.DbCleanerConstants; -import org.sonar.plugins.dbcleaner.period.DefaultPeriodCleaner; +import org.sonar.core.computation.dbcleaner.period.DefaultPeriodCleaner; -import java.util.Arrays; import java.util.List; +@Deprecated public final class DbCleanerPlugin extends SonarPlugin { + static List<PropertyDefinition> propertyDefinitions() { + return Lists.newArrayList(); + } + @Override public List getExtensions() { - return ImmutableList.builder().add(DefaultPeriodCleaner.class, DefaultPurgeTask.class, ProjectPurgePostJob.class) + return ImmutableList.builder().add(DefaultPeriodCleaner.class, DeprecatedDefaultPurgeTask.class) .addAll(propertyDefinitions()).build(); } - - static List<PropertyDefinition> propertyDefinitions() { - return Arrays.asList( - PropertyDefinition.builder(DbCleanerConstants.PROPERTY_CLEAN_DIRECTORY) - .defaultValue("true") - .name("Clean directory/package history") - .description("If set to true, no history is kept at directory/package level. Setting this to false can cause database bloat.") - .type(PropertyType.BOOLEAN) - .onQualifiers(Qualifiers.PROJECT) - .category(CoreProperties.CATEGORY_GENERAL) - .subCategory(CoreProperties.SUBCATEGORY_DATABASE_CLEANER) - .index(1) - .build(), - - PropertyDefinition.builder(DbCleanerConstants.DAYS_BEFORE_DELETING_CLOSED_ISSUES) - .defaultValue("30") - .name("Delete closed issues after") - .description("Issues that have been closed for more than this number of days will be deleted.") - .type(PropertyType.INTEGER) - .onQualifiers(Qualifiers.PROJECT) - .category(CoreProperties.CATEGORY_GENERAL) - .subCategory(CoreProperties.SUBCATEGORY_DATABASE_CLEANER) - .index(2) - .build(), - - PropertyDefinition.builder(DbCleanerConstants.HOURS_BEFORE_KEEPING_ONLY_ONE_SNAPSHOT_BY_DAY) - .defaultValue("24") - .name("Keep only one snapshot a day after") - .description("After this number of hours, if there are several snapshots during the same day, " - + "the DbCleaner keeps the most recent one and fully deletes the other ones.") - .type(PropertyType.INTEGER) - .onQualifiers(Qualifiers.PROJECT) - .category(CoreProperties.CATEGORY_GENERAL) - .subCategory(CoreProperties.SUBCATEGORY_DATABASE_CLEANER) - .index(3) - .build(), - - PropertyDefinition.builder(DbCleanerConstants.WEEKS_BEFORE_KEEPING_ONLY_ONE_SNAPSHOT_BY_WEEK) - .defaultValue("4") - .name("Keep only one snapshot a week after") - .description("After this number of weeks, if there are several snapshots during the same week, " - + "the DbCleaner keeps the most recent one and fully deletes the other ones") - .type(PropertyType.INTEGER) - .onQualifiers(Qualifiers.PROJECT) - .category(CoreProperties.CATEGORY_GENERAL) - .subCategory(CoreProperties.SUBCATEGORY_DATABASE_CLEANER) - .index(4) - .build(), - - PropertyDefinition.builder(DbCleanerConstants.WEEKS_BEFORE_KEEPING_ONLY_ONE_SNAPSHOT_BY_MONTH) - .defaultValue("52") - .name("Keep only one snapshot a month after") - .description("After this number of weeks, if there are several snapshots during the same month, " - + "the DbCleaner keeps the most recent one and fully deletes the other ones.") - .type(PropertyType.INTEGER) - .onQualifiers(Qualifiers.PROJECT) - .category(CoreProperties.CATEGORY_GENERAL) - .subCategory(CoreProperties.SUBCATEGORY_DATABASE_CLEANER) - .index(5) - .build(), - - PropertyDefinition.builder(DbCleanerConstants.WEEKS_BEFORE_DELETING_ALL_SNAPSHOTS) - .defaultValue("260") - .name("Delete all snapshots after") - .description("After this number of weeks, all snapshots are fully deleted.") - .type(PropertyType.INTEGER) - .onQualifiers(Qualifiers.PROJECT) - .category(CoreProperties.CATEGORY_GENERAL) - .subCategory(CoreProperties.SUBCATEGORY_DATABASE_CLEANER) - .index(6) - .build() - ); - } } diff --git a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/DefaultPurgeTask.java b/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/DefaultPurgeTask.java deleted file mode 100644 index 5636515cb3e..00000000000 --- a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/DefaultPurgeTask.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * 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.plugins.dbcleaner; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.sonar.api.CoreProperties; -import org.sonar.api.config.Settings; -import org.sonar.api.resources.Scopes; -import org.sonar.api.utils.TimeUtils; -import org.sonar.core.purge.PurgeConfiguration; -import org.sonar.core.purge.PurgeDao; -import org.sonar.core.purge.PurgeProfiler; -import org.sonar.plugins.dbcleaner.api.DbCleanerConstants; -import org.sonar.plugins.dbcleaner.api.PurgeTask; -import org.sonar.plugins.dbcleaner.period.DefaultPeriodCleaner; - -/** - * @since 2.14 - */ -public class DefaultPurgeTask implements PurgeTask { - private static final Logger LOG = LoggerFactory.getLogger(DefaultPurgeTask.class); - - private PurgeDao purgeDao; - private Settings settings; - private DefaultPeriodCleaner periodCleaner; - private final PurgeProfiler profiler; - - public DefaultPurgeTask(PurgeDao purgeDao, Settings settings, DefaultPeriodCleaner periodCleaner, PurgeProfiler profiler) { - this.purgeDao = purgeDao; - this.settings = settings; - this.periodCleaner = periodCleaner; - this.profiler = profiler; - } - - @Override - public PurgeTask delete(long resourceId) { - purgeDao.deleteResourceTree(resourceId); - return this; - } - - @Override - public PurgeTask purge(long resourceId) { - long start = System.currentTimeMillis(); - profiler.reset(); - cleanHistoricalData(resourceId); - doPurge(resourceId); - if (settings.getBoolean(CoreProperties.PROFILING_LOG_PROPERTY)) { - long duration = System.currentTimeMillis() - start; - LOG.info("\n -------- Profiling for purge: " + TimeUtils.formatDuration(duration) + " --------\n"); - profiler.dump(duration, LOG); - LOG.info("\n -------- End of profiling for purge --------\n"); - } - return this; - } - - private void cleanHistoricalData(long resourceId) { - try { - periodCleaner.clean(resourceId); - } catch (Exception e) { - // purge errors must no fail the batch - LOG.error("Fail to clean historical data [id=" + resourceId + "]", e); - } - } - - private void doPurge(long resourceId) { - try { - purgeDao.purge(newConf(resourceId)); - } catch (Exception e) { - // purge errors must no fail the batch - LOG.error("Fail to purge data [id=" + resourceId + "]", e); - } - } - - private PurgeConfiguration newConf(long resourceId) { - String[] scopes = new String[] {Scopes.FILE}; - if (settings.getBoolean(DbCleanerConstants.PROPERTY_CLEAN_DIRECTORY)) { - scopes = new String[] {Scopes.DIRECTORY, Scopes.FILE}; - } - return new PurgeConfiguration(resourceId, scopes, settings.getInt(DbCleanerConstants.DAYS_BEFORE_DELETING_CLOSED_ISSUES)); - } -} diff --git a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/ProjectPurgePostJob.java b/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/DeprecatedDefaultPurgeTask.java index 1a412bcda8a..50e340bc1c1 100644 --- a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/ProjectPurgePostJob.java +++ b/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/DeprecatedDefaultPurgeTask.java @@ -17,25 +17,36 @@ * 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.plugins.dbcleaner; -import org.sonar.api.batch.PostJob; -import org.sonar.api.batch.SensorContext; -import org.sonar.api.resources.Project; -import org.sonar.core.DryRunIncompatible; +import org.sonar.api.config.Settings; +import org.sonar.core.computation.dbcleaner.DefaultPurgeTask; +import org.sonar.core.computation.dbcleaner.period.DefaultPeriodCleaner; +import org.sonar.core.purge.PurgeDao; +import org.sonar.core.purge.PurgeProfiler; import org.sonar.plugins.dbcleaner.api.PurgeTask; -@DryRunIncompatible -public class ProjectPurgePostJob implements PostJob { +/** + * @since 2.14 + */ +@Deprecated +public class DeprecatedDefaultPurgeTask implements PurgeTask { + private final DefaultPurgeTask defaultPurgeTask; - private PurgeTask purgeTask; + public DeprecatedDefaultPurgeTask(PurgeDao purgeDao, Settings settings, DefaultPeriodCleaner periodCleaner, PurgeProfiler profiler) { + defaultPurgeTask = new DefaultPurgeTask(purgeDao, settings, periodCleaner, profiler); + } - public ProjectPurgePostJob(PurgeTask purgeTask) { - this.purgeTask = purgeTask; + @Override + public DeprecatedDefaultPurgeTask delete(long resourceId) { + defaultPurgeTask.delete(resourceId); + return this; } @Override - public void executeOn(final Project project, SensorContext context) { - purgeTask.purge(project.getId()); + public DeprecatedDefaultPurgeTask purge(long resourceId) { + defaultPurgeTask.purge(resourceId); + return this; } } diff --git a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/api/DbCleanerConstants.java b/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/api/DbCleanerConstants.java index 7f77420e2f8..881fca768a3 100644 --- a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/api/DbCleanerConstants.java +++ b/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/api/DbCleanerConstants.java @@ -19,15 +19,6 @@ */ package org.sonar.plugins.dbcleaner.api; -public interface DbCleanerConstants { - - String PLUGIN_KEY = "dbcleaner"; - String PLUGIN_NAME = "DbCleaner"; - String PROPERTY_CLEAN_DIRECTORY = "sonar.dbcleaner.cleanDirectory"; - - String HOURS_BEFORE_KEEPING_ONLY_ONE_SNAPSHOT_BY_DAY = "sonar.dbcleaner.hoursBeforeKeepingOnlyOneSnapshotByDay"; - String WEEKS_BEFORE_KEEPING_ONLY_ONE_SNAPSHOT_BY_WEEK = "sonar.dbcleaner.weeksBeforeKeepingOnlyOneSnapshotByWeek"; - String WEEKS_BEFORE_KEEPING_ONLY_ONE_SNAPSHOT_BY_MONTH = "sonar.dbcleaner.weeksBeforeKeepingOnlyOneSnapshotByMonth"; - String WEEKS_BEFORE_DELETING_ALL_SNAPSHOTS = "sonar.dbcleaner.weeksBeforeDeletingAllSnapshots"; - String DAYS_BEFORE_DELETING_CLOSED_ISSUES = "sonar.dbcleaner.daysBeforeDeletingClosedIssues"; +@Deprecated +public interface DbCleanerConstants extends org.sonar.core.computation.dbcleaner.DbCleanerConstants { } diff --git a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/api/PurgeTask.java b/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/api/PurgeTask.java index eec483cc45e..810608f6069 100644 --- a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/api/PurgeTask.java +++ b/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/api/PurgeTask.java @@ -19,18 +19,18 @@ */ package org.sonar.plugins.dbcleaner.api; -import org.sonar.api.task.TaskExtension; - import com.google.common.annotations.Beta; +import org.sonar.api.task.TaskExtension; /** * @since 2.14 */ @Beta +@Deprecated public interface PurgeTask extends TaskExtension { /** * Purges the data related to a tree of resources. - * + * <p/> * Exceptions are logged and are not thrown again, so this method fails only on {@link Error}s. * * @param resourceId the root of the tree diff --git a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/DefaultPeriodCleaner.java b/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/DefaultPeriodCleaner.java deleted file mode 100644 index ade98c3dbaf..00000000000 --- a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/DefaultPeriodCleaner.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * 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.plugins.dbcleaner.period; - -import com.google.common.annotations.VisibleForTesting; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.sonar.api.config.Settings; -import org.sonar.api.resources.Project; -import org.sonar.api.task.TaskExtension; -import org.sonar.api.utils.DateUtils; -import org.sonar.core.purge.PurgeDao; -import org.sonar.core.purge.PurgeSnapshotQuery; -import org.sonar.core.purge.PurgeableSnapshotDto; - -import java.util.List; - -public class DefaultPeriodCleaner implements TaskExtension { - - private static final Logger LOG = LoggerFactory.getLogger(DefaultPeriodCleaner.class); - private PurgeDao purgeDao; - private Settings settings; - - public DefaultPeriodCleaner(PurgeDao purgeDao, Settings settings) { - this.purgeDao = purgeDao; - this.settings = settings; - } - - public void purge(Project project, int projectSnapshotId) { - clean(project.getId()); - } - - public void clean(long projectId) { - doClean(projectId, new Filters(settings).all()); - } - - @VisibleForTesting - void doClean(long projectId, List<Filter> filters) { - List<PurgeableSnapshotDto> history = selectProjectSnapshots(projectId); - for (Filter filter : filters) { - filter.log(); - delete(filter.filter(history)); - } - } - - private void delete(List<PurgeableSnapshotDto> snapshots) { - for (PurgeableSnapshotDto snapshot : snapshots) { - LOG.info("<- Delete snapshot: " + DateUtils.formatDateTime(snapshot.getDate()) + " [" + snapshot.getSnapshotId() + "]"); - purgeDao.deleteSnapshots(PurgeSnapshotQuery.create().setRootSnapshotId(snapshot.getSnapshotId())); - purgeDao.deleteSnapshots(PurgeSnapshotQuery.create().setId(snapshot.getSnapshotId())); - } - } - - private List<PurgeableSnapshotDto> selectProjectSnapshots(long resourceId) { - return purgeDao.selectPurgeableSnapshots(resourceId); - } -} diff --git a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/DeleteAllFilter.java b/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/DeleteAllFilter.java deleted file mode 100644 index 18a795e1ee7..00000000000 --- a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/DeleteAllFilter.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * 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.plugins.dbcleaner.period; - -import com.google.common.collect.Lists; -import org.slf4j.LoggerFactory; -import org.sonar.api.utils.DateUtils; -import org.sonar.core.purge.PurgeableSnapshotDto; - -import java.util.Date; -import java.util.List; - -class DeleteAllFilter implements Filter { - private final Date before; - - public DeleteAllFilter(Date before) { - this.before = before; - } - - @Override - public List<PurgeableSnapshotDto> filter(List<PurgeableSnapshotDto> history) { - List<PurgeableSnapshotDto> result = Lists.newArrayList(); - for (PurgeableSnapshotDto snapshot : history) { - if (snapshot.getDate().before(before)) { - result.add(snapshot); - } - } - return result; - } - - @Override - public void log() { - LoggerFactory.getLogger(getClass()).info("-> Delete data prior to: " + DateUtils.formatDate(before)); - } -} diff --git a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/Filter.java b/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/Filter.java deleted file mode 100644 index 4d4419be8c4..00000000000 --- a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/Filter.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * 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.plugins.dbcleaner.period; - -import org.sonar.core.purge.PurgeableSnapshotDto; - -import java.util.List; - -interface Filter { - List<PurgeableSnapshotDto> filter(List<PurgeableSnapshotDto> snapshots); - - void log(); -} diff --git a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/Filters.java b/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/Filters.java deleted file mode 100644 index c291cd8fec4..00000000000 --- a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/Filters.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * 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.plugins.dbcleaner.period; - -import com.google.common.collect.Lists; -import org.apache.commons.lang.time.DateUtils; -import org.sonar.api.config.Settings; -import org.sonar.plugins.dbcleaner.api.DbCleanerConstants; - -import java.util.Calendar; -import java.util.Date; -import java.util.List; - -class Filters { - private final List<Filter> all = Lists.newArrayList(); - - Filters(Settings settings) { - Date dateToStartKeepingOneSnapshotByDay = getDateFromHours(settings, DbCleanerConstants.HOURS_BEFORE_KEEPING_ONLY_ONE_SNAPSHOT_BY_DAY); - Date dateToStartKeepingOneSnapshotByWeek = getDateFromWeeks(settings, DbCleanerConstants.WEEKS_BEFORE_KEEPING_ONLY_ONE_SNAPSHOT_BY_WEEK); - Date dateToStartKeepingOneSnapshotByMonth = getDateFromWeeks(settings, DbCleanerConstants.WEEKS_BEFORE_KEEPING_ONLY_ONE_SNAPSHOT_BY_MONTH); - Date dateToStartDeletingAllSnapshots = getDateFromWeeks(settings, DbCleanerConstants.WEEKS_BEFORE_DELETING_ALL_SNAPSHOTS); - - all.add(new KeepOneFilter(dateToStartKeepingOneSnapshotByWeek, dateToStartKeepingOneSnapshotByDay, Calendar.DAY_OF_YEAR, "day")); - all.add(new KeepOneFilter(dateToStartKeepingOneSnapshotByMonth, dateToStartKeepingOneSnapshotByWeek, Calendar.WEEK_OF_YEAR, "week")); - all.add(new KeepOneFilter(dateToStartDeletingAllSnapshots, dateToStartKeepingOneSnapshotByMonth, Calendar.MONTH, "month")); - all.add(new DeleteAllFilter(dateToStartDeletingAllSnapshots)); - } - - List<Filter> all() { - return all; - } - - static Date getDateFromWeeks(Settings settings, String propertyKey) { - int weeks = settings.getInt(propertyKey); - return DateUtils.addWeeks(new Date(), -weeks); - } - - static Date getDateFromHours(Settings settings, String propertyKey) { - int hours = settings.getInt(propertyKey); - return DateUtils.addHours(new Date(), -hours); - } -} diff --git a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/Interval.java b/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/Interval.java deleted file mode 100644 index 18b02c38d08..00000000000 --- a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/Interval.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * 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.plugins.dbcleaner.period; - -import com.google.common.collect.Lists; -import org.apache.commons.lang.time.DateUtils; -import org.sonar.core.purge.PurgeableSnapshotDto; - -import java.util.Calendar; -import java.util.Date; -import java.util.GregorianCalendar; -import java.util.List; - -final class Interval { - List<PurgeableSnapshotDto> snapshots = Lists.newArrayList(); - - void add(PurgeableSnapshotDto snapshot) { - snapshots.add(snapshot); - } - - List<PurgeableSnapshotDto> get() { - return snapshots; - } - - int count() { - return snapshots.size(); - } - - static List<Interval> group(List<PurgeableSnapshotDto> snapshots, Date start, Date end, int calendarField) { - List<Interval> intervals = Lists.newArrayList(); - - GregorianCalendar calendar = new GregorianCalendar(); - int lastYear = -1; - int lastFieldValue = -1; - Interval currentInterval = null; - - for (PurgeableSnapshotDto snapshot : snapshots) { - if (!DateUtils.isSameDay(start, snapshot.getDate()) && snapshot.getDate().after(start) && - (snapshot.getDate().before(end) || DateUtils.isSameDay(end, snapshot.getDate()))) { - calendar.setTime(snapshot.getDate()); - int currentFieldValue = calendar.get(calendarField); - int currentYear = calendar.get(Calendar.YEAR); - if (lastYear!=currentYear || lastFieldValue != currentFieldValue) { - currentInterval = new Interval(); - intervals.add(currentInterval); - } - lastFieldValue = currentFieldValue; - lastYear = currentYear; - if (currentInterval != null) { - currentInterval.add(snapshot); - } - } - } - return intervals; - } -} diff --git a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/KeepOneFilter.java b/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/KeepOneFilter.java deleted file mode 100644 index 81249fdd929..00000000000 --- a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/KeepOneFilter.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * 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.plugins.dbcleaner.period; - -import com.google.common.annotations.VisibleForTesting; -import com.google.common.collect.Lists; -import org.slf4j.LoggerFactory; -import org.sonar.api.utils.DateUtils; -import org.sonar.core.purge.PurgeableSnapshotDto; - -import java.util.Date; -import java.util.List; - -class KeepOneFilter implements Filter { - - private final Date start; - private final Date end; - private final int dateField; - private final String label; - - KeepOneFilter(Date start, Date end, int calendarField, String label) { - this.start = start; - this.end = end; - this.dateField = calendarField; - this.label = label; - } - - @Override - public List<PurgeableSnapshotDto> filter(List<PurgeableSnapshotDto> history) { - List<Interval> intervals = Interval.group(history, start, end, dateField); - List<PurgeableSnapshotDto> result = Lists.newArrayList(); - for (Interval interval : intervals) { - appendSnapshotsToDelete(interval, result); - } - - return result; - } - - @Override - public void log() { - LoggerFactory.getLogger(getClass()).info("-> Keep one snapshot per " + label + " between " + DateUtils.formatDate(start) + " and " + DateUtils.formatDate(end)); - } - - private void appendSnapshotsToDelete(Interval interval, List<PurgeableSnapshotDto> toDelete) { - if (interval.count() > 1) { - List<PurgeableSnapshotDto> deletables = Lists.newArrayList(); - List<PurgeableSnapshotDto> toKeep = Lists.newArrayList(); - for (PurgeableSnapshotDto snapshot : interval.get()) { - if (isDeletable(snapshot)) { - deletables.add(snapshot); - } else { - toKeep.add(snapshot); - } - } - - if (!toKeep.isEmpty()) { - toDelete.addAll(deletables); - - } else if (deletables.size() > 1) { - // keep one snapshot - toDelete.addAll(deletables.subList(1, deletables.size())); - } - } - } - - @VisibleForTesting - static boolean isDeletable(PurgeableSnapshotDto snapshot) { - return !snapshot.isLast() && !snapshot.hasEvents(); - } - -} diff --git a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/package-info.java b/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/package-info.java deleted file mode 100644 index f5b97cfc92b..00000000000 --- a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/package-info.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * 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. - */ - -@ParametersAreNonnullByDefault -package org.sonar.plugins.dbcleaner.period; - -import javax.annotation.ParametersAreNonnullByDefault; - diff --git a/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/DbCleanerPluginTest.java b/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/DbCleanerPluginTest.java deleted file mode 100644 index da6ddc93bcd..00000000000 --- a/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/DbCleanerPluginTest.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * 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.plugins.dbcleaner; - -import org.junit.Test; - -import static org.fest.assertions.Assertions.assertThat; - -public class DbCleanerPluginTest { - - @Test - public void shouldGetExtensions() { - assertThat(new DbCleanerPlugin().getExtensions()).hasSize(9); - } -} diff --git a/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/DbCleanerTestUtils.java b/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/DbCleanerTestUtils.java deleted file mode 100644 index 944c34b3e95..00000000000 --- a/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/DbCleanerTestUtils.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * 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.plugins.dbcleaner; - -import org.sonar.api.utils.DateUtils; -import org.sonar.core.purge.PurgeableSnapshotDto; - -public final class DbCleanerTestUtils { - - private DbCleanerTestUtils() { - } - - public static PurgeableSnapshotDto createSnapshotWithDate(long snapshotId, String date) { - PurgeableSnapshotDto snapshot = new PurgeableSnapshotDto(); - snapshot.setSnapshotId(snapshotId); - snapshot.setDate(DateUtils.parseDate(date)); - return snapshot; - } - - public static PurgeableSnapshotDto createSnapshotWithDateTime(long snapshotId, String datetime) { - PurgeableSnapshotDto snapshot = new PurgeableSnapshotDto(); - snapshot.setSnapshotId(snapshotId); - snapshot.setDate(DateUtils.parseDateTime(datetime)); - return snapshot; - } - -} diff --git a/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/DefaultPurgeTaskTest.java b/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/DefaultPurgeTaskTest.java deleted file mode 100644 index 7d6e48bbcce..00000000000 --- a/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/DefaultPurgeTaskTest.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * 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.plugins.dbcleaner; - -import ch.qos.logback.classic.Logger; -import org.junit.Test; -import org.mockito.ArgumentMatcher; -import org.sonar.api.CoreProperties; -import org.sonar.api.config.PropertyDefinitions; -import org.sonar.api.config.Settings; -import org.sonar.api.resources.Scopes; -import org.sonar.core.purge.PurgeConfiguration; -import org.sonar.core.purge.PurgeDao; -import org.sonar.core.purge.PurgeProfiler; -import org.sonar.plugins.dbcleaner.api.DbCleanerConstants; -import org.sonar.plugins.dbcleaner.period.DefaultPeriodCleaner; - -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.anyLong; -import static org.mockito.Matchers.argThat; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -public class DefaultPurgeTaskTest { - @Test - public void shouldNotDeleteHistoricalDataOfDirectories() { - PurgeDao purgeDao = mock(PurgeDao.class); - Settings settings = new Settings(new PropertyDefinitions(DbCleanerPlugin.propertyDefinitions())); - settings.setProperty(DbCleanerConstants.PROPERTY_CLEAN_DIRECTORY, "false"); - DefaultPurgeTask task = new DefaultPurgeTask(purgeDao, settings, mock(DefaultPeriodCleaner.class), mock(PurgeProfiler.class)); - - task.purge(1L); - - verify(purgeDao).purge(argThat(new ArgumentMatcher<PurgeConfiguration>() { - @Override - public boolean matches(Object o) { - PurgeConfiguration conf = (PurgeConfiguration) o; - return conf.rootProjectId() == 1L && conf.scopesWithoutHistoricalData().length == 1 && conf.scopesWithoutHistoricalData()[0].equals(Scopes.FILE); - } - })); - } - - @Test - public void shouldDeleteHistoricalDataOfDirectoriesByDefault() { - PurgeDao purgeDao = mock(PurgeDao.class); - Settings settings = new Settings(new PropertyDefinitions(DbCleanerPlugin.propertyDefinitions())); - DefaultPurgeTask task = new DefaultPurgeTask(purgeDao, settings, mock(DefaultPeriodCleaner.class), mock(PurgeProfiler.class)); - - task.purge(1L); - - verify(purgeDao).purge(argThat(new ArgumentMatcher<PurgeConfiguration>() { - @Override - public boolean matches(Object o) { - PurgeConfiguration conf = (PurgeConfiguration) o; - return conf.rootProjectId() == 1L && - conf.scopesWithoutHistoricalData().length == 2 && - conf.scopesWithoutHistoricalData()[0].equals(Scopes.DIRECTORY) && - conf.scopesWithoutHistoricalData()[1].equals(Scopes.FILE); - } - })); - } - - @Test - public void shouldNotFailOnErrors() { - PurgeDao purgeDao = mock(PurgeDao.class); - when(purgeDao.purge(any(PurgeConfiguration.class))).thenThrow(new RuntimeException()); - DefaultPurgeTask task = new DefaultPurgeTask(purgeDao, new Settings(), mock(DefaultPeriodCleaner.class), mock(PurgeProfiler.class)); - - task.purge(1L); - - verify(purgeDao, times(1)).purge(any(PurgeConfiguration.class)); - } - - @Test - public void shouldDumpProfiling() { - PurgeConfiguration conf = new PurgeConfiguration(1L, new String[0], 30); - PurgeDao purgeDao = mock(PurgeDao.class); - when(purgeDao.purge(conf)).thenThrow(new RuntimeException()); - Settings settings = new Settings(new PropertyDefinitions(DbCleanerPlugin.propertyDefinitions())); - settings.setProperty(CoreProperties.PROFILING_LOG_PROPERTY, true); - PurgeProfiler profiler = mock(PurgeProfiler.class); - - DefaultPurgeTask task = new DefaultPurgeTask(purgeDao, settings, mock(DefaultPeriodCleaner.class), profiler); - task.purge(1L); - - verify(profiler).dump(anyLong(), any(Logger.class)); - } -} diff --git a/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/period/DefaultPeriodCleanerTest.java b/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/period/DefaultPeriodCleanerTest.java deleted file mode 100644 index c252c3bfb22..00000000000 --- a/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/period/DefaultPeriodCleanerTest.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * 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.plugins.dbcleaner.period; - -import org.apache.commons.lang.ObjectUtils; -import org.hamcrest.BaseMatcher; -import org.junit.Test; -import org.mockito.ArgumentMatcher; -import org.mockito.invocation.InvocationOnMock; -import org.mockito.stubbing.Answer; -import org.sonar.api.config.Settings; -import org.sonar.core.purge.PurgeDao; -import org.sonar.core.purge.PurgeSnapshotQuery; -import org.sonar.core.purge.PurgeableSnapshotDto; - -import java.util.Arrays; -import java.util.Date; - -import static org.mockito.Matchers.anyListOf; -import static org.mockito.Matchers.argThat; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -public class DefaultPeriodCleanerTest { - - - @Test - public void doClean() { - PurgeDao dao = mock(PurgeDao.class); - when(dao.selectPurgeableSnapshots(123L)).thenReturn(Arrays.asList( - new PurgeableSnapshotDto().setSnapshotId(999L).setDate(new Date()))); - Filter filter1 = newLazyFilter(); - Filter filter2 = newLazyFilter(); - - DefaultPeriodCleaner cleaner = new DefaultPeriodCleaner(dao, mock(Settings.class)); - cleaner.doClean(123L, Arrays.asList(filter1, filter2)); - - verify(filter1).log(); - verify(filter2).log(); - verify(dao, times(2)).deleteSnapshots(argThat(newRootSnapshotQuery())); - verify(dao, times(2)).deleteSnapshots(argThat(newSnapshotIdQuery())); - } - - private BaseMatcher<PurgeSnapshotQuery> newRootSnapshotQuery() { - return new ArgumentMatcher<PurgeSnapshotQuery>() { - @Override - public boolean matches(Object o) { - PurgeSnapshotQuery query = (PurgeSnapshotQuery) o; - return ObjectUtils.equals(query.getRootSnapshotId(), 999L); - } - }; - } - - private BaseMatcher<PurgeSnapshotQuery> newSnapshotIdQuery() { - return new ArgumentMatcher<PurgeSnapshotQuery>() { - @Override - public boolean matches(Object o) { - PurgeSnapshotQuery query = (PurgeSnapshotQuery) o; - return ObjectUtils.equals(query.getId(), 999L); - } - }; - } - - private Filter newLazyFilter() { - Filter filter1 = mock(Filter.class); - when(filter1.filter(anyListOf(PurgeableSnapshotDto.class))).thenAnswer(new Answer<Object>() { - public Object answer(InvocationOnMock invocation) throws Throwable { - return invocation.getArguments()[0]; - } - }); - return filter1; - } -} diff --git a/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/period/DeleteAllFilterTest.java b/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/period/DeleteAllFilterTest.java deleted file mode 100644 index 12967c16951..00000000000 --- a/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/period/DeleteAllFilterTest.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * 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.plugins.dbcleaner.period; - -import org.junit.Test; -import org.sonar.api.utils.DateUtils; -import org.sonar.core.purge.PurgeableSnapshotDto; -import org.sonar.plugins.dbcleaner.DbCleanerTestUtils; - -import java.util.Arrays; -import java.util.List; - -import static org.fest.assertions.Assertions.assertThat; - -public class DeleteAllFilterTest { - - @Test - public void shouldDeleteAllSnapshotsPriorToDate() { - Filter filter = new DeleteAllFilter(DateUtils.parseDate("2011-12-25")); - - List<PurgeableSnapshotDto> toDelete = filter.filter(Arrays.asList( - DbCleanerTestUtils.createSnapshotWithDate(1L, "2010-01-01"), - DbCleanerTestUtils.createSnapshotWithDate(2L, "2010-12-25"), - DbCleanerTestUtils.createSnapshotWithDate(3L, "2012-01-01") - )); - - assertThat(toDelete).onProperty("snapshotId").containsOnly(1L, 2L); - } -} diff --git a/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/period/IntervalTest.java b/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/period/IntervalTest.java deleted file mode 100644 index 5a519f721f1..00000000000 --- a/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/period/IntervalTest.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * 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.plugins.dbcleaner.period; - -import org.junit.Test; -import org.sonar.api.utils.DateUtils; -import org.sonar.core.purge.PurgeableSnapshotDto; - -import java.util.Arrays; -import java.util.Calendar; -import java.util.GregorianCalendar; -import java.util.List; - -import static org.hamcrest.Matchers.is; -import static org.junit.Assert.assertThat; -import static org.sonar.plugins.dbcleaner.DbCleanerTestUtils.createSnapshotWithDate; -import static org.sonar.plugins.dbcleaner.DbCleanerTestUtils.createSnapshotWithDateTime; - -public class IntervalTest { - @Test - public void shouldGroupByIntervals() { - List<PurgeableSnapshotDto> snapshots = Arrays.asList( - createSnapshotWithDate(1L, "2011-04-03"), - - createSnapshotWithDate(2L, "2011-05-01"), - createSnapshotWithDate(3L, "2011-05-19"), - - createSnapshotWithDate(4L, "2011-06-02"), - createSnapshotWithDate(5L, "2011-06-20"), - - createSnapshotWithDate(6L, "2012-06-29") // out of scope - ); - - List<Interval> intervals = Interval.group(snapshots, DateUtils.parseDate("2010-01-01"), DateUtils.parseDate("2011-12-31"), Calendar.MONTH); - assertThat(intervals.size(), is(3)); - - assertThat(intervals.get(0).count(), is(1)); - assertThat(calendarField(intervals.get(0), Calendar.MONTH), is(Calendar.APRIL)); - - assertThat(intervals.get(1).count(), is(2)); - assertThat(calendarField(intervals.get(1), Calendar.MONTH), is(Calendar.MAY)); - - assertThat(intervals.get(2).count(), is(2)); - assertThat(calendarField(intervals.get(2), Calendar.MONTH), is(Calendar.JUNE)); - } - - @Test - public void shouldNotJoinMonthsOfDifferentYears() { - List<PurgeableSnapshotDto> snapshots = Arrays.asList( - createSnapshotWithDate(1L, "2010-04-03"), - createSnapshotWithDate(2L, "2011-04-13") - ); - - List<Interval> intervals = Interval.group(snapshots, DateUtils.parseDate("2010-01-01"), DateUtils.parseDate("2011-12-31"), Calendar.MONTH); - assertThat(intervals.size(), is(2)); - - assertThat(intervals.get(0).count(), is(1)); - assertThat(calendarField(intervals.get(0), Calendar.MONTH), is(Calendar.APRIL)); - assertThat(calendarField(intervals.get(0), Calendar.YEAR), is(2010)); - - assertThat(intervals.get(1).count(), is(1)); - assertThat(calendarField(intervals.get(1), Calendar.MONTH), is(Calendar.APRIL)); - assertThat(calendarField(intervals.get(1), Calendar.YEAR), is(2011)); - } - - @Test - public void shouldIgnoreTimeWhenGroupingByIntervals() { - List<PurgeableSnapshotDto> snapshots = Arrays.asList( - createSnapshotWithDateTime(1L, "2011-05-25T16:16:48+0100"), - createSnapshotWithDateTime(2L, "2012-01-26T16:16:48+0100"), - createSnapshotWithDateTime(3L, "2012-01-27T16:16:48+0100") - ); - - List<Interval> intervals = Interval.group(snapshots, DateUtils.parseDate("2011-05-25"), DateUtils.parseDate("2012-01-26"), Calendar.MONTH); - assertThat(intervals.size(), is(1)); - assertThat(intervals.get(0).count(), is(1)); - assertThat(intervals.get(0).get().get(0).getSnapshotId(), is(2L)); - } - - static int calendarField(Interval interval, int field) { - if (interval.count() == 0) { - return -1; - } - - PurgeableSnapshotDto first = interval.get().iterator().next(); - GregorianCalendar cal = new GregorianCalendar(); - cal.setTime(first.getDate()); - return cal.get(field); - } -} diff --git a/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/period/KeepOneFilterTest.java b/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/period/KeepOneFilterTest.java deleted file mode 100644 index 4a9ecd48ea8..00000000000 --- a/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/period/KeepOneFilterTest.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * 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.plugins.dbcleaner.period; - -import com.google.common.base.Function; -import com.google.common.collect.Iterables; -import org.junit.Test; -import org.sonar.api.utils.DateUtils; -import org.sonar.core.purge.PurgeableSnapshotDto; - -import javax.annotation.Nullable; - -import java.util.Arrays; -import java.util.Calendar; -import java.util.List; - -import static com.google.common.collect.Lists.newArrayList; -import static org.fest.assertions.Assertions.assertThat; -import static org.sonar.plugins.dbcleaner.DbCleanerTestUtils.createSnapshotWithDate; - -public class KeepOneFilterTest { - - @Test - public void shouldOnlyOneSnapshotPerInterval() { - Filter filter = new KeepOneFilter(DateUtils.parseDate("2011-03-25"), DateUtils.parseDate("2011-08-25"), Calendar.MONTH, "month"); - - List<PurgeableSnapshotDto> toDelete = filter.filter(Arrays.<PurgeableSnapshotDto>asList( - createSnapshotWithDate(1L, "2010-01-01"), // out of scope -> keep - createSnapshotWithDate(2L, "2011-05-01"), // may -> keep - createSnapshotWithDate(3L, "2011-05-02"), // may -> to be deleted - createSnapshotWithDate(4L, "2011-05-19"), // may -> to be deleted - createSnapshotWithDate(5L, "2011-06-01"), // june -> keep - createSnapshotWithDate(6L, "2012-01-01") // out of scope -> keep - )); - - assertThat(toDelete).hasSize(2); - - List<Long> snapshotIds = snapshotIds(toDelete); - assertThat(snapshotIds).contains(3L); - assertThat(snapshotIds.contains(4L)); - } - - @Test - public void shouldKeepNonDeletableSnapshots() { - Filter filter = new KeepOneFilter(DateUtils.parseDate("2011-03-25"), DateUtils.parseDate("2011-08-25"), Calendar.MONTH, "month"); - - List<PurgeableSnapshotDto> toDelete = filter.filter(Arrays.<PurgeableSnapshotDto>asList( - createSnapshotWithDate(1L, "2011-05-01"), // to be deleted - createSnapshotWithDate(2L, "2011-05-02").setLast(true), - createSnapshotWithDate(3L, "2011-05-19").setHasEvents(true).setLast(false), - createSnapshotWithDate(4L, "2011-05-23") // to be deleted - )); - - assertThat(toDelete).hasSize(2); - - List<Long> snapshotIds = snapshotIds(toDelete); - assertThat(snapshotIds).contains(1L); - assertThat(snapshotIds.contains(4L)); - } - - @Test - public void test_isDeletable() { - assertThat(KeepOneFilter.isDeletable(createSnapshotWithDate(1L, "2011-05-01"))).isTrue(); - assertThat(KeepOneFilter.isDeletable(createSnapshotWithDate(1L, "2011-05-01").setLast(true))).isFalse(); - assertThat(KeepOneFilter.isDeletable(createSnapshotWithDate(1L, "2011-05-01").setHasEvents(true))).isFalse(); - } - - private static List<Long> snapshotIds(List<PurgeableSnapshotDto> snapshotDtos){ - return newArrayList(Iterables.transform(snapshotDtos, new Function<PurgeableSnapshotDto, Long>() { - @Override - public Long apply(@Nullable PurgeableSnapshotDto input) { - return input != null ? input.getSnapshotId() : null; - } - })); - } - -} |