Fix reading of deleteTrashFoldersMaxAllowedTime The configuration value deleteTrashFoldersMaxAllowedTime was previously looked up by passing the config key name into getTrashFoldersMaxAllowedTimeFromConfig(), which caused the method to re-read configuration instead of using the already available plugin config. This leads to the value not being interpreted correctly. Update the call site to pass the resolved config string from the plugin Config instance, ensuring the duration is parsed from the expected source. Expose the default trash folder timeout constant so tests can verify fallback behavior. Change-Id: I7f39eb50a79423211dd99231f4859f775a0c2628
diff --git a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/Configuration.java b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/Configuration.java index 04bd5fa..e812021 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/Configuration.java +++ b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/Configuration.java
@@ -45,7 +45,7 @@ private static final FluentLogger log = FluentLogger.forEnclosingClass(); private static final String DELETED_PROJECTS_PARENT = "Deleted-Projects"; private static final long DEFAULT_ARCHIVE_DURATION_DAYS = 180; - private static final long DEFAULT_TRASH_FOLDER_MAX_ALLOWED_TIME_MINUTES = 10; + protected static final long DEFAULT_TRASH_FOLDER_MAX_ALLOWED_TIME_MINUTES = 10; private final boolean allowDeletionWithTags; private final boolean archiveDeletedRepos; @@ -73,7 +73,8 @@ this.deletedProjectsParent = cfg.getString("parentForDeletedProjects", DELETED_PROJECTS_PARENT); this.archiveDeletedRepos = cfg.getBoolean("archiveDeletedRepos", false); this.deleteTrashFoldersMaxAllowedTime = - getTrashFoldersMaxAllowedTimeFromConfig("deleteTrashFoldersMaxAllowedTime"); + getTrashFoldersMaxAllowedTimeFromConfig( + cfg.getString("deleteTrashFoldersMaxAllowedTime", pluginData.toString())); this.archiveFolder = getArchiveFolderFromConfig(cfg.getString("archiveFolder", pluginData.toString())); this.deleteArchivedReposAfter =
diff --git a/src/test/java/com/googlesource/gerrit/plugins/deleteproject/ConfigurationTest.java b/src/test/java/com/googlesource/gerrit/plugins/deleteproject/ConfigurationTest.java index ed0023f..289dc98 100644 --- a/src/test/java/com/googlesource/gerrit/plugins/deleteproject/ConfigurationTest.java +++ b/src/test/java/com/googlesource/gerrit/plugins/deleteproject/ConfigurationTest.java
@@ -15,6 +15,7 @@ package com.googlesource.gerrit.plugins.deleteproject; import static com.google.common.truth.Truth.assertThat; +import static com.googlesource.gerrit.plugins.deleteproject.Configuration.DEFAULT_TRASH_FOLDER_MAX_ALLOWED_TIME_MINUTES; import static org.mockito.Mockito.when; import com.google.gerrit.server.config.PluginConfig; @@ -34,6 +35,8 @@ @RunWith(MockitoJUnitRunner.class) public class ConfigurationTest { private static final long DEFAULT_ARCHIVE_DURATION_MS = TimeUnit.DAYS.toMillis(180); + private static final long DEFAULT_TRASH_FOLDER_MAX_ALLOWED_TIME_SEC = + TimeUnit.MINUTES.toSeconds(DEFAULT_TRASH_FOLDER_MAX_ALLOWED_TIME_MINUTES); private static final String CUSTOM_DURATION = "100"; private static final String CUSTOM_PARENT = "customParent"; private static final String INVALID_ARCHIVE_DURATION = "180weeks180years"; @@ -117,4 +120,33 @@ assertThat(deleteConfig.getArchiveDuration()).isEqualTo(DEFAULT_ARCHIVE_DURATION_MS); } + + @Test + public void deleteTrashFoldersMaxAllowedTimeWithUnitIsLoaded() { + int customDuration = 1; + PluginConfig.Update pluginConfig = PluginConfig.Update.forTest(PLUGIN_NAME, new Config()); + pluginConfig.setString("deleteTrashFoldersMaxAllowedTime", customDuration + " hour"); + + when(pluginConfigFactoryMock.getFromGerritConfig(PLUGIN_NAME)) + .thenReturn(pluginConfig.asPluginConfig()); + deleteConfig = + new Configuration(pluginConfigFactoryMock, PLUGIN_NAME, pluginDataDir, new Config()); + + assertThat(deleteConfig.getDeleteTrashFoldersMaxAllowedTime()) + .isEqualTo(TimeUnit.HOURS.toSeconds(customDuration)); + } + + @Test + public void invalidDeleteTrashFoldersMaxAllowedTimeDuration() { + PluginConfig.Update pluginConfig = PluginConfig.Update.forTest(PLUGIN_NAME, new Config()); + pluginConfig.setString("deleteTrashFoldersMaxAllowedTime", "invalidDuration"); + + when(pluginConfigFactoryMock.getFromGerritConfig(PLUGIN_NAME)) + .thenReturn(pluginConfig.asPluginConfig()); + deleteConfig = + new Configuration(pluginConfigFactoryMock, PLUGIN_NAME, pluginDataDir, new Config()); + + assertThat(deleteConfig.getDeleteTrashFoldersMaxAllowedTime()) + .isEqualTo(DEFAULT_TRASH_FOLDER_MAX_ALLOWED_TIME_SEC); + } }