Allow ignore refs set to be null
Plugins which uses global-refdb doesn't have to provide set of refs to
ignore.
Guice @Nullable and @Named annotation cannot be combined
together. If plugin will not provide list of refs to be ignored
exception will be thrown.
Make also all ignoredRefs ImmutableSet.
Bug: Issue 13971
Change-Id: I70f03090fe8c32155d18b2a99df65d3de2d21314
diff --git a/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/BatchRefUpdateValidator.java b/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/BatchRefUpdateValidator.java
index 8788837..6c258ae 100644
--- a/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/BatchRefUpdateValidator.java
+++ b/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/BatchRefUpdateValidator.java
@@ -17,13 +17,13 @@
import com.gerritforge.gerrit.globalrefdb.validation.dfsrefdb.OutOfSyncException;
import com.gerritforge.gerrit.globalrefdb.validation.dfsrefdb.SharedRefEnforcement;
import com.gerritforge.gerrit.globalrefdb.validation.dfsrefdb.SharedRefEnforcement.EnforcePolicy;
+import com.google.common.collect.ImmutableSet;
import com.google.common.flogger.FluentLogger;
import com.google.inject.Inject;
import com.google.inject.assistedinject.Assisted;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
-import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.eclipse.jgit.lib.BatchRefUpdate;
@@ -37,7 +37,8 @@
private static final FluentLogger logger = FluentLogger.forEnclosingClass();
public interface Factory {
- BatchRefUpdateValidator create(String projectName, RefDatabase refDb, Set<String> ignoredRefs);
+ BatchRefUpdateValidator create(
+ String projectName, RefDatabase refDb, ImmutableSet<String> ignoredRefs);
}
public interface BatchValidationWrapper {
@@ -53,7 +54,7 @@
ProjectsFilter projectsFilter,
@Assisted String projectName,
@Assisted RefDatabase refDb,
- @Assisted Set<String> ignoredRefs) {
+ @Assisted ImmutableSet<String> ignoredRefs) {
super(
sharedRefDb,
validationMetrics,
diff --git a/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/RefUpdateValidator.java b/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/RefUpdateValidator.java
index 21bca40..cf93e1d 100644
--- a/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/RefUpdateValidator.java
+++ b/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/RefUpdateValidator.java
@@ -21,13 +21,13 @@
import com.gerritforge.gerrit.globalrefdb.validation.dfsrefdb.SharedRefEnforcement;
import com.gerritforge.gerrit.globalrefdb.validation.dfsrefdb.SharedRefEnforcement.EnforcePolicy;
import com.google.common.base.MoreObjects;
+import com.google.common.collect.ImmutableSet;
import com.google.common.flogger.FluentLogger;
import com.google.gerrit.entities.Project;
import com.google.inject.Inject;
import com.google.inject.assistedinject.Assisted;
import java.io.IOException;
import java.util.HashMap;
-import java.util.Set;
import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.lib.ObjectIdRef;
import org.eclipse.jgit.lib.Ref;
@@ -45,10 +45,11 @@
protected final RefDatabase refDb;
protected final SharedRefEnforcement refEnforcement;
protected final ProjectsFilter projectsFilter;
- private final Set<String> ignoredRefs;
+ private final ImmutableSet<String> ignoredRefs;
public interface Factory {
- RefUpdateValidator create(String projectName, RefDatabase refDb, Set<String> ignoredRefs);
+ RefUpdateValidator create(
+ String projectName, RefDatabase refDb, ImmutableSet<String> ignoredRefs);
}
public interface ExceptionThrowingSupplier<T, E extends Exception> {
@@ -77,7 +78,7 @@
ProjectsFilter projectsFilter,
@Assisted String projectName,
@Assisted RefDatabase refDb,
- @Assisted Set<String> ignoredRefs) {
+ @Assisted ImmutableSet<String> ignoredRefs) {
this.sharedRefDb = sharedRefDb;
this.validationMetrics = validationMetrics;
this.lockWrapperFactory = lockWrapperFactory;
diff --git a/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbBatchRefUpdate.java b/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbBatchRefUpdate.java
index 4e1aeb1..8065fe8 100644
--- a/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbBatchRefUpdate.java
+++ b/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbBatchRefUpdate.java
@@ -14,12 +14,12 @@
package com.gerritforge.gerrit.globalrefdb.validation;
+import com.google.common.collect.ImmutableSet;
import com.google.inject.Inject;
import com.google.inject.assistedinject.Assisted;
import java.io.IOException;
import java.util.Collection;
import java.util.List;
-import java.util.Set;
import org.eclipse.jgit.lib.BatchRefUpdate;
import org.eclipse.jgit.lib.PersonIdent;
import org.eclipse.jgit.lib.ProgressMonitor;
@@ -35,10 +35,11 @@
private final String project;
private final BatchRefUpdateValidator.Factory batchRefValidatorFactory;
private final RefDatabase refDb;
- private final Set<String> ignoredRefs;
+ private final ImmutableSet<String> ignoredRefs;
public interface Factory {
- SharedRefDbBatchRefUpdate create(String project, RefDatabase refDb, Set<String> ignoredRefs);
+ SharedRefDbBatchRefUpdate create(
+ String project, RefDatabase refDb, ImmutableSet<String> ignoredRefs);
}
@Inject
@@ -46,7 +47,7 @@
BatchRefUpdateValidator.Factory batchRefValidatorFactory,
@Assisted String project,
@Assisted RefDatabase refDb,
- @Assisted Set<String> ignoredRefs) {
+ @Assisted ImmutableSet<String> ignoredRefs) {
super(refDb);
this.refDb = refDb;
this.project = project;
diff --git a/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbGitRepositoryManager.java b/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbGitRepositoryManager.java
index 60d2d2f..c8e7053 100644
--- a/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbGitRepositoryManager.java
+++ b/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbGitRepositoryManager.java
@@ -14,9 +14,7 @@
package com.gerritforge.gerrit.globalrefdb.validation;
-import static java.util.Collections.EMPTY_SET;
-
-import com.google.common.base.MoreObjects;
+import com.google.common.collect.ImmutableSet;
import com.google.gerrit.entities.Project;
import com.google.gerrit.server.git.GitRepositoryManager;
import com.google.gerrit.server.git.LocalDiskRepositoryManager;
@@ -25,9 +23,7 @@
import com.google.inject.Singleton;
import com.google.inject.name.Named;
import java.io.IOException;
-import java.util.Set;
import java.util.SortedSet;
-import javax.annotation.Nullable;
import org.eclipse.jgit.errors.RepositoryNotFoundException;
import org.eclipse.jgit.lib.Repository;
@@ -36,16 +32,17 @@
public static final String IGNORED_REFS = "ignored_refs";
private final GitRepositoryManager gitRepositoryManager;
private final SharedRefDbRepository.Factory sharedRefDbRepoFactory;
- private final Set<String> ignoredRefs;
+
+ @Inject(optional = true)
+ @Named(IGNORED_REFS)
+ private ImmutableSet<String> ignoredRefs = ImmutableSet.of();
@Inject
public SharedRefDbGitRepositoryManager(
SharedRefDbRepository.Factory sharedRefDbRepoFactory,
- LocalDiskRepositoryManager localDiskRepositoryManager,
- @Nullable @Named(IGNORED_REFS) Set<String> ignoredRefs) {
+ LocalDiskRepositoryManager localDiskRepositoryManager) {
this.sharedRefDbRepoFactory = sharedRefDbRepoFactory;
this.gitRepositoryManager = localDiskRepositoryManager;
- this.ignoredRefs = MoreObjects.firstNonNull(ignoredRefs, EMPTY_SET);
}
@Override
diff --git a/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbRefDatabase.java b/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbRefDatabase.java
index 1f37ab2..e3fde9c 100644
--- a/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbRefDatabase.java
+++ b/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbRefDatabase.java
@@ -14,13 +14,13 @@
package com.gerritforge.gerrit.globalrefdb.validation;
+import com.google.common.collect.ImmutableSet;
import com.google.inject.Inject;
import com.google.inject.assistedinject.Assisted;
import java.io.IOException;
import java.util.Collection;
import java.util.List;
import java.util.Map;
-import java.util.Set;
import org.eclipse.jgit.lib.BatchRefUpdate;
import org.eclipse.jgit.lib.Ref;
import org.eclipse.jgit.lib.RefDatabase;
@@ -32,11 +32,11 @@
private final SharedRefDbBatchRefUpdate.Factory batchRefUpdateFactory;
private final String projectName;
private final RefDatabase refDatabase;
- private final Set<String> ignoredRefs;
+ private final ImmutableSet<String> ignoredRefs;
public interface Factory {
SharedRefDbRefDatabase create(
- String projectName, RefDatabase refDatabase, Set<String> ignoredRefs);
+ String projectName, RefDatabase refDatabase, ImmutableSet<String> ignoredRefs);
}
@Inject
@@ -45,7 +45,7 @@
SharedRefDbBatchRefUpdate.Factory batchRefUpdateFactory,
@Assisted String projectName,
@Assisted RefDatabase refDatabase,
- @Assisted Set<String> ignoredRefs) {
+ @Assisted ImmutableSet<String> ignoredRefs) {
this.refUpdateFactory = refUpdateFactory;
this.batchRefUpdateFactory = batchRefUpdateFactory;
this.projectName = projectName;
diff --git a/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbRefUpdate.java b/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbRefUpdate.java
index 83ca308..a461d83 100644
--- a/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbRefUpdate.java
+++ b/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbRefUpdate.java
@@ -14,10 +14,10 @@
package com.gerritforge.gerrit.globalrefdb.validation;
+import com.google.common.collect.ImmutableSet;
import com.google.inject.Inject;
import com.google.inject.assistedinject.Assisted;
import java.io.IOException;
-import java.util.Set;
import org.eclipse.jgit.lib.AnyObjectId;
import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.lib.PersonIdent;
@@ -37,7 +37,10 @@
public interface Factory {
SharedRefDbRefUpdate create(
- String projectName, RefUpdate refUpdate, RefDatabase refDb, Set<String> ignoredRefs);
+ String projectName,
+ RefUpdate refUpdate,
+ RefDatabase refDb,
+ ImmutableSet<String> ignoredRefs);
}
@Inject
@@ -46,7 +49,7 @@
@Assisted String projectName,
@Assisted RefUpdate refUpdate,
@Assisted RefDatabase refDb,
- @Assisted Set<String> ignoredRefs) {
+ @Assisted ImmutableSet<String> ignoredRefs) {
super(refUpdate.getRef());
refUpdateBase = refUpdate;
this.projectName = projectName;
diff --git a/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbRepository.java b/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbRepository.java
index fa2467e..0e428fe 100644
--- a/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbRepository.java
+++ b/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbRepository.java
@@ -14,11 +14,11 @@
package com.gerritforge.gerrit.globalrefdb.validation;
+import com.google.common.collect.ImmutableSet;
import com.google.gerrit.server.git.DelegateRepository;
import com.google.inject.Inject;
import com.google.inject.assistedinject.Assisted;
import java.io.IOException;
-import java.util.Set;
import org.eclipse.jgit.lib.RefDatabase;
import org.eclipse.jgit.lib.RefUpdate;
import org.eclipse.jgit.lib.Repository;
@@ -29,7 +29,7 @@
public interface Factory {
SharedRefDbRepository create(
- String projectName, Repository repository, Set<String> ignoredRefs);
+ String projectName, Repository repository, ImmutableSet<String> ignoredRefs);
}
@Inject
@@ -37,7 +37,7 @@
SharedRefDbRefDatabase.Factory refDbFactory,
@Assisted String projectName,
@Assisted Repository repository,
- @Assisted Set<String> ignoredRefs) {
+ @Assisted ImmutableSet<String> ignoredRefs) {
super(repository);
this.sharedRefDatabase =
refDbFactory.create(projectName, repository.getRefDatabase(), ignoredRefs);
diff --git a/src/test/java/com/gerritforge/gerrit/globalrefdb/validation/BatchRefUpdateValidatorTest.java b/src/test/java/com/gerritforge/gerrit/globalrefdb/validation/BatchRefUpdateValidatorTest.java
index bcd0087..d90f45a 100644
--- a/src/test/java/com/gerritforge/gerrit/globalrefdb/validation/BatchRefUpdateValidatorTest.java
+++ b/src/test/java/com/gerritforge/gerrit/globalrefdb/validation/BatchRefUpdateValidatorTest.java
@@ -15,7 +15,6 @@
package com.gerritforge.gerrit.globalrefdb.validation;
import static com.google.common.truth.Truth.assertThat;
-import static java.util.Collections.EMPTY_SET;
import static java.util.Collections.singletonList;
import static org.eclipse.jgit.transport.ReceiveCommand.Type.UPDATE;
import static org.mockito.ArgumentMatchers.any;
@@ -29,6 +28,7 @@
import com.gerritforge.gerrit.globalrefdb.validation.dfsrefdb.DefaultSharedRefEnforcement;
import com.gerritforge.gerrit.globalrefdb.validation.dfsrefdb.RefFixture;
import com.gerritforge.gerrit.globalrefdb.validation.dfsrefdb.SharedRefEnforcement;
+import com.google.common.collect.ImmutableSet;
import com.google.gerrit.entities.Project;
import com.google.gerrit.metrics.DisabledMetricMaker;
import java.io.IOException;
@@ -172,7 +172,7 @@
projectsFilter,
projectName,
diskRepo.getRefDatabase(),
- EMPTY_SET);
+ ImmutableSet.of());
}
private Void execute(BatchRefUpdate u) throws IOException {
diff --git a/src/test/java/com/gerritforge/gerrit/globalrefdb/validation/RefUpdateValidatorTest.java b/src/test/java/com/gerritforge/gerrit/globalrefdb/validation/RefUpdateValidatorTest.java
index f1405f6..268eb2d 100644
--- a/src/test/java/com/gerritforge/gerrit/globalrefdb/validation/RefUpdateValidatorTest.java
+++ b/src/test/java/com/gerritforge/gerrit/globalrefdb/validation/RefUpdateValidatorTest.java
@@ -15,7 +15,6 @@
package com.gerritforge.gerrit.globalrefdb.validation;
import static com.google.common.truth.Truth.assertThat;
-import static java.util.Collections.EMPTY_SET;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.doReturn;
@@ -27,6 +26,7 @@
import com.gerritforge.gerrit.globalrefdb.validation.dfsrefdb.DefaultSharedRefEnforcement;
import com.gerritforge.gerrit.globalrefdb.validation.dfsrefdb.RefFixture;
import com.gerritforge.gerrit.globalrefdb.validation.dfsrefdb.SharedDbSplitBrainException;
+import com.google.common.collect.ImmutableSet;
import com.google.gerrit.entities.Project;
import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.lib.Ref;
@@ -215,6 +215,6 @@
projectsFilter,
A_TEST_PROJECT_NAME,
localRefDb,
- EMPTY_SET);
+ ImmutableSet.of());
}
}
diff --git a/src/test/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbBatchRefUpdateTest.java b/src/test/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbBatchRefUpdateTest.java
index 01341bd..576e92e 100644
--- a/src/test/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbBatchRefUpdateTest.java
+++ b/src/test/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbBatchRefUpdateTest.java
@@ -16,7 +16,6 @@
import static java.util.Arrays.asList;
import static java.util.Collections.EMPTY_LIST;
-import static java.util.Collections.EMPTY_SET;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.argThat;
import static org.mockito.ArgumentMatchers.eq;
@@ -29,8 +28,8 @@
import com.gerritforge.gerrit.globalrefdb.validation.dfsrefdb.DefaultSharedRefEnforcement;
import com.gerritforge.gerrit.globalrefdb.validation.dfsrefdb.RefFixture;
+import com.google.common.collect.ImmutableSet;
import java.io.IOException;
-import java.util.Set;
import org.eclipse.jgit.lib.BatchRefUpdate;
import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.lib.ObjectIdRef;
@@ -171,7 +170,7 @@
new BatchRefUpdateValidator.Factory() {
@Override
public BatchRefUpdateValidator create(
- String projectName, RefDatabase refDb, Set<String> ignoredRefs) {
+ String projectName, RefDatabase refDb, ImmutableSet<String> ignoredRefs) {
return new BatchRefUpdateValidator(
sharedRefDb,
validationMetrics,
@@ -184,20 +183,14 @@
}
};
return new SharedRefDbBatchRefUpdate(
- batchRefValidatorFactory, A_TEST_PROJECT_NAME, refDatabase, EMPTY_SET);
+ batchRefValidatorFactory, A_TEST_PROJECT_NAME, refDatabase, ImmutableSet.of());
}
private SharedRefDbBatchRefUpdate getSharedRefDbBatchRefUpdateWithMockedValidator() {
BatchRefUpdateValidator.Factory batchRefValidatorFactory =
- new BatchRefUpdateValidator.Factory() {
- @Override
- public BatchRefUpdateValidator create(
- String projectName, RefDatabase refDb, Set<String> ignoredRefs) {
- return batchRefUpdateValidator;
- }
- };
+ (projectName, refDb, ignoredRefs) -> batchRefUpdateValidator;
return new SharedRefDbBatchRefUpdate(
- batchRefValidatorFactory, A_TEST_PROJECT_NAME, refDatabase, EMPTY_SET);
+ batchRefValidatorFactory, A_TEST_PROJECT_NAME, refDatabase, ImmutableSet.of());
}
protected static class RefMatcher implements ArgumentMatcher<Ref> {
diff --git a/src/test/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbGitRepositoryManagerTest.java b/src/test/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbGitRepositoryManagerTest.java
index 14cee6d..a6c7667 100644
--- a/src/test/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbGitRepositoryManagerTest.java
+++ b/src/test/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbGitRepositoryManagerTest.java
@@ -14,12 +14,17 @@
package com.gerritforge.gerrit.globalrefdb.validation;
-import static java.util.Collections.EMPTY_SET;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.verify;
import com.gerritforge.gerrit.globalrefdb.validation.dfsrefdb.RefFixture;
+import com.google.common.collect.ImmutableSet;
import com.google.gerrit.server.git.LocalDiskRepositoryManager;
+import com.google.inject.AbstractModule;
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+import com.google.inject.TypeLiteral;
+import com.google.inject.name.Names;
import org.eclipse.jgit.lib.Repository;
import org.junit.Before;
import org.junit.Test;
@@ -29,6 +34,8 @@
@RunWith(MockitoJUnitRunner.class)
public class SharedRefDbGitRepositoryManagerTest implements RefFixture {
+ private static final ImmutableSet<String> IGNORED_REFS =
+ ImmutableSet.of("refs/heads/foo", "refs/heads/bar");
@Mock LocalDiskRepositoryManager localDiskRepositoryManagerMock;
@@ -49,10 +56,8 @@
public void setUp() throws Exception {
doReturn(sharedRefDbRepositoryMock)
.when(sharedRefDbRepositoryFactoryMock)
- .create(A_TEST_PROJECT_NAME, repositoryMock, EMPTY_SET);
- msRepoMgr =
- new SharedRefDbGitRepositoryManager(
- sharedRefDbRepositoryFactoryMock, localDiskRepositoryManagerMock, null);
+ .create(A_TEST_PROJECT_NAME, repositoryMock, ImmutableSet.of());
+ msRepoMgr = getInjector(ImmutableSet.of()).getInstance(SharedRefDbGitRepositoryManager.class);
}
@Test
@@ -63,7 +68,21 @@
msRepoMgr.openRepository(A_TEST_PROJECT_NAME_KEY);
- verifyThatSharedRefDbRepositoryWrapperHasBeenCreated();
+ verifyThatSharedRefDbRepositoryWrapperHasBeenCreated(ImmutableSet.of());
+ }
+
+ @Test
+ public void openRepositoryShouldCreateSharedRefDbRepositoryWrapperWithIgnoredRefs()
+ throws Exception {
+ doReturn(repositoryMock)
+ .when(localDiskRepositoryManagerMock)
+ .openRepository(A_TEST_PROJECT_NAME_KEY);
+
+ getInjector(IGNORED_REFS)
+ .getInstance(SharedRefDbGitRepositoryManager.class)
+ .openRepository(A_TEST_PROJECT_NAME_KEY);
+
+ verifyThatSharedRefDbRepositoryWrapperHasBeenCreated(IGNORED_REFS);
}
@Test
@@ -74,10 +93,41 @@
msRepoMgr.createRepository(A_TEST_PROJECT_NAME_KEY);
- verifyThatSharedRefDbRepositoryWrapperHasBeenCreated();
+ verifyThatSharedRefDbRepositoryWrapperHasBeenCreated(ImmutableSet.of());
}
- private void verifyThatSharedRefDbRepositoryWrapperHasBeenCreated() {
- verify(sharedRefDbRepositoryFactoryMock).create(A_TEST_PROJECT_NAME, repositoryMock, EMPTY_SET);
+ @Test
+ public void createRepositoryShouldCreateSharedRefDbRepositoryWrapperWithIgnoredRefs()
+ throws Exception {
+ doReturn(repositoryMock)
+ .when(localDiskRepositoryManagerMock)
+ .createRepository(A_TEST_PROJECT_NAME_KEY);
+
+ getInjector(IGNORED_REFS)
+ .getInstance(SharedRefDbGitRepositoryManager.class)
+ .createRepository(A_TEST_PROJECT_NAME_KEY);
+
+ verifyThatSharedRefDbRepositoryWrapperHasBeenCreated(IGNORED_REFS);
+ }
+
+ private Injector getInjector(ImmutableSet<String> ignoredRefs) {
+ return Guice.createInjector(
+ new AbstractModule() {
+
+ @Override
+ protected void configure() {
+ bind(new TypeLiteral<ImmutableSet<String>>() {})
+ .annotatedWith(Names.named(SharedRefDbGitRepositoryManager.IGNORED_REFS))
+ .toInstance(ignoredRefs);
+ bind(SharedRefDbRepository.Factory.class).toInstance(sharedRefDbRepositoryFactoryMock);
+ bind(LocalDiskRepositoryManager.class).toInstance(localDiskRepositoryManagerMock);
+ }
+ });
+ }
+
+ private void verifyThatSharedRefDbRepositoryWrapperHasBeenCreated(
+ ImmutableSet<String> ignoredRefs) {
+ verify(sharedRefDbRepositoryFactoryMock)
+ .create(A_TEST_PROJECT_NAME, repositoryMock, ignoredRefs);
}
}
diff --git a/src/test/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbRefDatabaseTest.java b/src/test/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbRefDatabaseTest.java
index f79435c..771e04d 100644
--- a/src/test/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbRefDatabaseTest.java
+++ b/src/test/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbRefDatabaseTest.java
@@ -14,11 +14,11 @@
package com.gerritforge.gerrit.globalrefdb.validation;
-import static java.util.Collections.EMPTY_SET;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.verify;
import com.gerritforge.gerrit.globalrefdb.validation.dfsrefdb.RefFixture;
+import com.google.common.collect.ImmutableSet;
import org.eclipse.jgit.lib.RefDatabase;
import org.eclipse.jgit.lib.RefUpdate;
import org.junit.Rule;
@@ -54,12 +54,12 @@
refBatchUpdateFactoryMock,
A_TEST_PROJECT_NAME,
refDatabaseMock,
- EMPTY_SET);
+ ImmutableSet.of());
doReturn(refUpdateMock).when(refDatabaseMock).newUpdate(refName, false);
sharedRefDbRefDb.newUpdate(refName, false);
verify(refUpdateFactoryMock)
- .create(A_TEST_PROJECT_NAME, refUpdateMock, refDatabaseMock, EMPTY_SET);
+ .create(A_TEST_PROJECT_NAME, refUpdateMock, refDatabaseMock, ImmutableSet.of());
}
}
diff --git a/src/test/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbRepositoryTest.java b/src/test/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbRepositoryTest.java
index 56fe785..39a57d2 100644
--- a/src/test/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbRepositoryTest.java
+++ b/src/test/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbRepositoryTest.java
@@ -15,11 +15,11 @@
package com.gerritforge.gerrit.globalrefdb.validation;
import static com.google.common.truth.Truth.assertThat;
-import static java.util.Collections.EMPTY_SET;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.verify;
import com.gerritforge.gerrit.globalrefdb.validation.dfsrefdb.RefFixture;
+import com.google.common.collect.ImmutableSet;
import java.io.IOException;
import org.eclipse.jgit.lib.ObjectDatabase;
import org.eclipse.jgit.lib.RefDatabase;
@@ -55,17 +55,18 @@
doReturn(genericRefDb).when(repository).getRefDatabase();
doReturn(sharedRefDb)
.when(sharedRefDbRefDbFactory)
- .create(PROJECT_NAME, genericRefDb, EMPTY_SET);
+ .create(PROJECT_NAME, genericRefDb, ImmutableSet.of());
}
@Test
public void shouldInvokeSharedRefDbRefDbFactoryCreate() {
setMockitoCommon();
try (SharedRefDbRepository sharedRefDbRepository =
- new SharedRefDbRepository(sharedRefDbRefDbFactory, PROJECT_NAME, repository, EMPTY_SET)) {
+ new SharedRefDbRepository(
+ sharedRefDbRefDbFactory, PROJECT_NAME, repository, ImmutableSet.of())) {
sharedRefDbRepository.getRefDatabase();
- verify(sharedRefDbRefDbFactory).create(PROJECT_NAME, genericRefDb, EMPTY_SET);
+ verify(sharedRefDbRefDbFactory).create(PROJECT_NAME, genericRefDb, ImmutableSet.of());
}
}
@@ -73,7 +74,8 @@
public void shouldInvokeNewUpdateInSharedRefDbRefDatabase() throws IOException {
setMockitoCommon();
try (SharedRefDbRepository sharedRefDbRepository =
- new SharedRefDbRepository(sharedRefDbRefDbFactory, PROJECT_NAME, repository, EMPTY_SET)) {
+ new SharedRefDbRepository(
+ sharedRefDbRefDbFactory, PROJECT_NAME, repository, ImmutableSet.of())) {
sharedRefDbRepository.getRefDatabase().newUpdate(REFS_HEADS_MASTER, false);
verify(sharedRefDb).newUpdate(REFS_HEADS_MASTER, false);
@@ -87,7 +89,8 @@
doReturn(sharedRefDbRefUpdate).when(sharedRefDb).newUpdate(REFS_HEADS_MASTER, false);
try (SharedRefDbRepository sharedRefDbRepository =
- new SharedRefDbRepository(sharedRefDbRefDbFactory, PROJECT_NAME, repository, EMPTY_SET)) {
+ new SharedRefDbRepository(
+ sharedRefDbRefDbFactory, PROJECT_NAME, repository, ImmutableSet.of())) {
Result updateResult =
sharedRefDbRepository.getRefDatabase().newUpdate(REFS_HEADS_MASTER, false).update();
diff --git a/src/test/java/com/gerritforge/gerrit/globalrefdb/validation/ValidationModuleTest.java b/src/test/java/com/gerritforge/gerrit/globalrefdb/validation/ValidationModuleTest.java
new file mode 100644
index 0000000..b1af798
--- /dev/null
+++ b/src/test/java/com/gerritforge/gerrit/globalrefdb/validation/ValidationModuleTest.java
@@ -0,0 +1,112 @@
+// 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.gerritforge.gerrit.globalrefdb.validation;
+
+import static java.util.Collections.EMPTY_SET;
+
+import com.gerritforge.gerrit.globalrefdb.validation.dfsrefdb.DefaultSharedRefEnforcement;
+import com.gerritforge.gerrit.globalrefdb.validation.dfsrefdb.SharedRefEnforcement;
+import com.google.common.collect.ImmutableSet;
+import com.google.gerrit.acceptance.LightweightPluginDaemonTest;
+import com.google.gerrit.acceptance.TestPlugin;
+import com.google.gerrit.extensions.config.FactoryModule;
+import com.google.gerrit.server.config.GerritServerConfig;
+import com.google.inject.*;
+import com.google.inject.name.Names;
+import java.util.Optional;
+import java.util.Set;
+import org.eclipse.jgit.lib.Config;
+import org.junit.Test;
+
+@TestPlugin(name = "test-plugin")
+public class ValidationModuleTest extends LightweightPluginDaemonTest {
+
+ @Override
+ public void setUpTestPlugin() {}
+
+ @Test
+ public void shouldSetupValidationWithEmptyIgnoredRefs() throws Exception {
+ installPlugin("test-plugin", ValidationModuleWithEmptyIgnoredRefs.class);
+ }
+
+ @Test
+ public void shouldSetupValidationWithNonEmptyIgnoredRefs() throws Exception {
+ installPlugin("test-plugin", ValidationModuleWithNonEmptyIgnoredRefs.class);
+ }
+
+ @Test
+ public void shouldSetupValidationWithoutIgnoredRefs() throws Exception {
+ installPlugin("test-plugin", ValidationModuleWithoutIgnoredRefs.class);
+ }
+
+ public static class ValidationModuleWithNonEmptyIgnoredRefs extends ValidationModule {
+ @Inject
+ public ValidationModuleWithNonEmptyIgnoredRefs(@GerritServerConfig Config config) {
+ super(config, Optional.of(ImmutableSet.of("foo", "bar")));
+ }
+ }
+
+ public static class ValidationModuleWithEmptyIgnoredRefs extends ValidationModule {
+ @Inject
+ public ValidationModuleWithEmptyIgnoredRefs(@GerritServerConfig Config config) {
+ super(config, Optional.of(EMPTY_SET));
+ }
+ }
+
+ public static class ValidationModuleWithoutIgnoredRefs extends ValidationModule {
+ @Inject
+ public ValidationModuleWithoutIgnoredRefs(@GerritServerConfig Config config) {
+ super(config, Optional.empty());
+ }
+ }
+
+ abstract static class ValidationModule extends FactoryModule {
+ private final Config config;
+ private final Optional<Set<String>> ignoredRefs;
+
+ public ValidationModule(@GerritServerConfig Config config, Optional<Set<String>> ignoredRefs) {
+ this.config = config;
+ this.ignoredRefs = ignoredRefs;
+ }
+
+ @Override
+ protected void configure() {
+ ignoredRefs.ifPresent(
+ ir ->
+ bind(new TypeLiteral<Set<String>>() {})
+ .annotatedWith(Names.named(SharedRefDbGitRepositoryManager.IGNORED_REFS))
+ .toInstance(ir));
+
+ bind(SharedRefDatabaseWrapper.class).in(Scopes.SINGLETON);
+ bind(SharedRefLogger.class).to(Log4jSharedRefLogger.class);
+ factory(LockWrapper.Factory.class);
+
+ factory(SharedRefDbRepository.Factory.class);
+ factory(SharedRefDbRefDatabase.Factory.class);
+ factory(SharedRefDbRefUpdate.Factory.class);
+ factory(SharedRefDbBatchRefUpdate.Factory.class);
+ factory(RefUpdateValidator.Factory.class);
+ factory(BatchRefUpdateValidator.Factory.class);
+
+ SharedRefDbConfiguration cfg = new SharedRefDbConfiguration(config, "test");
+
+ bind(SharedRefDbConfiguration.class).toInstance(cfg);
+ bind(ValidationMetrics.class);
+
+ bind(SharedRefDbGitRepositoryManager.class);
+ bind(SharedRefEnforcement.class).to(DefaultSharedRefEnforcement.class).in(Scopes.SINGLETON);
+ }
+ }
+}