Decouple facade, Conduit, and ConduitConnection
This will help resurrecting the tests and making them pass.
Change-Id: I07c9ff09cc7a3d5c69c1058e94934bb0407655e4
diff --git a/src/main/java/com/googlesource/gerrit/plugins/its/phabricator/PhabricatorItsFacade.java b/src/main/java/com/googlesource/gerrit/plugins/its/phabricator/PhabricatorItsFacade.java
index 93c4e86..e2cea8c 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/its/phabricator/PhabricatorItsFacade.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/its/phabricator/PhabricatorItsFacade.java
@@ -44,11 +44,14 @@
private final Gson gson;
@Inject
- public PhabricatorItsFacade(@PluginName String pluginName, @GerritServerConfig Config cfg) {
+ public PhabricatorItsFacade(
+ @PluginName String pluginName,
+ @GerritServerConfig Config cfg,
+ Conduit.Factory conduitFactory) {
String url = cfg.getString(pluginName, null, GERRIT_CONFIG_URL);
String token = cfg.getString(pluginName, null, GERRIT_CONFIG_TOKEN);
- this.conduit = new Conduit(url, token);
+ this.conduit = conduitFactory.create(url, token);
this.gson = new Gson();
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/its/phabricator/PhabricatorModule.java b/src/main/java/com/googlesource/gerrit/plugins/its/phabricator/PhabricatorModule.java
index b8e7aa4..402316e 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/its/phabricator/PhabricatorModule.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/its/phabricator/PhabricatorModule.java
@@ -16,17 +16,20 @@
import com.google.common.flogger.FluentLogger;
import com.google.gerrit.extensions.annotations.PluginName;
+import com.google.gerrit.extensions.config.FactoryModule;
import com.google.gerrit.server.config.GerritServerConfig;
import com.google.gerrit.server.config.PluginConfigFactory;
-import com.google.inject.AbstractModule;
import com.google.inject.Inject;
+import com.google.inject.Scopes;
import com.googlesource.gerrit.plugins.its.base.ItsHookModule;
import com.googlesource.gerrit.plugins.its.base.its.ItsFacade;
import com.googlesource.gerrit.plugins.its.base.its.ItsFacadeFactory;
import com.googlesource.gerrit.plugins.its.base.its.SingleItsServer;
+import com.googlesource.gerrit.plugins.its.phabricator.conduit.Conduit;
+import com.googlesource.gerrit.plugins.its.phabricator.conduit.ConduitConnection;
import org.eclipse.jgit.lib.Config;
-public class PhabricatorModule extends AbstractModule {
+public class PhabricatorModule extends FactoryModule {
private static final FluentLogger logger = FluentLogger.forEnclosingClass();
@@ -48,7 +51,9 @@
protected void configure() {
if (gerritConfig.getString(pluginName, null, "url") != null) {
logger.atInfo().log("Phabricator is configured as ITS");
- bind(ItsFacade.class).toInstance(new PhabricatorItsFacade(pluginName, gerritConfig));
+ factory(ConduitConnection.Factory.class);
+ factory(Conduit.Factory.class);
+ bind(ItsFacade.class).to(PhabricatorItsFacade.class).in(Scopes.SINGLETON);
bind(ItsFacadeFactory.class).to(SingleItsServer.class);
install(new ItsHookModule(pluginName, pluginCfgFactory));
diff --git a/src/main/java/com/googlesource/gerrit/plugins/its/phabricator/conduit/Conduit.java b/src/main/java/com/googlesource/gerrit/plugins/its/phabricator/conduit/Conduit.java
index fb7c1f7..298a83e 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/its/phabricator/conduit/Conduit.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/its/phabricator/conduit/Conduit.java
@@ -18,6 +18,8 @@
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
+import com.google.inject.Inject;
+import com.google.inject.assistedinject.Assisted;
import com.googlesource.gerrit.plugins.its.phabricator.conduit.results.ConduitPing;
import com.googlesource.gerrit.plugins.its.phabricator.conduit.results.ManiphestEdit;
import com.googlesource.gerrit.plugins.its.phabricator.conduit.results.ManiphestResults;
@@ -34,6 +36,9 @@
* <p>This class is not thread-safe.
*/
public class Conduit {
+ public interface Factory {
+ Conduit create(@Assisted("baseUrl") String baseUrl, @Assisted("token") String token);
+ }
public static final String ACTION_COMMENT = "comment";
@@ -48,12 +53,12 @@
private String token;
- public Conduit(final String baseUrl) {
- this(baseUrl, null);
- }
-
- public Conduit(final String baseUrl, final String token) {
- this.conduitConnection = new ConduitConnection(baseUrl);
+ @Inject
+ public Conduit(
+ ConduitConnection.Factory conduitConnectionFactory,
+ @Assisted("baseUrl") String baseUrl,
+ @Assisted("token") String token) {
+ this.conduitConnection = conduitConnectionFactory.create(baseUrl);
this.token = token;
this.gson = new Gson();
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/its/phabricator/conduit/ConduitConnection.java b/src/main/java/com/googlesource/gerrit/plugins/its/phabricator/conduit/ConduitConnection.java
index 7a65c72..8eb695b 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/its/phabricator/conduit/ConduitConnection.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/its/phabricator/conduit/ConduitConnection.java
@@ -17,6 +17,8 @@
import com.google.common.flogger.FluentLogger;
import com.google.gson.Gson;
import com.google.gson.JsonElement;
+import com.google.inject.Inject;
+import com.google.inject.assistedinject.Assisted;
import com.googlesource.gerrit.plugins.its.phabricator.conduit.results.CallCapsule;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
@@ -31,15 +33,20 @@
import org.apache.http.util.EntityUtils;
/** Abstracts the connection to Conduit API */
-class ConduitConnection {
+public class ConduitConnection {
private static final FluentLogger logger = FluentLogger.forEnclosingClass();
+ public interface Factory {
+ ConduitConnection create(String baseUrl);
+ }
+
private final String apiUrlBase;
private final Gson gson;
private CloseableHttpClient client;
- ConduitConnection(final String baseUrl) {
+ @Inject
+ ConduitConnection(@Assisted String baseUrl) {
apiUrlBase = baseUrl.replaceAll("/+$", "") + "/api/";
gson = new Gson();
client = null;