summaryrefslogtreecommitdiffstats
path: root/java/com/google/gerrit/acceptance/GerritServer.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/com/google/gerrit/acceptance/GerritServer.java')
-rw-r--r--java/com/google/gerrit/acceptance/GerritServer.java64
1 files changed, 44 insertions, 20 deletions
diff --git a/java/com/google/gerrit/acceptance/GerritServer.java b/java/com/google/gerrit/acceptance/GerritServer.java
index fb7189af2e..009bebdc6c 100644
--- a/java/com/google/gerrit/acceptance/GerritServer.java
+++ b/java/com/google/gerrit/acceptance/GerritServer.java
@@ -22,7 +22,9 @@ import static java.util.Objects.requireNonNull;
import com.google.auto.value.AutoValue;
import com.google.common.base.MoreObjects;
import com.google.common.base.Strings;
+import com.google.common.base.Ticker;
import com.google.common.collect.ImmutableList;
+import com.google.gerrit.acceptance.AbstractDaemonTest.TestTicker;
import com.google.gerrit.acceptance.FakeGroupAuditService.FakeGroupAuditServiceModule;
import com.google.gerrit.acceptance.ReindexGroupsAtStartup.ReindexGroupsAtStartupModule;
import com.google.gerrit.acceptance.ReindexProjectsAtStartup.ReindexProjectsAtStartupModule;
@@ -59,6 +61,7 @@ import com.google.gerrit.server.config.SitePath;
import com.google.gerrit.server.experiments.ConfigExperimentFeatures.ConfigExperimentFeaturesModule;
import com.google.gerrit.server.git.receive.AsyncReceiveCommits.AsyncReceiveCommitsModule;
import com.google.gerrit.server.git.validators.CommitValidationListener;
+import com.google.gerrit.server.index.AbstractIndexModule;
import com.google.gerrit.server.index.options.AutoFlush;
import com.google.gerrit.server.schema.JdbcAccountPatchReviewStore;
import com.google.gerrit.server.ssh.NoSshModule;
@@ -76,6 +79,7 @@ import com.google.inject.Key;
import com.google.inject.Module;
import com.google.inject.Provides;
import com.google.inject.Singleton;
+import com.google.inject.multibindings.OptionalBinder;
import java.lang.annotation.Annotation;
import java.lang.annotation.Retention;
import java.lang.reflect.Field;
@@ -429,6 +433,23 @@ public class GerritServer implements AutoCloseable {
.to(GitObjectVisibilityChecker.class);
}
});
+ daemon.addAdditionalSysModuleForTesting(
+ new AbstractModule() {
+ @Override
+ protected void configure() {
+ super.configure();
+ // GerritServer isn't restarted between tests. TestTicker allows to replace actual
+ // Ticker in tests without restarting server and transparently for other code.
+ // Alternative option with Provider<Ticker> is less convinient, because it affects how
+ // gerrit code should be written - i.e. Ticker must not be stored in fields and must
+ // always be obtained from the provider.
+ TestTicker testTicker = new TestTicker();
+ OptionalBinder.newOptionalBinder(binder(), Ticker.class)
+ .setBinding()
+ .toInstance(testTicker);
+ bind(TestTicker.class).toInstance(testTicker);
+ }
+ });
daemon.setEnableHttpd(desc.httpd());
// Assure that SSHD is enabled if HTTPD is not required, otherwise the Gerrit server would not
// even start.
@@ -438,7 +459,11 @@ public class GerritServer implements AutoCloseable {
if (desc.memory()) {
checkArgument(additionalArgs.length == 0, "cannot pass args to in-memory server");
- return startInMemory(desc, site, baseConfig, daemon, inMemoryRepoManager);
+ AbstractIndexModule testIndexModule =
+ (testSysModule instanceof AbstractIndexModule)
+ ? (AbstractIndexModule) testSysModule
+ : null;
+ return startInMemory(desc, site, baseConfig, daemon, inMemoryRepoManager, testIndexModule);
}
return startOnDisk(desc, site, daemon, serverStarted, additionalArgs);
}
@@ -448,7 +473,8 @@ public class GerritServer implements AutoCloseable {
Path site,
Config baseConfig,
Daemon daemon,
- @Nullable InMemoryRepositoryManager inMemoryRepoManager)
+ @Nullable InMemoryRepositoryManager inMemoryRepoManager,
+ @Nullable AbstractIndexModule testIndexModule)
throws Exception {
Config cfg = desc.buildConfig(baseConfig);
mergeTestConfig(cfg);
@@ -464,24 +490,11 @@ public class GerritServer implements AutoCloseable {
"accountPatchReviewDb", null, "url", JdbcAccountPatchReviewStore.TEST_IN_MEMORY_URL);
String configuredIndexBackend = cfg.getString("index", null, "type");
- IndexType indexType;
- if (configuredIndexBackend != null) {
- // Explicitly configured index backend from gerrit.config trumps any other ways to configure
- // index backends so that Reindex tests can be explicit about the backend they want to test
- // against.
- indexType = new IndexType(configuredIndexBackend);
- } else {
- // Allow configuring the index backend based on sys/env variables so that integration tests
- // can be run against different index backends.
- indexType = IndexType.fromEnvironment().orElse(new IndexType("fake"));
- }
- if (indexType.isLucene()) {
- daemon.setIndexModule(
- LuceneIndexModule.singleVersionAllLatest(
- 0, ReplicaUtil.isReplica(baseConfig), AutoFlush.ENABLED));
- } else {
- daemon.setIndexModule(FakeIndexModule.latestVersion(false));
- }
+ IndexType indexType =
+ (configuredIndexBackend != null)
+ ? new IndexType(configuredIndexBackend)
+ : IndexType.fromEnvironment().orElse(new IndexType("fake"));
+ daemon.setIndexModule(createIndexModule(indexType, baseConfig, testIndexModule));
daemon.setEnableHttpd(desc.httpd());
daemon.setInMemory(true);
@@ -501,6 +514,17 @@ public class GerritServer implements AutoCloseable {
return new GerritServer(desc, null, createTestInjector(daemon), daemon, null);
}
+ private static AbstractIndexModule createIndexModule(
+ IndexType indexType, Config baseConfig, @Nullable AbstractIndexModule testIndexModule) {
+ if (testIndexModule != null) {
+ return testIndexModule;
+ }
+ return indexType.isLucene()
+ ? LuceneIndexModule.singleVersionAllLatest(
+ 0, ReplicaUtil.isReplica(baseConfig), AutoFlush.ENABLED)
+ : FakeIndexModule.latestVersion(false);
+ }
+
private static GerritServer startOnDisk(
Description desc,
Path site,