Convert `FanoutReplicationConfig` to `FanoutConfigResource`

With the introduction of `ConfigResource` we can simplify how the
"fanout" configuration works and reduce the code complexity.

The "fanout" replication configuration moves the `remote` sections from
the `replication.config` file into the `replication/` directory with
one-remote-per-file approach.

What this effectively means, is the final config object provided by the
"fanout" approach, is built not from a single file, but potentially
from multiple files.

This is one of the purposes of `ConfigResource`, to get the
configuration object regardless of how or where it's stored.

That's why, converting the `FanoutReplicationConfig` into
`FanoutConfigResource` makes sense. It also simplifies the code, as
`@MainReplicationConfig` is no longer needed.

Change-Id: Ic6a5c5b8ab502a5e53d52a146d73b219563ee759
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/AutoReloadConfigDecorator.java b/src/main/java/com/googlesource/gerrit/plugins/replication/AutoReloadConfigDecorator.java
index a0d9624..b6532d9 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/AutoReloadConfigDecorator.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/AutoReloadConfigDecorator.java
@@ -42,7 +42,7 @@
   public AutoReloadConfigDecorator(
       @PluginName String pluginName,
       WorkQueue workQueue,
-      @MainReplicationConfig ReplicationConfig replicationConfig,
+      FileReplicationConfig replicationConfig,
       AutoReloadRunnable reloadRunner,
       EventBus eventBus) {
     this.currentConfig = replicationConfig;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/AutoReloadRunnable.java b/src/main/java/com/googlesource/gerrit/plugins/replication/AutoReloadRunnable.java
index 71f7c67..9ed43fe 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/AutoReloadRunnable.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/AutoReloadRunnable.java
@@ -27,14 +27,14 @@
   private final Provider<ObservableQueue> queueObserverProvider;
   private final ConfigParser configParser;
   private ReplicationConfig loadedConfig;
-  private Provider<ReplicationConfig> replicationConfigProvider;
+  private Provider<FileReplicationConfig> replicationConfigProvider;
   private String loadedConfigVersion;
   private String lastFailedConfigVersion;
 
   @Inject
   public AutoReloadRunnable(
       ConfigParser configParser,
-      @MainReplicationConfig Provider<ReplicationConfig> replicationConfigProvider,
+      Provider<FileReplicationConfig> replicationConfigProvider,
       EventBus eventBus,
       Provider<ObservableQueue> queueObserverProvider) {
     this.replicationConfigProvider = replicationConfigProvider;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/Destination.java b/src/main/java/com/googlesource/gerrit/plugins/replication/Destination.java
index 04af9db..9c70aa6 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/Destination.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/Destination.java
@@ -15,7 +15,7 @@
 package com.googlesource.gerrit.plugins.replication;
 
 import static com.google.gerrit.server.project.ProjectCache.noSuchProject;
-import static com.googlesource.gerrit.plugins.replication.ReplicationFileBasedConfig.replaceName;
+import static com.googlesource.gerrit.plugins.replication.FileReplicationConfig.replaceName;
 import static org.eclipse.jgit.transport.RemoteRefUpdate.Status.NON_EXISTING;
 import static org.eclipse.jgit.transport.RemoteRefUpdate.Status.REJECTED_OTHER_REASON;
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/DestinationsCollection.java b/src/main/java/com/googlesource/gerrit/plugins/replication/DestinationsCollection.java
index 79a0683..1d471fe 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/DestinationsCollection.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/DestinationsCollection.java
@@ -17,7 +17,7 @@
 import static com.googlesource.gerrit.plugins.replication.AdminApiFactory.isGerrit;
 import static com.googlesource.gerrit.plugins.replication.AdminApiFactory.isGerritHttp;
 import static com.googlesource.gerrit.plugins.replication.AdminApiFactory.isSSH;
-import static com.googlesource.gerrit.plugins.replication.ReplicationFileBasedConfig.replaceName;
+import static com.googlesource.gerrit.plugins.replication.FileReplicationConfig.replaceName;
 import static com.googlesource.gerrit.plugins.replication.ReplicationQueue.repLog;
 import static java.util.stream.Collectors.toList;
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/FanoutReplicationConfig.java b/src/main/java/com/googlesource/gerrit/plugins/replication/FanoutConfigResource.java
similarity index 68%
rename from src/main/java/com/googlesource/gerrit/plugins/replication/FanoutReplicationConfig.java
rename to src/main/java/com/googlesource/gerrit/plugins/replication/FanoutConfigResource.java
index 80d8b9d..4220ddb 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/FanoutReplicationConfig.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/FanoutConfigResource.java
@@ -17,12 +17,10 @@
 import static com.google.common.io.Files.getNameWithoutExtension;
 import static java.nio.charset.StandardCharsets.UTF_8;
 
-import com.google.common.annotations.VisibleForTesting;
 import com.google.common.collect.Lists;
 import com.google.common.flogger.FluentLogger;
 import com.google.common.hash.Hasher;
 import com.google.common.hash.Hashing;
-import com.google.gerrit.extensions.annotations.PluginData;
 import com.google.gerrit.server.config.SitePaths;
 import com.google.inject.Inject;
 import java.io.IOException;
@@ -37,38 +35,26 @@
 import org.eclipse.jgit.storage.file.FileBasedConfig;
 import org.eclipse.jgit.util.FS;
 
-public class FanoutReplicationConfig implements ReplicationConfig {
+public class FanoutConfigResource extends FileConfigResource {
+  public static String CONFIG_DIR = "replication";
   private static final FluentLogger logger = FluentLogger.forEnclosingClass();
 
-  private final ReplicationFileBasedConfig replicationConfig;
-  private final Config config;
   private final Path remoteConfigsDirPath;
 
-  @VisibleForTesting
-  public FanoutReplicationConfig(SitePaths sitePaths, @PluginData Path pluginDataDir)
-      throws IOException, ConfigInvalidException {
-    this(
-        new ReplicationFileBasedConfig(new FileConfigResource(sitePaths), sitePaths, pluginDataDir),
-        sitePaths);
-  }
-
   @Inject
-  FanoutReplicationConfig(ReplicationFileBasedConfig replicationConfig, SitePaths site)
-      throws IOException, ConfigInvalidException {
-
-    remoteConfigsDirPath = site.etc_dir.resolve("replication");
-    this.replicationConfig = replicationConfig;
-    config = replicationConfig.getConfig();
+  FanoutConfigResource(SitePaths site) throws IOException, ConfigInvalidException {
+    super(site);
+    this.remoteConfigsDirPath = site.etc_dir.resolve(CONFIG_DIR);
     removeRemotes(config);
 
     try (Stream<Path> files = Files.list(remoteConfigsDirPath)) {
       files
           .filter(Files::isRegularFile)
-          .filter(FanoutReplicationConfig::isConfig)
-          .map(FanoutReplicationConfig::loadConfig)
+          .filter(FanoutConfigResource::isConfig)
+          .map(FanoutConfigResource::loadConfig)
           .filter(Optional::isPresent)
           .map(Optional::get)
-          .filter(FanoutReplicationConfig::isValid)
+          .filter(FanoutConfigResource::isValid)
           .forEach(cfg -> addRemoteConfig(cfg, config));
     } catch (IllegalStateException e) {
       throw new ConfigInvalidException(e.getMessage());
@@ -131,53 +117,14 @@
   }
 
   @Override
-  public boolean isReplicateAllOnPluginStart() {
-    return replicationConfig.isReplicateAllOnPluginStart();
-  }
-
-  @Override
-  public boolean isDefaultForceUpdate() {
-    return replicationConfig.isDefaultForceUpdate();
-  }
-
-  @Override
-  public int getMaxRefsToLog() {
-    return replicationConfig.getMaxRefsToLog();
-  }
-
-  @Override
-  public int getMaxRefsToShow() {
-    return replicationConfig.getMaxRefsToShow();
-  }
-
-  @Override
-  public Path getEventsDirectory() {
-    return replicationConfig.getEventsDirectory();
-  }
-
-  @Override
-  public int getSshConnectionTimeout() {
-    return replicationConfig.getSshConnectionTimeout();
-  }
-
-  @Override
-  public int getSshCommandTimeout() {
-    return replicationConfig.getSshCommandTimeout();
-  }
-
-  @Override
-  public int getDistributionInterval() {
-    return replicationConfig.getDistributionInterval();
-  }
-
-  @Override
   public String getVersion() {
+    String parentVersion = super.getVersion();
     Hasher hasher = Hashing.murmur3_128().newHasher();
-    hasher.putString(replicationConfig.getVersion(), UTF_8);
+    hasher.putString(parentVersion, UTF_8);
     try (Stream<Path> files = Files.list(remoteConfigsDirPath)) {
       files
           .filter(Files::isRegularFile)
-          .filter(FanoutReplicationConfig::isConfig)
+          .filter(FanoutConfigResource::isConfig)
           .sorted()
           .map(Path::toFile)
           .map(FileSnapshot::save)
@@ -190,12 +137,7 @@
       logger.atSevere().withCause(e).log(
           "Cannot list remote configuration files from %s. Returning replication.config file version",
           remoteConfigsDirPath);
-      return replicationConfig.getVersion();
+      return parentVersion;
     }
   }
-
-  @Override
-  public Config getConfig() {
-    return config;
-  }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/FileConfigResource.java b/src/main/java/com/googlesource/gerrit/plugins/replication/FileConfigResource.java
index aad4666..d220b24 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/FileConfigResource.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/FileConfigResource.java
@@ -27,7 +27,7 @@
 
 public class FileConfigResource implements ConfigResource {
   public static final String CONFIG_NAME = "replication.config";
-  private final FileBasedConfig config;
+  protected final FileBasedConfig config;
 
   @Inject
   FileConfigResource(SitePaths site) {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationFileBasedConfig.java b/src/main/java/com/googlesource/gerrit/plugins/replication/FileReplicationConfig.java
similarity index 91%
rename from src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationFileBasedConfig.java
rename to src/main/java/com/googlesource/gerrit/plugins/replication/FileReplicationConfig.java
index 9f45702..b34ea54 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationFileBasedConfig.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/FileReplicationConfig.java
@@ -22,7 +22,7 @@
 import java.nio.file.Path;
 import org.eclipse.jgit.lib.Config;
 
-public class ReplicationFileBasedConfig implements ReplicationConfig {
+public class FileReplicationConfig implements ReplicationConfig {
   private static final int DEFAULT_SSH_CONNECTION_TIMEOUT_MS = 2 * 60 * 1000; // 2 minutes
 
   private final SitePaths site;
@@ -35,14 +35,16 @@
   private final ConfigResource configResource;
   private final Path pluginDataDir;
 
+  // TODO: remove in follow-up change, as this was added to reduce the diff size
+  // for change Ic6a5c5b8ab5
   @VisibleForTesting
-  public ReplicationFileBasedConfig(SitePaths paths, @PluginData Path pluginDataDir) {
+  public FileReplicationConfig(SitePaths paths, @PluginData Path pluginDataDir) {
     this(new FileConfigResource(paths), paths, pluginDataDir);
   }
 
   @Inject
-  public ReplicationFileBasedConfig(
-      FileConfigResource configResource, SitePaths site, @PluginData Path pluginDataDir) {
+  public FileReplicationConfig(
+      ConfigResource configResource, SitePaths site, @PluginData Path pluginDataDir) {
     this.site = site;
     this.configResource = configResource;
     Config config = configResource.getConfig();
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/MainReplicationConfig.java b/src/main/java/com/googlesource/gerrit/plugins/replication/MainReplicationConfig.java
deleted file mode 100644
index e8d95ec..0000000
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/MainReplicationConfig.java
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright (C) 2020 The Android Open Source Project
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.googlesource.gerrit.plugins.replication;
-
-import com.google.inject.BindingAnnotation;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-@BindingAnnotation
-@Retention(RetentionPolicy.RUNTIME)
-public @interface MainReplicationConfig {}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationConfigModule.java b/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationConfigModule.java
index 2cc3982..220ec50 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationConfigModule.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationConfigModule.java
@@ -14,6 +14,7 @@
 
 package com.googlesource.gerrit.plugins.replication;
 
+import static com.googlesource.gerrit.plugins.replication.FanoutConfigResource.CONFIG_DIR;
 import static com.googlesource.gerrit.plugins.replication.FileConfigResource.CONFIG_NAME;
 
 import com.google.gerrit.extensions.events.LifecycleListener;
@@ -44,16 +45,15 @@
 
   @Override
   protected void configure() {
+    bind(ConfigResource.class).to(getConfigResourceClass());
+
     if (getReplicationConfig().getBoolean("gerrit", "autoReload", false)) {
-      bind(ReplicationConfig.class)
-          .annotatedWith(MainReplicationConfig.class)
-          .to(getReplicationConfigClass());
       bind(ReplicationConfig.class).to(AutoReloadConfigDecorator.class).in(Scopes.SINGLETON);
       bind(LifecycleListener.class)
           .annotatedWith(UniqueAnnotations.create())
           .to(AutoReloadConfigDecorator.class);
     } else {
-      bind(ReplicationConfig.class).to(getReplicationConfigClass()).in(Scopes.SINGLETON);
+      bind(ReplicationConfig.class).to(FileReplicationConfig.class).in(Scopes.SINGLETON);
     }
   }
 
@@ -68,10 +68,10 @@
     return config;
   }
 
-  private Class<? extends ReplicationConfig> getReplicationConfigClass() {
-    if (Files.exists(site.etc_dir.resolve("replication"))) {
-      return FanoutReplicationConfig.class;
+  private Class<? extends ConfigResource> getConfigResourceClass() {
+    if (Files.exists(site.etc_dir.resolve(CONFIG_DIR))) {
+      return FanoutConfigResource.class;
     }
-    return ReplicationFileBasedConfig.class;
+    return FileConfigResource.class;
   }
 }
diff --git a/src/test/java/com/googlesource/gerrit/plugins/replication/AbstractConfigTest.java b/src/test/java/com/googlesource/gerrit/plugins/replication/AbstractConfigTest.java
index 2b6a8c4..4c43cb0 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/replication/AbstractConfigTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/replication/AbstractConfigTest.java
@@ -128,6 +128,12 @@
     assertThatIsDestination(matchingDestinations.get(0), remoteName, remoteUrls);
   }
 
+  protected DestinationsCollection newDestinationsCollections(ConfigResource configResource)
+      throws ConfigInvalidException {
+    return newDestinationsCollections(
+        new FileReplicationConfig(configResource, sitePaths, pluginDataPath));
+  }
+
   protected DestinationsCollection newDestinationsCollections(ReplicationConfig replicationConfig)
       throws ConfigInvalidException {
     return new DestinationsCollection(
@@ -138,7 +144,7 @@
         eventBus);
   }
 
-  protected ReplicationConfig newReplicationFileBasedConfig() {
-    return new ReplicationFileBasedConfig(sitePaths, pluginDataPath);
+  protected FileReplicationConfig newReplicationFileBasedConfig() {
+    return new FileReplicationConfig(sitePaths, pluginDataPath);
   }
 }
diff --git a/src/test/java/com/googlesource/gerrit/plugins/replication/AutoReloadConfigDecoratorTest.java b/src/test/java/com/googlesource/gerrit/plugins/replication/AutoReloadConfigDecoratorTest.java
index b1b9453..bb08830 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/replication/AutoReloadConfigDecoratorTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/replication/AutoReloadConfigDecoratorTest.java
@@ -75,12 +75,14 @@
     remoteConfig.setString("remote", null, "url", remoteUrl1);
     remoteConfig.save();
 
-    replicationConfig = new FanoutReplicationConfig(sitePaths, pluginDataPath);
+    replicationConfig =
+        new FileReplicationConfig(new FanoutConfigResource(sitePaths), sitePaths, pluginDataPath);
 
     newAutoReloadConfig(
             () -> {
               try {
-                return new FanoutReplicationConfig(sitePaths, pluginDataPath);
+                return new FileReplicationConfig(
+                    new FanoutConfigResource(sitePaths), sitePaths, pluginDataPath);
               } catch (IOException | ConfigInvalidException e) {
                 throw new RuntimeException(e);
               }
@@ -122,12 +124,14 @@
     remoteConfig.setString("remote", null, "url", remoteUrl2);
     remoteConfig.save();
 
-    replicationConfig = new FanoutReplicationConfig(sitePaths, pluginDataPath);
+    replicationConfig =
+        new FileReplicationConfig(new FanoutConfigResource(sitePaths), sitePaths, pluginDataPath);
 
     newAutoReloadConfig(
             () -> {
               try {
-                return new FanoutReplicationConfig(sitePaths, pluginDataPath);
+                return new FileReplicationConfig(
+                    new FanoutConfigResource(sitePaths), sitePaths, pluginDataPath);
               } catch (IOException | ConfigInvalidException e) {
                 throw new RuntimeException(e);
               }
@@ -168,12 +172,14 @@
     remoteConfig.setString("remote", null, "url", remoteUrl2);
     remoteConfig.save();
 
-    replicationConfig = new FanoutReplicationConfig(sitePaths, pluginDataPath);
+    replicationConfig =
+        new FileReplicationConfig(new FanoutConfigResource(sitePaths), sitePaths, pluginDataPath);
 
     newAutoReloadConfig(
             () -> {
               try {
-                return new FanoutReplicationConfig(sitePaths, pluginDataPath);
+                return new FileReplicationConfig(
+                    new FanoutConfigResource(sitePaths), sitePaths, pluginDataPath);
               } catch (IOException | ConfigInvalidException e) {
                 throw new RuntimeException(e);
               }
@@ -228,14 +234,14 @@
   }
 
   private AutoReloadConfigDecorator newAutoReloadConfig(
-      Supplier<ReplicationConfig> configSupplier) {
+      Supplier<FileReplicationConfig> configSupplier) {
     AutoReloadRunnable autoReloadRunnable =
         new AutoReloadRunnable(
             configParser,
-            new Provider<ReplicationConfig>() {
+            new Provider<FileReplicationConfig>() {
 
               @Override
-              public ReplicationConfig get() {
+              public FileReplicationConfig get() {
                 return configSupplier.get();
               }
             },
diff --git a/src/test/java/com/googlesource/gerrit/plugins/replication/AutoReloadRunnableTest.java b/src/test/java/com/googlesource/gerrit/plugins/replication/AutoReloadRunnableTest.java
index 725052c..14307f8 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/replication/AutoReloadRunnableTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/replication/AutoReloadRunnableTest.java
@@ -81,11 +81,11 @@
     autoReloadRunnable.run();
   }
 
-  private Provider<ReplicationConfig> newVersionConfigProvider() {
+  private Provider<FileReplicationConfig> newVersionConfigProvider() {
     return new Provider<>() {
       @Override
-      public ReplicationConfig get() {
-        return new ReplicationFileBasedConfig(sitePaths, sitePaths.data_dir) {
+      public FileReplicationConfig get() {
+        return new FileReplicationConfig(sitePaths, sitePaths.data_dir) {
           @Override
           public String getVersion() {
             return String.format("%s", System.nanoTime());
diff --git a/src/test/java/com/googlesource/gerrit/plugins/replication/FanoutReplicationConfigTest.java b/src/test/java/com/googlesource/gerrit/plugins/replication/FanoutConfigResourceTest.java
similarity index 84%
rename from src/test/java/com/googlesource/gerrit/plugins/replication/FanoutReplicationConfigTest.java
rename to src/test/java/com/googlesource/gerrit/plugins/replication/FanoutConfigResourceTest.java
index 8cba4bb..34712a7 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/replication/FanoutReplicationConfigTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/replication/FanoutConfigResourceTest.java
@@ -27,9 +27,9 @@
 import org.junit.Before;
 import org.junit.Test;
 
-public class FanoutReplicationConfigTest extends AbstractConfigTest {
+public class FanoutConfigResourceTest extends AbstractConfigTest {
 
-  public FanoutReplicationConfigTest() throws IOException {
+  public FanoutConfigResourceTest() throws IOException {
     super();
   }
 
@@ -62,7 +62,7 @@
     config.save();
 
     DestinationsCollection destinationsCollections =
-        newDestinationsCollections(new FanoutReplicationConfig(sitePaths, pluginDataPath));
+        newDestinationsCollections(new FanoutConfigResource(sitePaths));
     List<Destination> destinations = destinationsCollections.getAll(FilterType.ALL);
     assertThat(destinations).hasSize(1);
 
@@ -81,7 +81,7 @@
     config.save();
 
     DestinationsCollection destinationsCollections =
-        newDestinationsCollections(new FanoutReplicationConfig(sitePaths, pluginDataPath));
+        newDestinationsCollections(new FanoutConfigResource(sitePaths));
     List<Destination> destinations = destinationsCollections.getAll(FilterType.ALL);
     assertThat(destinations).hasSize(2);
 
@@ -101,7 +101,7 @@
     config.save();
 
     DestinationsCollection destinationsCollections =
-        newDestinationsCollections(new FanoutReplicationConfig(sitePaths, pluginDataPath));
+        newDestinationsCollections(new FanoutConfigResource(sitePaths));
     List<Destination> destinations = destinationsCollections.getAll(FilterType.ALL);
     assertThat(destinations).hasSize(1);
 
@@ -123,7 +123,7 @@
     config.save();
 
     DestinationsCollection destinationsCollections =
-        newDestinationsCollections(new FanoutReplicationConfig(sitePaths, pluginDataPath));
+        newDestinationsCollections(new FanoutConfigResource(sitePaths));
     List<Destination> destinations = destinationsCollections.getAll(FilterType.ALL);
     assertThat(destinations).hasSize(1);
 
@@ -136,7 +136,7 @@
     config.setString("remote", null, "url", "ssh://git@git.elsewhere.com/name");
     config.save();
 
-    newDestinationsCollections(new FanoutReplicationConfig(sitePaths, pluginDataPath));
+    newDestinationsCollections(new FanoutConfigResource(sitePaths));
   }
 
   @Test
@@ -145,7 +145,7 @@
     config.save();
 
     DestinationsCollection destinationsCollections =
-        newDestinationsCollections(new FanoutReplicationConfig(sitePaths, pluginDataPath));
+        newDestinationsCollections(new FanoutConfigResource(sitePaths));
     List<Destination> destinations = destinationsCollections.getAll(FilterType.ALL);
     assertThat(destinations).hasSize(0);
   }
@@ -158,7 +158,7 @@
     config.save();
 
     DestinationsCollection destinationsCollections =
-        newDestinationsCollections(new FanoutReplicationConfig(sitePaths, pluginDataPath));
+        newDestinationsCollections(new FanoutConfigResource(sitePaths));
     List<Destination> destinations = destinationsCollections.getAll(FilterType.ALL);
     assertThat(destinations).hasSize(0);
   }
@@ -170,7 +170,7 @@
     config.save();
 
     DestinationsCollection destinationsCollections =
-        newDestinationsCollections(new FanoutReplicationConfig(sitePaths, pluginDataPath));
+        newDestinationsCollections(new FanoutConfigResource(sitePaths));
     List<Destination> destinations = destinationsCollections.getAll(FilterType.ALL);
     assertThat(destinations).hasSize(0);
   }
@@ -186,12 +186,11 @@
     config.setString("remote", null, "url", remoteUrl2);
     config.save();
 
-    FanoutReplicationConfig objectUnderTest =
-        new FanoutReplicationConfig(sitePaths, pluginDataPath);
+    FanoutConfigResource objectUnderTest = new FanoutConfigResource(sitePaths);
 
     String version = objectUnderTest.getVersion();
 
-    objectUnderTest = new FanoutReplicationConfig(sitePaths, pluginDataPath);
+    objectUnderTest = new FanoutConfigResource(sitePaths);
 
     assertThat(objectUnderTest.getVersion()).isEqualTo(version);
   }
@@ -203,8 +202,7 @@
     config.setString("remote", null, "url", remoteUrl1);
     config.save();
 
-    FanoutReplicationConfig objectUnderTest =
-        new FanoutReplicationConfig(sitePaths, pluginDataPath);
+    FanoutConfigResource objectUnderTest = new FanoutConfigResource(sitePaths);
 
     String version = objectUnderTest.getVersion();
 
@@ -222,8 +220,7 @@
     config.setString("remote", null, "url", remoteUrl1);
     config.save();
 
-    FanoutReplicationConfig objectUnderTest =
-        new FanoutReplicationConfig(sitePaths, pluginDataPath);
+    FanoutConfigResource objectUnderTest = new FanoutConfigResource(sitePaths);
 
     String version = objectUnderTest.getVersion();
 
@@ -244,8 +241,7 @@
     config.setString("remote", null, "url", remoteUrl2);
     config.save();
 
-    FanoutReplicationConfig objectUnderTest =
-        new FanoutReplicationConfig(sitePaths, pluginDataPath);
+    FanoutConfigResource objectUnderTest = new FanoutConfigResource(sitePaths);
 
     String version = objectUnderTest.getVersion();
     assertThat(
@@ -267,11 +263,10 @@
     config.setString("remote", null, "url", remoteUrl2);
     config.save();
 
-    FanoutReplicationConfig objectUnderTest =
-        new FanoutReplicationConfig(sitePaths, pluginDataPath);
+    FanoutConfigResource objectUnderTest = new FanoutConfigResource(sitePaths);
 
     String replicationConfigVersion =
-        new ReplicationFileBasedConfig(sitePaths, pluginDataPath).getVersion();
+        new FileReplicationConfig(sitePaths, pluginDataPath).getVersion();
 
     MoreFiles.deleteRecursively(sitePaths.etc_dir.resolve("replication"), ALLOW_INSECURE);
 
diff --git a/src/test/java/com/googlesource/gerrit/plugins/replication/ReplicationFileBasedConfigTest.java b/src/test/java/com/googlesource/gerrit/plugins/replication/ReplicationConfigImplTest.java
similarity index 95%
rename from src/test/java/com/googlesource/gerrit/plugins/replication/ReplicationFileBasedConfigTest.java
rename to src/test/java/com/googlesource/gerrit/plugins/replication/ReplicationConfigImplTest.java
index 79b05cc..068e5ff 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/replication/ReplicationFileBasedConfigTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/replication/ReplicationConfigImplTest.java
@@ -22,9 +22,9 @@
 import org.eclipse.jgit.storage.file.FileBasedConfig;
 import org.junit.Test;
 
-public class ReplicationFileBasedConfigTest extends AbstractConfigTest {
+public class ReplicationConfigImplTest extends AbstractConfigTest {
 
-  public ReplicationFileBasedConfigTest() throws IOException {
+  public ReplicationConfigImplTest() throws IOException {
     super();
   }