Fix injection problems for Settings provider
Added tests from injection
Change-Id: I4be1ef0ca8557688bfc1e925110b2d493dc07077
Signed-off-by: Jan Srnicek <jsrnicek@cisco.com>
diff --git a/pom.xml b/pom.xml
index a1af88d..f0c1710 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
<groupId>io.fd.gerrit</groupId>
<artifactId>maintainer-plugin</artifactId>
- <version>2.13-SR3</version>
+ <version>2.13-SR4-SNAPSHOT</version>
<packaging>jar</packaging>
<properties>
@@ -80,5 +80,11 @@
<version>1.10.19</version>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>com.google.inject.extensions</groupId>
+ <artifactId>guice-testlib</artifactId>
+ <version>4.1.0</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
</project>
\ No newline at end of file
diff --git a/src/main/java/io/fd/maintainer/plugin/service/MaintainersProvider.java b/src/main/java/io/fd/maintainer/plugin/service/MaintainersProvider.java
index ca6d23c..b402bcd 100644
--- a/src/main/java/io/fd/maintainer/plugin/service/MaintainersProvider.java
+++ b/src/main/java/io/fd/maintainer/plugin/service/MaintainersProvider.java
@@ -16,9 +16,6 @@
package io.fd.maintainer.plugin.service;
-import static java.lang.String.format;
-import static java.util.Objects.nonNull;
-
import com.google.gerrit.reviewdb.client.Change;
import com.google.gerrit.reviewdb.client.Project;
import com.google.gerrit.reviewdb.server.ReviewDb;
@@ -33,11 +30,6 @@
import io.fd.maintainer.plugin.service.dto.PluginBranchSpecificSettings;
import io.fd.maintainer.plugin.util.ClosestMatch;
import io.fd.maintainer.plugin.util.PatchListProcessing;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.util.List;
-import java.util.Optional;
-import javax.annotation.Nonnull;
import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.lib.ObjectLoader;
import org.eclipse.jgit.lib.Ref;
@@ -49,6 +41,16 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import javax.annotation.Nonnull;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.util.List;
+import java.util.Optional;
+
+import static com.google.common.base.Preconditions.checkState;
+import static java.lang.String.format;
+import static java.util.Objects.nonNull;
+
@Singleton
public class MaintainersProvider implements ClosestMatch, PatchListProcessing {
@@ -68,7 +70,6 @@
@Nonnull
public List<ComponentInfo> getMaintainersInfo(@Nonnull final String branchName, final int changeNumber,
@Nonnull final Project.NameKey projectKey) {
-
// get configuration for branch of change
final PluginBranchSpecificSettings settings =
settingsProvider.getBranchSpecificSettings(branchName, projectKey);
@@ -92,15 +93,14 @@
if (nonNull(maintainersFileContent)) {
return maintainersParser.parseMaintainers(maintainersFileContent);
} else {
+ LOG.info("Unable to find file {} in branch {}", settings.getLocalFilePath(), fullFileRef);
throw new IllegalStateException(
format("Unable to find file %s in branch %s", settings.getLocalFilePath(),
fullFileRef));
}
- } catch (IOException | MaintainerMismatchException e) {
- throw new IllegalStateException(e);
}
-
- } catch (OrmException e) {
+ } catch (OrmException | IOException | MaintainerMismatchException e) {
+ LOG.error("Error while searching maintainers file", e);
throw new IllegalStateException(e);
}
}
@@ -113,6 +113,7 @@
final RevCommit headCommit) {
LOG.info("Starting search at {}", headCommit);
+ checkState(headCommit.getParentCount() > 0, "Bottom of the branch has been reached and maintainers file hasnt been found");
final RevCommit parent = getRevCommit(revWalk, headCommit.getParent(0).getId());
LOG.info("Finding most recent maintainers file in {}", parent);
diff --git a/src/main/java/io/fd/maintainer/plugin/service/SettingsProvider.java b/src/main/java/io/fd/maintainer/plugin/service/SettingsProvider.java
index 7c69e0a..01034bc 100644
--- a/src/main/java/io/fd/maintainer/plugin/service/SettingsProvider.java
+++ b/src/main/java/io/fd/maintainer/plugin/service/SettingsProvider.java
@@ -16,7 +16,7 @@
package io.fd.maintainer.plugin.service;
-import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Strings;
import com.google.gerrit.reviewdb.client.Project;
import com.google.gerrit.reviewdb.client.RefNames;
import com.google.gerrit.server.config.PluginConfigFactory;
@@ -37,7 +37,7 @@
import static java.lang.String.format;
@Singleton
-public final class SettingsProvider implements ClosestMatch {
+public class SettingsProvider implements ClosestMatch {
private static final Logger LOG = LoggerFactory.getLogger(SettingsProvider.class);
@@ -65,11 +65,11 @@
private static final String DISLIKE_WARNINGS = "dislikewarnings";
private static final boolean DEFAULT_DISLIKE_WARNINGS = false;
- @Inject
- private PluginConfigFactory cfg;
- @VisibleForTesting
- SettingsProvider(PluginConfigFactory cfg) {
+ private final PluginConfigFactory cfg;
+
+ @Inject
+ public SettingsProvider(PluginConfigFactory cfg) {
this.cfg = cfg;
}
@@ -156,12 +156,16 @@
final String alternativeBranch,
final Project.NameKey projectKey) {
final Config config = projectSpecificPluginConfig(projectKey);
- return Optional.ofNullable(config.getString(BRANCH_SECTION, branch, PLUGIN_USER))
- .orElse(Optional.ofNullable(config.getString(BRANCH_SECTION, alternativeBranch, PLUGIN_USER))
- .orElseThrow(() -> {
- LOG.error("Plugin user not specified for branch {}", branch);
- return new IllegalStateException(format("Plugin user not specified for branch %s", branch));
- }));
+
+ final String user = Optional.ofNullable(config.getString(BRANCH_SECTION, branch, PLUGIN_USER))
+ .orElse(config.getString(BRANCH_SECTION, alternativeBranch, PLUGIN_USER));
+
+ if (Strings.isNullOrEmpty(user)) {
+ LOG.error("Plugin user not specified for branch {}", branch);
+ throw new IllegalStateException(format("Plugin user not specified for branch %s", branch));
+ } else {
+ return user;
+ }
}
private <T> T getKey(final Project.NameKey projectKey,
diff --git a/src/main/java/io/fd/maintainer/plugin/service/push/ReviewerPusher.java b/src/main/java/io/fd/maintainer/plugin/service/push/ReviewerPusher.java
index 4354df3..00d958c 100644
--- a/src/main/java/io/fd/maintainer/plugin/service/push/ReviewerPusher.java
+++ b/src/main/java/io/fd/maintainer/plugin/service/push/ReviewerPusher.java
@@ -41,6 +41,7 @@
import io.fd.maintainer.plugin.util.WarningGenerator;
import java.util.Collection;
import java.util.Map;
+import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
import javax.annotation.Nonnull;
@@ -93,6 +94,7 @@
.flatMap(Collection::stream)
.map(Maintainer::getName)
.map(accountIndex::get)
+ .filter(Objects::nonNull)
.collect(Collectors.toSet());
LOG.info("Adding reviewers for change {}", change.getId());
diff --git a/src/test/java/io/fd/maintainer/plugin/MaintainerPluginModuleTest.java b/src/test/java/io/fd/maintainer/plugin/MaintainerPluginModuleTest.java
new file mode 100644
index 0000000..222074c
--- /dev/null
+++ b/src/test/java/io/fd/maintainer/plugin/MaintainerPluginModuleTest.java
@@ -0,0 +1,79 @@
+package io.fd.maintainer.plugin;
+
+import com.google.gerrit.reviewdb.server.ReviewDb;
+import com.google.gerrit.server.CurrentUser;
+import com.google.gerrit.server.account.AccountByEmailCache;
+import com.google.gerrit.server.change.*;
+import com.google.gerrit.server.config.PluginConfigFactory;
+import com.google.gerrit.server.git.GitRepositoryManager;
+import com.google.gerrit.server.patch.PatchListCache;
+import com.google.gwtorm.server.SchemaFactory;
+import com.google.inject.Guice;
+import com.google.inject.testing.fieldbinder.Bind;
+import com.google.inject.testing.fieldbinder.BoundFieldModule;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+public class MaintainerPluginModuleTest {
+
+ @Mock
+ @Bind
+ private PluginConfigFactory pluginConfigFactory;
+
+ @Mock
+ @Bind
+ private GitRepositoryManager repoManager;
+
+ @Mock
+ @Bind
+ private SchemaFactory<ReviewDb> reviewDbSchemaFactory;
+
+ @Mock
+ @Bind
+ private PatchListCache patchListCache;
+
+ @Mock
+ @Bind
+ private ReviewDb reviewDb;
+
+ @Mock
+ @Bind
+ private CurrentUser currentUser;
+
+ @Mock
+ @Bind
+ private PostReview postReview;
+
+ @Mock
+ @Bind
+ private PostReviewers postReviewers;
+
+ @Mock
+ @Bind
+ private ChangesCollection changesCollection;
+
+ @Mock
+ @Bind
+ private Revisions revisions;
+
+ @Mock
+ @Bind
+ private Submit submitPusher;
+
+ @Mock
+ @Bind
+ private AccountByEmailCache accountByEmailCache;
+
+ @Before
+ public void init() {
+ MockitoAnnotations.initMocks(this);
+ }
+
+ @Test
+ public void configure() throws Exception {
+ Guice.createInjector(new MaintainerPluginModule(), BoundFieldModule.of(this)).injectMembers(this);
+ }
+
+}
\ No newline at end of file