Deprecate plugin
Change-Id: I85a339229e5aa4b71351455a842c8ea04e88b48f
diff --git a/.buckconfig b/.buckconfig
deleted file mode 100644
index 2b818b6..0000000
--- a/.buckconfig
+++ /dev/null
@@ -1,16 +0,0 @@
-[alias]
- sync-index = //:sync-index
- plugin = //:sync-index
- src = //:sync-index-sources
-
-[java]
- jar_spool_mode = direct_to_jar
- src_roots = java, resources
-
-[project]
- ignore = .git, eclipse-out/
- parallel_parsing = true
-
-[cache]
- mode = dir
- dir = buck-out/cache
diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index c27e17f..0000000
--- a/.gitignore
+++ /dev/null
@@ -1,9 +0,0 @@
-/.buckd/
-/.buckversion
-/.classpath
-/.project
-/.settings/
-/.watchmanconfig
-/buck-out/
-/bucklets
-/eclipse-out/
diff --git a/BUCK b/BUCK
deleted file mode 100644
index bd6696e..0000000
--- a/BUCK
+++ /dev/null
@@ -1,84 +0,0 @@
-include_defs('//bucklets/gerrit_plugin.bucklet')
-include_defs('//bucklets/java_sources.bucklet')
-include_defs('//bucklets/maven_jar.bucklet')
-
-SOURCES = glob(['src/main/java/**/*.java'])
-RESOURCES = glob(['src/main/resources/**/*'])
-
-DEPS = [
- ':wiremock',
-]
-
-TEST_DEPS = GERRIT_PLUGIN_API + GERRIT_TESTS + DEPS + [
- ':sync-index__plugin',
- ':mockito',
-]
-
-gerrit_plugin(
- name = 'sync-index',
- srcs = SOURCES,
- resources = RESOURCES,
- manifest_entries = [
- 'Gerrit-PluginName: sync-index',
- 'Gerrit-ApiType: plugin',
- 'Gerrit-Module: com.ericsson.gerrit.plugins.syncindex.Module',
- 'Gerrit-HttpModule: com.ericsson.gerrit.plugins.syncindex.HttpModule',
- 'Implementation-Title: sync-index plugin',
- 'Implementation-URL: https://gerrit-review.googlesource.com/#/admin/projects/plugins/sync-index',
- 'Implementation-Vendor: Ericsson',
- ],
- provided_deps = GERRIT_TESTS,
- deps = DEPS,
-)
-
-java_sources(
- name = 'sync-index-sources',
- srcs = SOURCES + RESOURCES,
-)
-
-java_library(
- name = 'classpath',
- deps = TEST_DEPS,
-)
-
-java_test(
- name = 'sync-index_tests',
- srcs = glob(['src/test/java/**/*.java']),
- labels = ['sync-index'],
- deps = TEST_DEPS,
-)
-
-maven_jar(
- name = 'wiremock',
- id = 'com.github.tomakehurst:wiremock:1.58:standalone',
- sha1 = '21c8386a95c5dc54a9c55839c5a95083e42412ae',
- license = 'Apache2.0',
- attach_source = False,
-)
-
-maven_jar(
- name = 'mockito',
- id = 'org.mockito:mockito-core:2.5.0',
- sha1 = 'be28d46a52c7f2563580adeca350145e9ce916f8',
- license = 'MIT',
- deps = [
- ':byte-buddy',
- ':objenesis',
- ],
-)
-
-maven_jar(
- name = 'byte-buddy',
- id = 'net.bytebuddy:byte-buddy:1.5.12',
- sha1 = 'b1ba1d15f102b36ed43b826488114678d6d413da',
- license = 'DO_NOT_DISTRIBUTE',
- attach_source = False,
-)
-
-maven_jar(
- name = 'objenesis',
- id = 'org.objenesis:objenesis:2.4',
- sha1 = '2916b6c96b50c5b3ec4452ed99401db745aabb27',
- license = 'DO_NOT_DISTRIBUTE',
- attach_source = False,
-)
diff --git a/README-THIS-REPO-IS-DEPRECATED.txt b/README-THIS-REPO-IS-DEPRECATED.txt
new file mode 100644
index 0000000..497ef2a
--- /dev/null
+++ b/README-THIS-REPO-IS-DEPRECATED.txt
@@ -0,0 +1,3 @@
+This plugin is deprecated. The functionality has been merged into
+
+https://gerrit-review.googlesource.com/#/admin/projects/plugins/high-availability
diff --git a/lib/gerrit/BUCK b/lib/gerrit/BUCK
deleted file mode 100644
index f83d917..0000000
--- a/lib/gerrit/BUCK
+++ /dev/null
@@ -1,22 +0,0 @@
-include_defs('//bucklets/maven_jar.bucklet')
-
-VER = '2.13'
-REPO = MAVEN_CENTRAL
-
-maven_jar(
- name = 'acceptance-framework',
- id = 'com.google.gerrit:gerrit-acceptance-framework:' + VER,
- sha1 = 'a6913a61196a8fccdb45e761f43a0b7e21867c90',
- license = 'Apache2.0',
- attach_source = False,
- repository = REPO,
-)
-
-maven_jar(
- name = 'plugin-api',
- id = 'com.google.gerrit:gerrit-plugin-api:' + VER,
- sha1 = 'e25d55b8f41627c4ae6b9d2069ec398638b219a3',
- license = 'Apache2.0',
- attach_source = False,
- repository = REPO,
-)
diff --git a/src/main/java/com/ericsson/gerrit/plugins/syncindex/Configuration.java b/src/main/java/com/ericsson/gerrit/plugins/syncindex/Configuration.java
deleted file mode 100644
index a93ba84..0000000
--- a/src/main/java/com/ericsson/gerrit/plugins/syncindex/Configuration.java
+++ /dev/null
@@ -1,86 +0,0 @@
-// Copyright (C) 2015 Ericsson
-//
-// 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.ericsson.gerrit.plugins.syncindex;
-
-import com.google.common.base.CharMatcher;
-import com.google.common.base.Strings;
-import com.google.gerrit.extensions.annotations.PluginName;
-import com.google.gerrit.server.config.PluginConfig;
-import com.google.gerrit.server.config.PluginConfigFactory;
-import com.google.inject.Inject;
-import com.google.inject.Singleton;
-
-@Singleton
-class Configuration {
- private static final int DEFAULT_TIMEOUT_MS = 5000;
- private static final int DEFAULT_MAX_TRIES = 5;
- private static final int DEFAULT_RETRY_INTERVAL = 1000;
- private static final int DEFAULT_THREAD_POOL_SIZE = 1;
-
- private final String url;
- private final String user;
- private final String password;
- private final int connectionTimeout;
- private final int socketTimeout;
- private final int maxTries;
- private final int retryInterval;
- private final int threadPoolSize;
-
- @Inject
- Configuration(PluginConfigFactory config,
- @PluginName String pluginName) {
- PluginConfig cfg = config.getFromGerritConfig(pluginName, true);
- url = Strings.nullToEmpty(cfg.getString("url"));
- user = Strings.nullToEmpty(cfg.getString("user"));
- password = Strings.nullToEmpty(cfg.getString("password"));
- connectionTimeout = cfg.getInt("connectionTimeout", DEFAULT_TIMEOUT_MS);
- socketTimeout = cfg.getInt("socketTimeout", DEFAULT_TIMEOUT_MS);
- maxTries = cfg.getInt("maxTries", DEFAULT_MAX_TRIES);
- retryInterval = cfg.getInt("retryInterval", DEFAULT_RETRY_INTERVAL);
- threadPoolSize = cfg.getInt("threadPoolSize", DEFAULT_THREAD_POOL_SIZE);
- }
-
- int getConnectionTimeout() {
- return connectionTimeout;
- }
-
- int getMaxTries() {
- return maxTries;
- }
-
- int getRetryInterval() {
- return retryInterval;
- }
-
- int getSocketTimeout() {
- return socketTimeout;
- }
-
- String getUrl() {
- return CharMatcher.is('/').trimTrailingFrom(url);
- }
-
- String getUser() {
- return user;
- }
-
- String getPassword() {
- return password;
- }
-
- public int getThreadPoolSize() {
- return threadPoolSize;
- }
-}
diff --git a/src/main/java/com/ericsson/gerrit/plugins/syncindex/Context.java b/src/main/java/com/ericsson/gerrit/plugins/syncindex/Context.java
deleted file mode 100644
index 67abc1e..0000000
--- a/src/main/java/com/ericsson/gerrit/plugins/syncindex/Context.java
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright (C) 2015 Ericsson
-//
-// 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.ericsson.gerrit.plugins.syncindex;
-
-/**
- * Allows to tag a forwarded event to avoid infinitely looping events.
- */
-class Context {
- private static final ThreadLocal<Boolean> FORWARDED_EVENT =
- new ThreadLocal<Boolean>() {
- @Override
- protected Boolean initialValue() {
- return false;
- }
- };
-
- private Context() {
- }
-
- static Boolean isForwardedEvent() {
- return FORWARDED_EVENT.get();
- }
-
- static void setForwardedEvent(Boolean b) {
- FORWARDED_EVENT.set(b);
- }
-
- static void unsetForwardedEvent() {
- FORWARDED_EVENT.remove();
- }
-}
diff --git a/src/main/java/com/ericsson/gerrit/plugins/syncindex/HttpClientProvider.java b/src/main/java/com/ericsson/gerrit/plugins/syncindex/HttpClientProvider.java
deleted file mode 100644
index 3b2f177..0000000
--- a/src/main/java/com/ericsson/gerrit/plugins/syncindex/HttpClientProvider.java
+++ /dev/null
@@ -1,194 +0,0 @@
-// Copyright (C) 2015 Ericsson
-//
-// 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.ericsson.gerrit.plugins.syncindex;
-
-import com.google.inject.Inject;
-import com.google.inject.Provider;
-
-import org.apache.http.HttpResponse;
-import org.apache.http.auth.AuthScope;
-import org.apache.http.auth.UsernamePasswordCredentials;
-import org.apache.http.client.HttpRequestRetryHandler;
-import org.apache.http.client.ServiceUnavailableRetryStrategy;
-import org.apache.http.client.config.RequestConfig;
-import org.apache.http.config.Registry;
-import org.apache.http.config.RegistryBuilder;
-import org.apache.http.conn.HttpClientConnectionManager;
-import org.apache.http.conn.socket.ConnectionSocketFactory;
-import org.apache.http.conn.socket.PlainConnectionSocketFactory;
-import org.apache.http.conn.ssl.NoopHostnameVerifier;
-import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
-import org.apache.http.impl.client.BasicCredentialsProvider;
-import org.apache.http.impl.client.CloseableHttpClient;
-import org.apache.http.impl.client.HttpClients;
-import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
-import org.apache.http.protocol.HttpContext;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.IOException;
-import java.net.URI;
-import java.security.KeyManagementException;
-import java.security.NoSuchAlgorithmException;
-import java.security.cert.X509Certificate;
-
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.SSLException;
-import javax.net.ssl.TrustManager;
-import javax.net.ssl.X509TrustManager;
-
-/**
- * Provides an HTTP client with SSL capabilities.
- */
-class HttpClientProvider implements Provider<CloseableHttpClient> {
- private static final Logger log = LoggerFactory
- .getLogger(HttpClientProvider.class);
- private static final int CONNECTIONS_PER_ROUTE = 100;
- // Up to 2 target instances with the max number of connections per host:
- private static final int MAX_CONNECTIONS = 2 * CONNECTIONS_PER_ROUTE;
-
- private static final int ERROR_CODES = 500;
- private static final int MAX_CONNECTION_INACTIVITY = 10000;
-
- private final Configuration cfg;
- private final SSLConnectionSocketFactory sslSocketFactory;
-
- @Inject
- HttpClientProvider(Configuration cfg) {
- this.cfg = cfg;
- this.sslSocketFactory = buildSslSocketFactory();
- }
-
- @Override
- public CloseableHttpClient get() {
- return HttpClients.custom().setSSLSocketFactory(sslSocketFactory)
- .setConnectionManager(customConnectionManager())
- .setDefaultCredentialsProvider(buildCredentials())
- .setDefaultRequestConfig(customRequestConfig())
- .setRetryHandler(customRetryHandler())
- .setServiceUnavailableRetryStrategy(customServiceUnavailRetryStrategy())
- .build();
- }
-
- private RequestConfig customRequestConfig() {
- return RequestConfig.custom().setConnectTimeout(cfg.getConnectionTimeout())
- .setSocketTimeout(cfg.getSocketTimeout())
- .setConnectionRequestTimeout(cfg.getConnectionTimeout())
- .build();
- }
-
- private HttpRequestRetryHandler customRetryHandler() {
- return new HttpRequestRetryHandler() {
-
- @Override
- public boolean retryRequest(IOException exception, int executionCount,
- HttpContext context) {
- if (executionCount > cfg.getMaxTries()
- || exception instanceof SSLException) {
- return false;
- }
- logRetry(exception.getMessage());
- try {
- Thread.sleep(cfg.getRetryInterval());
- } catch (InterruptedException e) {
- Thread.currentThread().interrupt();
- return false;
- }
- return true;
- }
- };
- }
-
- private ServiceUnavailableRetryStrategy customServiceUnavailRetryStrategy() {
- return new ServiceUnavailableRetryStrategy() {
- @Override
- public boolean retryRequest(HttpResponse response, int executionCount,
- HttpContext context) {
- if (executionCount > cfg.getMaxTries()) {
- return false;
- }
- if (response.getStatusLine().getStatusCode() >= ERROR_CODES) {
- logRetry(response.getStatusLine().getReasonPhrase());
- return true;
- }
- return false;
- }
-
- @Override
- public long getRetryInterval() {
- return cfg.getRetryInterval();
- }
- };
- }
-
- private void logRetry(String cause) {
- log.debug("Retrying request to '" + cfg.getUrl() + "' Cause: " + cause);
- }
-
- private HttpClientConnectionManager customConnectionManager() {
- Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder
- .<ConnectionSocketFactory> create().register("https", sslSocketFactory)
- .register("http", PlainConnectionSocketFactory.INSTANCE).build();
- PoolingHttpClientConnectionManager connManager =
- new PoolingHttpClientConnectionManager(socketFactoryRegistry);
- connManager.setDefaultMaxPerRoute(CONNECTIONS_PER_ROUTE);
- connManager.setMaxTotal(MAX_CONNECTIONS);
- connManager.setValidateAfterInactivity(MAX_CONNECTION_INACTIVITY);
- return connManager;
- }
-
- private SSLConnectionSocketFactory buildSslSocketFactory() {
- return new SSLConnectionSocketFactory(buildSslContext(),
- NoopHostnameVerifier.INSTANCE);
- }
-
- private SSLContext buildSslContext() {
- try {
- TrustManager[] trustAllCerts =
- new TrustManager[] {new DummyX509TrustManager()};
- SSLContext context = SSLContext.getInstance("TLS");
- context.init(null, trustAllCerts, null);
- return context;
- } catch (KeyManagementException | NoSuchAlgorithmException e) {
- log.warn("Error building SSLContext object", e);
- return null;
- }
- }
-
- private BasicCredentialsProvider buildCredentials() {
- URI uri = URI.create(cfg.getUrl());
- BasicCredentialsProvider creds = new BasicCredentialsProvider();
- creds.setCredentials(new AuthScope(uri.getHost(), uri.getPort()),
- new UsernamePasswordCredentials(cfg.getUser(), cfg.getPassword()));
- return creds;
- }
-
- private static class DummyX509TrustManager implements X509TrustManager {
- @Override
- public X509Certificate[] getAcceptedIssuers() {
- return new X509Certificate[0];
- }
-
- @Override
- public void checkClientTrusted(X509Certificate[] certs, String authType) {
- // no check
- }
-
- @Override
- public void checkServerTrusted(X509Certificate[] certs, String authType) {
- // no check
- }
- }
-}
diff --git a/src/main/java/com/ericsson/gerrit/plugins/syncindex/HttpModule.java b/src/main/java/com/ericsson/gerrit/plugins/syncindex/HttpModule.java
deleted file mode 100644
index 334c195..0000000
--- a/src/main/java/com/ericsson/gerrit/plugins/syncindex/HttpModule.java
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright (C) 2015 Ericsson
-//
-// 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.ericsson.gerrit.plugins.syncindex;
-
-import com.google.gerrit.httpd.plugins.HttpPluginModule;
-
-class HttpModule extends HttpPluginModule {
- @Override
- protected void configureServlets() {
- serveRegex("/index/\\d+$").with(SyncIndexRestApiServlet.class);
- }
-}
diff --git a/src/main/java/com/ericsson/gerrit/plugins/syncindex/HttpSession.java b/src/main/java/com/ericsson/gerrit/plugins/syncindex/HttpSession.java
deleted file mode 100644
index 159acad..0000000
--- a/src/main/java/com/ericsson/gerrit/plugins/syncindex/HttpSession.java
+++ /dev/null
@@ -1,47 +0,0 @@
-// Copyright (C) 2015 Ericsson
-//
-// 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.ericsson.gerrit.plugins.syncindex;
-
-import com.google.inject.Inject;
-
-import com.ericsson.gerrit.plugins.syncindex.IndexResponseHandler.IndexResult;
-
-import org.apache.http.client.methods.HttpDelete;
-import org.apache.http.client.methods.HttpPost;
-import org.apache.http.impl.client.CloseableHttpClient;
-
-import java.io.IOException;
-
-class HttpSession {
- private final CloseableHttpClient httpClient;
- private final String url;
-
- @Inject
- HttpSession(CloseableHttpClient httpClient,
- @SyncUrl String url) {
- this.httpClient = httpClient;
- this.url = url;
- }
-
- IndexResult post(String endpoint) throws IOException {
- return httpClient.execute(new HttpPost(url + endpoint),
- new IndexResponseHandler());
- }
-
- IndexResult delete(String endpoint) throws IOException {
- return httpClient.execute(new HttpDelete(url + endpoint),
- new IndexResponseHandler());
- }
-}
diff --git a/src/main/java/com/ericsson/gerrit/plugins/syncindex/IndexEventHandler.java b/src/main/java/com/ericsson/gerrit/plugins/syncindex/IndexEventHandler.java
deleted file mode 100644
index 1027565..0000000
--- a/src/main/java/com/ericsson/gerrit/plugins/syncindex/IndexEventHandler.java
+++ /dev/null
@@ -1,101 +0,0 @@
-// Copyright (C) 2015 Ericsson
-//
-// 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.ericsson.gerrit.plugins.syncindex;
-
-import com.google.common.base.Objects;
-import com.google.gerrit.extensions.annotations.PluginName;
-import com.google.gerrit.extensions.events.ChangeIndexedListener;
-import com.google.inject.Inject;
-
-import java.util.Collections;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.Executor;
-
-class IndexEventHandler implements ChangeIndexedListener {
- private final Executor executor;
- private final RestSession restClient;
- private final String pluginName;
- private final Set<SyncIndexTask> queuedTasks = Collections
- .newSetFromMap(new ConcurrentHashMap<SyncIndexTask, Boolean>());
-
- @Inject
- IndexEventHandler(@SyncIndexExecutor Executor executor,
- @PluginName String pluginName,
- RestSession restClient) {
- this.restClient = restClient;
- this.executor = executor;
- this.pluginName = pluginName;
- }
-
- @Override
- public void onChangeIndexed(int id) {
- executeIndexTask(id, false);
- }
-
- @Override
- public void onChangeDeleted(int id) {
- executeIndexTask(id, true);
- }
-
- private void executeIndexTask(int id, boolean deleted) {
- if (!Context.isForwardedEvent()) {
- SyncIndexTask syncIndexTask = new SyncIndexTask(id, deleted);
- if (queuedTasks.add(syncIndexTask)) {
- executor.execute(syncIndexTask);
- }
- }
- }
-
- class SyncIndexTask implements Runnable {
- private int changeId;
- private boolean deleted;
-
- SyncIndexTask(int changeId, boolean deleted) {
- this.changeId = changeId;
- this.deleted = deleted;
- }
-
- @Override
- public void run() {
- queuedTasks.remove(this);
- if (deleted) {
- restClient.deleteFromIndex(changeId);
- } else {
- restClient.index(changeId);
- }
- }
-
- @Override
- public int hashCode() {
- return Objects.hashCode(changeId, deleted);
- }
-
- @Override
- public boolean equals(Object obj) {
- if (!(obj instanceof SyncIndexTask)) {
- return false;
- }
- SyncIndexTask other = (SyncIndexTask) obj;
- return changeId == other.changeId && deleted == other.deleted;
- }
-
- @Override
- public String toString() {
- return String.format("[%s] Index change %s in target instance",
- pluginName, changeId);
- }
- }
-}
diff --git a/src/main/java/com/ericsson/gerrit/plugins/syncindex/IndexResponseHandler.java b/src/main/java/com/ericsson/gerrit/plugins/syncindex/IndexResponseHandler.java
deleted file mode 100644
index 2d549ae..0000000
--- a/src/main/java/com/ericsson/gerrit/plugins/syncindex/IndexResponseHandler.java
+++ /dev/null
@@ -1,74 +0,0 @@
-// Copyright (C) 2015 Ericsson
-//
-// 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.ericsson.gerrit.plugins.syncindex;
-
-import static javax.servlet.http.HttpServletResponse.SC_NO_CONTENT;
-
-import com.ericsson.gerrit.plugins.syncindex.IndexResponseHandler.IndexResult;
-
-import org.apache.http.HttpEntity;
-import org.apache.http.HttpResponse;
-import org.apache.http.client.ResponseHandler;
-import org.apache.http.util.EntityUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.IOException;
-
-class IndexResponseHandler implements ResponseHandler<IndexResult> {
-
- static class IndexResult {
- private boolean successful;
- private String message;
-
- IndexResult(boolean successful, String message) {
- this.successful = successful;
- this.message = message;
- }
-
- boolean isSuccessful() {
- return successful;
- }
-
- String getMessage() {
- return message;
- }
- }
-
- private static final Logger log = LoggerFactory
- .getLogger(IndexResponseHandler.class);
-
- @Override
- public IndexResult handleResponse(HttpResponse response) {
- return new IndexResult(isSuccessful(response), parseResponse(response));
- }
-
- private boolean isSuccessful(HttpResponse response) {
- return response.getStatusLine().getStatusCode() == SC_NO_CONTENT;
- }
-
- private String parseResponse(HttpResponse response) {
- HttpEntity entity = response.getEntity();
- String asString = "";
- if (entity != null) {
- try {
- asString = EntityUtils.toString(entity);
- } catch (IOException e) {
- log.error("Error parsing entity", e);
- }
- }
- return asString;
- }
-}
diff --git a/src/main/java/com/ericsson/gerrit/plugins/syncindex/Module.java b/src/main/java/com/ericsson/gerrit/plugins/syncindex/Module.java
deleted file mode 100644
index 314d119..0000000
--- a/src/main/java/com/ericsson/gerrit/plugins/syncindex/Module.java
+++ /dev/null
@@ -1,49 +0,0 @@
-// Copyright (C) 2015 Ericsson
-//
-// 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.ericsson.gerrit.plugins.syncindex;
-
-import com.google.gerrit.extensions.events.ChangeIndexedListener;
-import com.google.gerrit.extensions.registration.DynamicSet;
-import com.google.gerrit.lifecycle.LifecycleModule;
-import com.google.inject.Provides;
-import com.google.inject.Scopes;
-
-import org.apache.http.impl.client.CloseableHttpClient;
-
-import java.util.concurrent.Executor;
-
-class Module extends LifecycleModule {
-
- @Override
- protected void configure() {
- bind(CloseableHttpClient.class).toProvider(HttpClientProvider.class)
- .in(Scopes.SINGLETON);
- bind(Configuration.class).in(Scopes.SINGLETON);
- bind(HttpSession.class);
- bind(RestSession.class);
- bind(Executor.class)
- .annotatedWith(SyncIndexExecutor.class)
- .toProvider(SyncIndexExecutorProvider.class);
- listener().to(SyncIndexExecutorProvider.class);
- DynamicSet.bind(binder(), ChangeIndexedListener.class).to(
- IndexEventHandler.class);
- }
-
- @Provides
- @SyncUrl
- String syncUrl(Configuration config) {
- return config.getUrl();
- }
-}
diff --git a/src/main/java/com/ericsson/gerrit/plugins/syncindex/RestSession.java b/src/main/java/com/ericsson/gerrit/plugins/syncindex/RestSession.java
deleted file mode 100644
index 9cdd4ea..0000000
--- a/src/main/java/com/ericsson/gerrit/plugins/syncindex/RestSession.java
+++ /dev/null
@@ -1,71 +0,0 @@
-// Copyright (C) 2015 Ericsson
-//
-// 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.ericsson.gerrit.plugins.syncindex;
-
-import com.google.common.base.Joiner;
-import com.google.gerrit.extensions.annotations.PluginName;
-import com.google.inject.Inject;
-
-import com.ericsson.gerrit.plugins.syncindex.IndexResponseHandler.IndexResult;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.IOException;
-
-class RestSession {
- private static final Logger log = LoggerFactory.getLogger(RestSession.class);
-
- private final HttpSession httpSession;
- private final String pluginName;
-
- @Inject
- RestSession(HttpSession httpClient, @PluginName String pluginName) {
- this.httpSession = httpClient;
- this.pluginName = pluginName;
- }
-
- boolean index(int changeId) {
- try {
- IndexResult result = httpSession.post(buildEndpoint(changeId));
- if (result.isSuccessful()) {
- return true;
- }
- log.error("Unable to index change {}. Cause: {}", changeId,
- result.getMessage());
- } catch (IOException e) {
- log.error("Error trying to index change " + changeId, e);
- }
- return false;
- }
-
- boolean deleteFromIndex(int changeId) {
- try {
- IndexResult result = httpSession.delete(buildEndpoint(changeId));
- if (result.isSuccessful()) {
- return true;
- }
- log.error("Unable to delete from index change {}. Cause: {}", changeId,
- result.getMessage());
- } catch (IOException e) {
- log.error("Error trying to delete from index change " + changeId, e);
- }
- return false;
- }
-
- private String buildEndpoint(int changeId) {
- return Joiner.on("/").join("/plugins", pluginName, "index", changeId);
- }
-}
diff --git a/src/main/java/com/ericsson/gerrit/plugins/syncindex/SyncIndexExecutor.java b/src/main/java/com/ericsson/gerrit/plugins/syncindex/SyncIndexExecutor.java
deleted file mode 100644
index 75932e9..0000000
--- a/src/main/java/com/ericsson/gerrit/plugins/syncindex/SyncIndexExecutor.java
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright (C) 2015 Ericsson
-//
-// 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.ericsson.gerrit.plugins.syncindex;
-
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-
-import com.google.inject.BindingAnnotation;
-
-import java.lang.annotation.Retention;
-
-@Retention(RUNTIME)
-@BindingAnnotation
-@interface SyncIndexExecutor {
-}
diff --git a/src/main/java/com/ericsson/gerrit/plugins/syncindex/SyncIndexExecutorProvider.java b/src/main/java/com/ericsson/gerrit/plugins/syncindex/SyncIndexExecutorProvider.java
deleted file mode 100644
index 0400506..0000000
--- a/src/main/java/com/ericsson/gerrit/plugins/syncindex/SyncIndexExecutorProvider.java
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright (C) 2015 Ericsson
-//
-// 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.ericsson.gerrit.plugins.syncindex;
-
-import com.google.gerrit.extensions.events.LifecycleListener;
-import com.google.gerrit.server.git.WorkQueue;
-import com.google.inject.Inject;
-import com.google.inject.Provider;
-import com.google.inject.Singleton;
-
-import java.util.concurrent.Executor;
-
-@Singleton
-class SyncIndexExecutorProvider implements Provider<Executor>,
- LifecycleListener {
- private WorkQueue.Executor executor;
-
- @Inject
- SyncIndexExecutorProvider(WorkQueue workQueue, Configuration config) {
- executor =
- workQueue.createQueue(config.getThreadPoolSize(), "Sync remote index");
- }
-
- @Override
- public void start() {
- //do nothing
- }
-
- @Override
- public void stop() {
- executor.shutdown();
- executor.unregisterWorkQueue();
- executor = null;
- }
-
- @Override
- public Executor get() {
- return executor;
- }
-}
diff --git a/src/main/java/com/ericsson/gerrit/plugins/syncindex/SyncIndexRestApiServlet.java b/src/main/java/com/ericsson/gerrit/plugins/syncindex/SyncIndexRestApiServlet.java
deleted file mode 100644
index b066628..0000000
--- a/src/main/java/com/ericsson/gerrit/plugins/syncindex/SyncIndexRestApiServlet.java
+++ /dev/null
@@ -1,147 +0,0 @@
-// Copyright (C) 2015 Ericsson
-//
-// 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.ericsson.gerrit.plugins.syncindex;
-
-import static javax.servlet.http.HttpServletResponse.SC_CONFLICT;
-import static javax.servlet.http.HttpServletResponse.SC_NOT_FOUND;
-import static javax.servlet.http.HttpServletResponse.SC_NO_CONTENT;
-
-import com.google.gerrit.reviewdb.client.Change;
-import com.google.gerrit.reviewdb.server.ReviewDb;
-import com.google.gerrit.server.index.change.ChangeIndexer;
-import com.google.gwtorm.server.OrmException;
-import com.google.gwtorm.server.SchemaFactory;
-import com.google.inject.Inject;
-import com.google.inject.Singleton;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.concurrent.atomic.AtomicInteger;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-@Singleton
-class SyncIndexRestApiServlet extends HttpServlet {
- private static final long serialVersionUID = -1L;
- private static final Logger logger =
- LoggerFactory.getLogger(SyncIndexRestApiServlet.class);
- private static final Map<Change.Id, AtomicInteger> changeIdLocks =
- new HashMap<>();
-
- private final ChangeIndexer indexer;
- private final SchemaFactory<ReviewDb> schemaFactory;
-
- @Inject
- SyncIndexRestApiServlet(ChangeIndexer indexer,
- SchemaFactory<ReviewDb> schemaFactory) {
- this.indexer = indexer;
- this.schemaFactory = schemaFactory;
- }
-
- @Override
- protected void doPost(HttpServletRequest req, HttpServletResponse rsp)
- throws IOException, ServletException {
- process(req, rsp, "index");
- }
-
- @Override
- protected void doDelete(HttpServletRequest req, HttpServletResponse rsp)
- throws IOException, ServletException {
- process(req, rsp, "delete");
- }
-
- private void process(HttpServletRequest req, HttpServletResponse rsp,
- String operation) {
- rsp.setContentType("text/plain");
- rsp.setCharacterEncoding("UTF-8");
- String path = req.getPathInfo();
- String changeId = path.substring(path.lastIndexOf('/') + 1);
- Change.Id id = Change.Id.parse(changeId);
- try {
- Context.setForwardedEvent(true);
- index(id, operation);
- rsp.setStatus(SC_NO_CONTENT);
- } catch (IOException e) {
- sendError(rsp,SC_CONFLICT, e.getMessage());
- logger.error("Unable to update index", e);
- } catch (OrmException e) {
- String msg = "Error trying to find a change \n";
- sendError(rsp,SC_NOT_FOUND, msg);
- logger.debug(msg, e);
- } finally {
- Context.unsetForwardedEvent();
- }
- }
-
- private static void sendError(HttpServletResponse rsp, int statusCode,
- String message) {
- try {
- rsp.sendError(statusCode, message);
- } catch (IOException e) {
- logger.error("Failed to send error messsage: " + e.getMessage(), e);
- }
- }
-
- private void index(Change.Id id, String operation)
- throws IOException, OrmException {
- AtomicInteger changeIdLock = getAndIncrementChangeIdLock(id);
- synchronized (changeIdLock) {
- if ("index".equals(operation)) {
- try (ReviewDb db = schemaFactory.open()) {
- Change change = db.changes().get(id);
- if (change == null) {
- indexer.delete(id);
- return;
- }
- indexer.index(db, change);
- }
- logger.debug("Change {} successfully indexed", id);
- }
- if ("delete".equals(operation)) {
- indexer.delete(id);
- logger.debug("Change {} successfully deleted from index", id);
- }
- }
- if (changeIdLock.decrementAndGet() == 0) {
- removeChangeIdLock(id);
- }
- }
-
- private AtomicInteger getAndIncrementChangeIdLock(Change.Id id) {
- synchronized (changeIdLocks) {
- AtomicInteger changeIdLock = changeIdLocks.get(id);
- if (changeIdLock == null) {
- changeIdLock = new AtomicInteger(1);
- changeIdLocks.put(id, changeIdLock);
- } else {
- changeIdLock.incrementAndGet();
- }
- return changeIdLock;
- }
- }
-
- private void removeChangeIdLock(Change.Id id) {
- synchronized (changeIdLocks) {
- changeIdLocks.remove(id);
- }
- }
-}
diff --git a/src/main/java/com/ericsson/gerrit/plugins/syncindex/SyncUrl.java b/src/main/java/com/ericsson/gerrit/plugins/syncindex/SyncUrl.java
deleted file mode 100644
index 8b3ac1a..0000000
--- a/src/main/java/com/ericsson/gerrit/plugins/syncindex/SyncUrl.java
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright (C) 2015 Ericsson
-//
-// 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.ericsson.gerrit.plugins.syncindex;
-
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-
-import com.google.inject.BindingAnnotation;
-
-import java.lang.annotation.Retention;
-
-@Retention(RUNTIME)
-@BindingAnnotation
-@interface SyncUrl {
-}
diff --git a/src/main/resources/Documentation/about.md b/src/main/resources/Documentation/about.md
deleted file mode 100644
index f104962..0000000
--- a/src/main/resources/Documentation/about.md
+++ /dev/null
@@ -1,11 +0,0 @@
-The @PLUGIN@ plugin allows to synchronize secondary indexes between two Gerrit
-instances sharing the same git repositories and database.
-
-The plugin is installed in both instances and every time the secondary index
-is modified in one of the instances, i.e., a change is added, updated or removed
-from the index, the other instance index is updated accordingly. This way, both
-indexes are kept synchronized.
-
-For this secondary index synchronization to work, http must be enabled in both
-instances and the plugin must be configured with valid credentials. For further
-information, refer to [config](config.md) documentation.
diff --git a/src/main/resources/Documentation/build.md b/src/main/resources/Documentation/build.md
deleted file mode 100644
index 3babed2..0000000
--- a/src/main/resources/Documentation/build.md
+++ /dev/null
@@ -1,106 +0,0 @@
-Build
-=====
-
-This plugin is built with Buck.
-
-Two build modes are supported: Standalone and in Gerrit tree. Standalone
-build mode is recommended, as this mode doesn't require local Gerrit
-tree to exist.
-
-Build standalone
-----------------
-
-Clone bucklets library:
-
-```
- git clone https://gerrit.googlesource.com/bucklets
-
-```
-and link it to @PLUGIN@ directory:
-
-```
- cd @PLUGIN@ && ln -s ../bucklets .
-```
-
-Add link to the .buckversion file:
-
-```
- cd @PLUGIN@ && ln -s bucklets/buckversion .buckversion
-```
-
-Add link to the .watchmanconfig file:
-
-```
- cd @PLUGIN@ && ln -s bucklets/watchmanconfig .watchmanconfig
-```
-
-To build the plugin, issue the following command:
-
-```
- buck build plugin
-```
-
-The output is created in:
-
-```
- buck-out/gen/@PLUGIN@.jar
-```
-
-This project can be imported into the Eclipse IDE:
-
-```
- ./bucklets/tools/eclipse.py
-```
-
-To execute the tests run:
-
-```
- buck test
-```
-
-To build plugin sources run:
-
-```
- buck build src
-```
-
-The output is created in:
-
-```
- buck-out/gen/@PLUGIN@-sources.jar
-```
-
-Build in Gerrit tree
---------------------
-
-Clone or link this plugin to the plugins directory of Gerrit's source
-tree, and issue the command:
-
-```
- buck build plugins/@PLUGIN@
-```
-
-The output is created in:
-
-```
- buck-out/gen/plugins/@PLUGIN@/@PLUGIN@.jar
-```
-
-This project can be imported into the Eclipse IDE:
-
-```
- ./tools/eclipse/project.py
-```
-
-To execute the tests run:
-
-```
- buck test --include @PLUGIN@
-```
-
-How to build the Gerrit Plugin API is described in the [Gerrit
-documentation](../../../Documentation/dev-buck.html#_extension_and_plugin_api_jar_files).
-
-[Back to @PLUGIN@ documentation index][index]
-
-[index]: index.html
diff --git a/src/main/resources/Documentation/config.md b/src/main/resources/Documentation/config.md
deleted file mode 100644
index 48b9e94..0000000
--- a/src/main/resources/Documentation/config.md
+++ /dev/null
@@ -1,51 +0,0 @@
-@PLUGIN@ Configuration
-=========================
-
-In order for the synchronization to work, the @PLUGIN@ plugin must be installed
-in both instances and the following fields should be specified in the
-corresponding Gerrit configuration file:
-
-File 'gerrit.config'
---------------------
-
-[plugin "@PLUGIN@"]
-: url = target_instance_url
-: user = username
-: password = password
-
-plugin.@PLUGIN@.url
-: Specify the URL for the secondary (target) instance.
-
-plugin.@PLUGIN@.user
-: Username to connect to the secondary (target) instance.
-
-plugin.@PLUGIN@.password
-: Password to connect to the secondary (target) instance. This value can
- also be defined in secure.config.
-
-@PLUGIN@ plugin uses REST API calls to index changes in the target instance. It
-is possible to customize the parameters of the underlying http client doing these
-calls by specifying the following fields:
-
-@PLUGIN@.connectionTimeout
-: Maximum interval of time in milliseconds the plugin waits for a connection
- to the target instance. When not specified, the default value is set to 5000ms.
-
-@PLUGIN@.socketTimeout
-: Maximum interval of time in milliseconds the plugin waits for a response from the
- target instance once the connection has been established. When not specified,
- the default value is set to 5000ms.
-
-@PLUGIN@.maxTries
-: Maximum number of times the plugin should attempt to index the event in the
- target instance. Setting this value to 0 will disable retries. When not
- specified, the default value is 5. After this number of failed tries, an error
- is logged so that admins can re-index the change manually.
-
-@PLUGIN@.retryInterval
-: The interval of time in milliseconds between the subsequent auto-retries.
- When not specified, the default value is set to 1000ms.
-
-@PLUGIN@.threadPoolSize
-: Maximum number of threads used to send index events to the target instance.
- Defaults to 1.
diff --git a/src/test/java/com/ericsson/gerrit/plugins/syncindex/ConfigurationTest.java b/src/test/java/com/ericsson/gerrit/plugins/syncindex/ConfigurationTest.java
deleted file mode 100644
index aab72d3..0000000
--- a/src/test/java/com/ericsson/gerrit/plugins/syncindex/ConfigurationTest.java
+++ /dev/null
@@ -1,107 +0,0 @@
-// Copyright (C) 2015 Ericsson
-//
-// 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.ericsson.gerrit.plugins.syncindex;
-
-import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Mockito.when;
-
-import com.google.gerrit.server.config.PluginConfig;
-import com.google.gerrit.server.config.PluginConfigFactory;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.junit.MockitoJUnitRunner;
-
-@RunWith(MockitoJUnitRunner.class)
-public class ConfigurationTest {
- private static final String PASS = "fakePass";
- private static final String USER = "fakeUser";
- private static final String URL = "fakeUrl";
- private static final String EMPTY = "";
- private static final boolean CUSTOM_VALUES = true;
- private static final boolean DEFAULT_VALUES = false;
- private static final int TIMEOUT = 5000;
- private static final int MAX_TRIES = 5;
- private static final int RETRY_INTERVAL = 1000;
- private static final int THREAD_POOL_SIZE = 1;
-
- @Mock
- private PluginConfigFactory cfgFactoryMock;
- @Mock
- private PluginConfig configMock;
- private Configuration configuration;
- private String pluginName = "sync-events";
-
- @Before
- public void setUp() throws Exception {
- when(cfgFactoryMock.getFromGerritConfig(pluginName, true))
- .thenReturn(configMock);
- }
-
- @Test
- public void testValuesPresentInGerritConfig() throws Exception {
- buildMocks(CUSTOM_VALUES);
- assertThat(configuration.getUrl()).isEqualTo(URL);
- assertThat(configuration.getUser()).isEqualTo(USER);
- assertThat(configuration.getPassword()).isEqualTo(PASS);
- assertThat(configuration.getConnectionTimeout()).isEqualTo(TIMEOUT);
- assertThat(configuration.getSocketTimeout()).isEqualTo(TIMEOUT);
- assertThat(configuration.getMaxTries()).isEqualTo(MAX_TRIES);
- assertThat(configuration.getRetryInterval()).isEqualTo(RETRY_INTERVAL);
- assertThat(configuration.getThreadPoolSize()).isEqualTo(THREAD_POOL_SIZE);
- }
-
- @Test
- public void testValuesNotPresentInGerritConfig() throws Exception {
- buildMocks(DEFAULT_VALUES);
- assertThat(configuration.getUrl()).isEqualTo(EMPTY);
- assertThat(configuration.getUser()).isEqualTo(EMPTY);
- assertThat(configuration.getPassword()).isEqualTo(EMPTY);
- assertThat(configuration.getConnectionTimeout()).isEqualTo(0);
- assertThat(configuration.getSocketTimeout()).isEqualTo(0);
- assertThat(configuration.getMaxTries()).isEqualTo(0);
- assertThat(configuration.getRetryInterval()).isEqualTo(0);
- assertThat(configuration.getThreadPoolSize()).isEqualTo(0);
- }
-
- @Test
- public void testUrlTrailingSlashIsDropped() throws Exception {
- when(configMock.getString("url")).thenReturn(URL + "/");
-
- configuration = new Configuration(cfgFactoryMock, pluginName);
- assertThat(configuration).isNotNull();
- assertThat(configuration.getUrl()).isEqualTo(URL);
- }
-
- private void buildMocks(boolean values) {
- when(configMock.getString("url")).thenReturn(values ? URL : null);
- when(configMock.getString("user")).thenReturn(values ? USER : null);
- when(configMock.getString("password")).thenReturn(values ? PASS : null);
- when(configMock.getInt("connectionTimeout", TIMEOUT))
- .thenReturn(values ? TIMEOUT : 0);
- when(configMock.getInt("socketTimeout", TIMEOUT))
- .thenReturn(values ? TIMEOUT : 0);
- when(configMock.getInt("maxTries", MAX_TRIES))
- .thenReturn(values ? MAX_TRIES : 0);
- when(configMock.getInt("retryInterval", RETRY_INTERVAL))
- .thenReturn(values ? RETRY_INTERVAL : 0);
- when(configMock.getInt("threadPoolSize", THREAD_POOL_SIZE))
- .thenReturn(values ? THREAD_POOL_SIZE : 0);
-
- configuration = new Configuration(cfgFactoryMock, pluginName);
- }
-}
diff --git a/src/test/java/com/ericsson/gerrit/plugins/syncindex/ContextTest.java b/src/test/java/com/ericsson/gerrit/plugins/syncindex/ContextTest.java
deleted file mode 100644
index a6898b5..0000000
--- a/src/test/java/com/ericsson/gerrit/plugins/syncindex/ContextTest.java
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright (C) 2015 Ericsson
-//
-// 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.ericsson.gerrit.plugins.syncindex;
-
-import static com.google.common.truth.Truth.assertThat;
-
-
-import org.junit.Test;
-
-public class ContextTest {
-
- @Test
- public void testInitialValueNotNull() throws Exception {
- assertThat(Context.isForwardedEvent()).isNotNull();
- assertThat(Context.isForwardedEvent()).isFalse();
- }
-
- @Test
- public void testSetForwardedEvent() throws Exception {
- Context.setForwardedEvent(true);
- try {
- assertThat(Context.isForwardedEvent()).isTrue();
- } finally {
- Context.unsetForwardedEvent();
- }
- }
-
- @Test
- public void testUnsetForwardedEvent() throws Exception {
- Context.setForwardedEvent(true);
- Context.unsetForwardedEvent();
- assertThat(Context.isForwardedEvent()).isFalse();
- }
-}
diff --git a/src/test/java/com/ericsson/gerrit/plugins/syncindex/HttpClientProviderTest.java b/src/test/java/com/ericsson/gerrit/plugins/syncindex/HttpClientProviderTest.java
deleted file mode 100644
index 68577b8..0000000
--- a/src/test/java/com/ericsson/gerrit/plugins/syncindex/HttpClientProviderTest.java
+++ /dev/null
@@ -1,68 +0,0 @@
-// Copyright (C) 2015 Ericsson
-//
-// 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.ericsson.gerrit.plugins.syncindex;
-
-import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Mockito.when;
-
-import com.google.gerrit.lifecycle.LifecycleModule;
-import com.google.inject.Guice;
-import com.google.inject.Injector;
-import com.google.inject.Scopes;
-
-import org.apache.http.impl.client.CloseableHttpClient;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.junit.MockitoJUnitRunner;
-
-@RunWith(MockitoJUnitRunner.class)
-public class HttpClientProviderTest {
- private static final int TIME_INTERVAL = 1000;
- private static final String EMPTY = "";
-
- @Mock
- private Configuration config;
-
- @Before
- public void setUp() throws Exception {
- when(config.getUrl()).thenReturn(EMPTY);
- when(config.getUser()).thenReturn(EMPTY);
- when(config.getPassword()).thenReturn(EMPTY);
- when(config.getConnectionTimeout()).thenReturn(TIME_INTERVAL);
- when(config.getSocketTimeout()).thenReturn(TIME_INTERVAL);
- }
-
- @Test
- public void testGet() throws Exception {
- Injector injector = Guice.createInjector(new TestModule());
- CloseableHttpClient httpClient1 =
- injector.getInstance(CloseableHttpClient.class);
- assertThat(httpClient1).isNotNull();
- CloseableHttpClient httpClient2 =
- injector.getInstance(CloseableHttpClient.class);
- assertThat(httpClient1).isEqualTo(httpClient2);
- }
-
- class TestModule extends LifecycleModule {
- @Override
- protected void configure() {
- bind(Configuration.class).toInstance(config);
- bind(CloseableHttpClient.class).toProvider(HttpClientProvider.class)
- .in(Scopes.SINGLETON);
- }
- }
-}
diff --git a/src/test/java/com/ericsson/gerrit/plugins/syncindex/HttpSessionTest.java b/src/test/java/com/ericsson/gerrit/plugins/syncindex/HttpSessionTest.java
deleted file mode 100644
index f83b499..0000000
--- a/src/test/java/com/ericsson/gerrit/plugins/syncindex/HttpSessionTest.java
+++ /dev/null
@@ -1,200 +0,0 @@
-// Copyright (C) 2015 Ericsson
-//
-// 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.ericsson.gerrit.plugins.syncindex;
-
-import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
-import static com.github.tomakehurst.wiremock.client.WireMock.delete;
-import static com.github.tomakehurst.wiremock.client.WireMock.post;
-import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo;
-import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-import com.ericsson.gerrit.plugins.syncindex.IndexResponseHandler.IndexResult;
-import com.github.tomakehurst.wiremock.http.Fault;
-import com.github.tomakehurst.wiremock.junit.WireMockRule;
-import com.github.tomakehurst.wiremock.stubbing.Scenario;
-
-
-import org.junit.Before;
-import org.junit.ClassRule;
-import org.junit.Test;
-
-import java.net.SocketTimeoutException;
-
-public class HttpSessionTest {
- private static final int MAX_TRIES = 3;
- private static final int RETRY_INTERVAL = 250;
- private static final int TIMEOUT = 500;
- private static final int ERROR = 500;
- private static final int OK = 204;
- private static final int NOT_FOUND = 404;
- private static final int UNAUTHORIZED = 401;
-
- private static final String ENDPOINT = "/plugins/sync-index/index/1";
- private static final String ERROR_MESSAGE = "Error message";
- private static final String REQUEST_MADE = "Request made";
- private static final String SECOND_TRY = "Second try";
- private static final String THIRD_TRY = "Third try";
- private static final String RETRY_AT_ERROR = "Retry at error";
- private static final String RETRY_AT_DELAY = "Retry at delay";
-
- private HttpSession httpSession;
-
- @ClassRule
- public static WireMockRule wireMockRule = new WireMockRule(0);
-
- @Before
- public void setUp() throws Exception {
- String url = "http://localhost:" + wireMockRule.port();
- Configuration cfg = mock(Configuration.class);
- when(cfg.getUrl()).thenReturn(url);
- when(cfg.getUser()).thenReturn("user");
- when(cfg.getPassword()).thenReturn("pass");
- when(cfg.getMaxTries()).thenReturn(MAX_TRIES);
- when(cfg.getConnectionTimeout()).thenReturn(TIMEOUT);
- when(cfg.getSocketTimeout()).thenReturn(TIMEOUT);
- when(cfg.getRetryInterval()).thenReturn(RETRY_INTERVAL);
-
- httpSession =
- new HttpSession(new HttpClientProvider(cfg).get(), url);
- wireMockRule.resetRequests();
- }
-
- @Test
- public void testPostResponseOK() throws Exception {
- wireMockRule.givenThat(post(urlEqualTo(ENDPOINT))
- .willReturn(aResponse().withStatus(OK)));
-
- assertThat(httpSession.post(ENDPOINT).isSuccessful()).isTrue();
- }
-
- @Test
- public void testDeleteResponseOK() throws Exception {
- wireMockRule.givenThat(delete(urlEqualTo(ENDPOINT))
- .willReturn(aResponse().withStatus(OK)));
-
- assertThat(httpSession.delete(ENDPOINT).isSuccessful()).isTrue();
- }
-
- @Test
- public void testNotAuthorized() throws Exception {
- String expected = "unauthorized";
- wireMockRule.givenThat(post(urlEqualTo(ENDPOINT))
- .willReturn(aResponse().withStatus(UNAUTHORIZED).withBody(expected)));
-
- IndexResult result = httpSession.post(ENDPOINT);
- assertThat(result.isSuccessful()).isFalse();
- assertThat(result.getMessage()).isEqualTo(expected);
- }
-
- @Test
- public void testNotFound() throws Exception {
- String expected = "not found";
- wireMockRule.givenThat(post(urlEqualTo(ENDPOINT))
- .willReturn(aResponse().withStatus(NOT_FOUND).withBody(expected)));
-
- IndexResult result = httpSession.post(ENDPOINT);
- assertThat(result.isSuccessful()).isFalse();
- assertThat(result.getMessage()).isEqualTo(expected);
- }
-
- @Test
- public void testBadResponseRetryThenOK() throws Exception {
- wireMockRule.givenThat(post(urlEqualTo(ENDPOINT)).inScenario(RETRY_AT_ERROR)
- .whenScenarioStateIs(Scenario.STARTED).willSetStateTo(REQUEST_MADE)
- .willReturn(aResponse().withStatus(ERROR)));
- wireMockRule.givenThat(post(urlEqualTo(ENDPOINT)).inScenario(RETRY_AT_ERROR)
- .whenScenarioStateIs(REQUEST_MADE)
- .willReturn(aResponse().withStatus(OK)));
-
- assertThat(httpSession.post(ENDPOINT).isSuccessful()).isTrue();
- }
-
- @Test
- public void testBadResponseRetryThenGiveUp() throws Exception {
- wireMockRule.givenThat(post(urlEqualTo(ENDPOINT))
- .willReturn(aResponse().withStatus(ERROR).withBody(ERROR_MESSAGE)));
-
- IndexResult result = httpSession.post(ENDPOINT);
- assertThat(result.isSuccessful()).isFalse();
- assertThat(result.getMessage()).isEqualTo(ERROR_MESSAGE);
- }
-
- @Test
- public void testRetryAfterDelay() throws Exception {
- wireMockRule.givenThat(post(urlEqualTo(ENDPOINT)).inScenario(RETRY_AT_DELAY)
- .whenScenarioStateIs(Scenario.STARTED).willSetStateTo(REQUEST_MADE)
- .willReturn(aResponse().withStatus(ERROR).withFixedDelay(TIMEOUT / 2)));
- wireMockRule.givenThat(post(urlEqualTo(ENDPOINT)).inScenario(RETRY_AT_DELAY)
- .whenScenarioStateIs(REQUEST_MADE)
- .willReturn(aResponse().withStatus(OK)));
-
- assertThat(httpSession.post(ENDPOINT).isSuccessful()).isTrue();
- }
-
- @Test
- public void testRetryAfterTimeoutThenOK() throws Exception {
- wireMockRule.givenThat(post(urlEqualTo(ENDPOINT)).inScenario(RETRY_AT_DELAY)
- .whenScenarioStateIs(Scenario.STARTED).willSetStateTo(REQUEST_MADE)
- .willReturn(aResponse().withFixedDelay(TIMEOUT)));
- wireMockRule.givenThat(post(urlEqualTo(ENDPOINT)).inScenario(RETRY_AT_DELAY)
- .whenScenarioStateIs(REQUEST_MADE).willSetStateTo(SECOND_TRY)
- .willReturn(aResponse().withFixedDelay(TIMEOUT)));
- wireMockRule.givenThat(post(urlEqualTo(ENDPOINT)).inScenario(RETRY_AT_DELAY)
- .whenScenarioStateIs(SECOND_TRY).willSetStateTo(THIRD_TRY)
- .willReturn(aResponse().withFixedDelay(TIMEOUT)));
- wireMockRule.givenThat(post(urlEqualTo(ENDPOINT)).inScenario(RETRY_AT_DELAY)
- .whenScenarioStateIs(THIRD_TRY)
- .willReturn(aResponse().withStatus(OK)));
-
- assertThat(httpSession.post(ENDPOINT).isSuccessful()).isTrue();
- }
-
- @Test(expected = SocketTimeoutException.class)
- public void testMaxRetriesAfterTimeoutThenGiveUp() throws Exception {
- wireMockRule.givenThat(post(urlEqualTo(ENDPOINT)).inScenario(RETRY_AT_DELAY)
- .whenScenarioStateIs(Scenario.STARTED).willSetStateTo(REQUEST_MADE)
- .willReturn(aResponse().withFixedDelay(TIMEOUT)));
- wireMockRule.givenThat(post(urlEqualTo(ENDPOINT)).inScenario(RETRY_AT_DELAY)
- .whenScenarioStateIs(REQUEST_MADE).willSetStateTo(SECOND_TRY)
- .willReturn(aResponse().withFixedDelay(TIMEOUT)));
- wireMockRule.givenThat(post(urlEqualTo(ENDPOINT)).inScenario(RETRY_AT_DELAY)
- .whenScenarioStateIs(SECOND_TRY).willSetStateTo(THIRD_TRY)
- .willReturn(aResponse().withFixedDelay(TIMEOUT)));
- wireMockRule.givenThat(post(urlEqualTo(ENDPOINT)).inScenario(RETRY_AT_DELAY)
- .whenScenarioStateIs(THIRD_TRY)
- .willReturn(aResponse().withFixedDelay(TIMEOUT)));
-
- httpSession.post(ENDPOINT);
- }
-
- @Test
- public void testGiveUpAtTimeout() throws Exception {
- wireMockRule.givenThat(post(urlEqualTo(ENDPOINT)).inScenario(RETRY_AT_DELAY)
- .whenScenarioStateIs(Scenario.STARTED).willSetStateTo(REQUEST_MADE)
- .willReturn(aResponse().withStatus(ERROR).withFixedDelay(TIMEOUT)));
-
- assertThat(httpSession.post(ENDPOINT).isSuccessful()).isFalse();
- }
-
- @Test
- public void testResponseWithMalformedResponse() throws Exception {
- wireMockRule.givenThat(post(urlEqualTo(ENDPOINT))
- .willReturn(aResponse().withFault(Fault.MALFORMED_RESPONSE_CHUNK)));
-
- assertThat(httpSession.post(ENDPOINT).isSuccessful()).isFalse();
- }
-}
diff --git a/src/test/java/com/ericsson/gerrit/plugins/syncindex/IndexEventHandlerTest.java b/src/test/java/com/ericsson/gerrit/plugins/syncindex/IndexEventHandlerTest.java
deleted file mode 100644
index 045aefa..0000000
--- a/src/test/java/com/ericsson/gerrit/plugins/syncindex/IndexEventHandlerTest.java
+++ /dev/null
@@ -1,127 +0,0 @@
-// Copyright (C) 2015 Ericsson
-//
-// 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.ericsson.gerrit.plugins.syncindex;
-
-import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyZeroInteractions;
-
-import com.google.common.util.concurrent.MoreExecutors;
-import com.google.gerrit.reviewdb.client.Change;
-import com.google.gerrit.server.git.WorkQueue.Executor;
-import com.google.gwtorm.client.KeyUtil;
-import com.google.gwtorm.server.StandardKeyEncoder;
-
-import com.ericsson.gerrit.plugins.syncindex.IndexEventHandler.SyncIndexTask;
-
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.junit.MockitoJUnitRunner;
-
-@RunWith(MockitoJUnitRunner.class)
-public class IndexEventHandlerTest {
- private static final String PLUGIN_NAME = "sync-index";
- private static final int CHANGE_ID = 1;
-
- private IndexEventHandler indexEventHandler;
- @Mock
- private RestSession restSessionMock;
- private Change.Id id;
-
- @BeforeClass
- public static void setUp() {
- KeyUtil.setEncoderImpl(new StandardKeyEncoder());
- }
-
- @Before
- public void setUpMocks() {
- id = Change.Id.parse(Integer.toString(CHANGE_ID));
- indexEventHandler = new IndexEventHandler(MoreExecutors.directExecutor(),
- PLUGIN_NAME, restSessionMock);
- }
-
- @Test
- public void shouldIndexInRemoteOnChangeIndexedEvent() throws Exception {
- indexEventHandler.onChangeIndexed(id.get());
- verify(restSessionMock).index(CHANGE_ID);
- }
-
- @Test
- public void shouldDeleteFromIndexInRemoteOnChangeDeletedEvent()
- throws Exception {
- indexEventHandler.onChangeDeleted(id.get());
- verify(restSessionMock).deleteFromIndex(CHANGE_ID);
- }
-
- @Test
- public void shouldNotCallRemoteWhenEventIsForwarded() throws Exception {
- Context.setForwardedEvent(true);
- indexEventHandler.onChangeIndexed(id.get());
- indexEventHandler.onChangeDeleted(id.get());
- Context.unsetForwardedEvent();
- verifyZeroInteractions(restSessionMock);
- }
-
- @Test
- public void duplicateEventOfAQueuedEventShouldGetDiscarded() {
- Executor poolMock = mock(Executor.class);
- indexEventHandler =
- new IndexEventHandler(poolMock, PLUGIN_NAME, restSessionMock);
- indexEventHandler.onChangeIndexed(id.get());
- indexEventHandler.onChangeIndexed(id.get());
- verify(poolMock, times(1))
- .execute(indexEventHandler.new SyncIndexTask(CHANGE_ID, false));
- }
-
- @Test
- public void testSyncIndexTaskToString() throws Exception {
- SyncIndexTask syncIndexTask =
- indexEventHandler.new SyncIndexTask(CHANGE_ID, false);
- assertThat(syncIndexTask.toString()).isEqualTo(String.format(
- "[%s] Index change %s in target instance", PLUGIN_NAME, CHANGE_ID));
- }
-
- @Test
- public void testSyncIndexTaskHashCodeAndEquals() {
- SyncIndexTask task = indexEventHandler.new SyncIndexTask(CHANGE_ID, false);
-
- assertThat(task.equals(task)).isTrue();
- assertThat(task.hashCode()).isEqualTo(task.hashCode());
-
- SyncIndexTask identicalTask =
- indexEventHandler.new SyncIndexTask(CHANGE_ID, false);
- assertThat(task.equals(identicalTask)).isTrue();
- assertThat(task.hashCode()).isEqualTo(identicalTask.hashCode());
-
- assertThat(task.equals(null)).isFalse();
- assertThat(task.equals("test")).isFalse();
- assertThat(task.hashCode()).isNotEqualTo("test".hashCode());
-
- SyncIndexTask differentChangeIdTask =
- indexEventHandler.new SyncIndexTask(123, false);
- assertThat(task.equals(differentChangeIdTask)).isFalse();
- assertThat(task.hashCode()).isNotEqualTo(differentChangeIdTask.hashCode());
-
- SyncIndexTask removeTask =
- indexEventHandler.new SyncIndexTask(CHANGE_ID, true);
- assertThat(task.equals(removeTask)).isFalse();
- assertThat(task.hashCode()).isNotEqualTo(removeTask.hashCode());
- }
-}
diff --git a/src/test/java/com/ericsson/gerrit/plugins/syncindex/IndexResponseHandlerTest.java b/src/test/java/com/ericsson/gerrit/plugins/syncindex/IndexResponseHandlerTest.java
deleted file mode 100644
index 46488b7..0000000
--- a/src/test/java/com/ericsson/gerrit/plugins/syncindex/IndexResponseHandlerTest.java
+++ /dev/null
@@ -1,69 +0,0 @@
-// Copyright (C) 2015 Ericsson
-//
-// 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.ericsson.gerrit.plugins.syncindex;
-
-import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-import com.ericsson.gerrit.plugins.syncindex.IndexResponseHandler.IndexResult;
-
-import org.apache.http.HttpResponse;
-import org.apache.http.StatusLine;
-import org.apache.http.entity.StringEntity;
-import org.junit.Before;
-import org.junit.Test;
-
-import java.io.UnsupportedEncodingException;
-
-public class IndexResponseHandlerTest {
- private static final int ERROR = 400;
- private static final int OK = 204;
- private static final String EMPTY_ENTITY = "";
- private static final String ERROR_ENTITY = "Error";
-
- private IndexResponseHandler handler;
-
- @Before
- public void setUp() throws Exception {
- handler = new IndexResponseHandler();
- }
-
- @Test
- public void testIsSuccessful() throws Exception {
- HttpResponse response = setupMocks(OK, EMPTY_ENTITY);
- IndexResult result = handler.handleResponse(response);
- assertThat(result.isSuccessful()).isTrue();
- assertThat(result.getMessage()).isEmpty();
- }
-
- @Test
- public void testIsNotSuccessful() throws Exception {
- HttpResponse response = setupMocks(ERROR, ERROR_ENTITY);
- IndexResult result = handler.handleResponse(response);
- assertThat(result.isSuccessful()).isFalse();
- assertThat(result.getMessage()).contains(ERROR_ENTITY);
- }
-
- private HttpResponse setupMocks(int httpCode, String entity)
- throws UnsupportedEncodingException {
- StatusLine status = mock(StatusLine.class);
- when(status.getStatusCode()).thenReturn(httpCode);
- HttpResponse response = mock(HttpResponse.class);
- when(response.getStatusLine()).thenReturn(status);
- when(response.getEntity()).thenReturn(new StringEntity(entity));
- return response;
- }
-}
diff --git a/src/test/java/com/ericsson/gerrit/plugins/syncindex/ModuleTest.java b/src/test/java/com/ericsson/gerrit/plugins/syncindex/ModuleTest.java
deleted file mode 100644
index f997afa..0000000
--- a/src/test/java/com/ericsson/gerrit/plugins/syncindex/ModuleTest.java
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright (C) 2015 Ericsson
-//
-// 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.ericsson.gerrit.plugins.syncindex;
-
-import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-import org.junit.Test;
-
-public class ModuleTest {
-
- @Test
- public void testSyncUrlProvider() {
- Configuration configMock = mock(Configuration.class);
- String expected = "someUrl";
- when(configMock.getUrl()).thenReturn(expected);
- Module module = new Module();
- assertThat(module.syncUrl(configMock)).isEqualTo(expected);
- }
-}
diff --git a/src/test/java/com/ericsson/gerrit/plugins/syncindex/RestSessionTest.java b/src/test/java/com/ericsson/gerrit/plugins/syncindex/RestSessionTest.java
deleted file mode 100644
index 6f716c4..0000000
--- a/src/test/java/com/ericsson/gerrit/plugins/syncindex/RestSessionTest.java
+++ /dev/null
@@ -1,102 +0,0 @@
-// Copyright (C) 2015 Ericsson
-//
-// 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.ericsson.gerrit.plugins.syncindex;
-
-import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Mockito.doThrow;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-import com.google.common.base.Joiner;
-
-import com.ericsson.gerrit.plugins.syncindex.IndexResponseHandler.IndexResult;
-
-import org.junit.Test;
-
-import java.io.IOException;
-
-public class RestSessionTest {
- private static final int CHANGE_NUMBER = 1;
- private static final String DELETE_OP = "delete";
- private static final String INDEX_OP = "index";
- private static final String PLUGIN_NAME = "sync-index";
- private static final String EMPTY_MSG = "";
- private static final String ERROR_MSG = "Error";
- private static final String EXCEPTION_MSG = "Exception";
- private static final boolean SUCCESSFUL = true;
- private static final boolean FAILED = false;
- private static final boolean DO_NOT_THROW_EXCEPTION = false;
- private static final boolean THROW_EXCEPTION = true;
-
- private RestSession restClient;
-
- @Test
- public void testIndexChangeOK() throws Exception {
- setUpMocks(INDEX_OP, SUCCESSFUL, EMPTY_MSG, DO_NOT_THROW_EXCEPTION);
- assertThat(restClient.index(CHANGE_NUMBER)).isTrue();
- }
-
- @Test
- public void testIndexChangeFailed() throws Exception {
- setUpMocks(INDEX_OP, FAILED, ERROR_MSG, DO_NOT_THROW_EXCEPTION);
- assertThat(restClient.index(CHANGE_NUMBER)).isFalse();
- }
-
- @Test
- public void testIndexChangeThrowsException() throws Exception {
- setUpMocks(INDEX_OP, FAILED, EXCEPTION_MSG, THROW_EXCEPTION);
- assertThat(restClient.index(CHANGE_NUMBER)).isFalse();
- }
-
- @Test
- public void testChangeDeletedFromIndexOK() throws Exception {
- setUpMocks(DELETE_OP, SUCCESSFUL, EMPTY_MSG, DO_NOT_THROW_EXCEPTION);
- assertThat(restClient.deleteFromIndex(CHANGE_NUMBER)).isTrue();
- }
-
- @Test
- public void testChangeDeletedFromIndexFailed() throws Exception {
- setUpMocks(DELETE_OP, FAILED, ERROR_MSG, DO_NOT_THROW_EXCEPTION);
- assertThat(restClient.deleteFromIndex(CHANGE_NUMBER)).isFalse();
- }
-
- @Test
- public void testChangeDeletedFromThrowsException() throws Exception {
- setUpMocks(DELETE_OP, FAILED, EXCEPTION_MSG, THROW_EXCEPTION);
- assertThat(restClient.deleteFromIndex(CHANGE_NUMBER)).isFalse();
- }
-
- private void setUpMocks(String operation, boolean isOperationSuccessful,
- String msg, boolean exception) throws Exception {
- String request =
- Joiner.on("/").join("/plugins", PLUGIN_NAME, INDEX_OP, CHANGE_NUMBER);
- HttpSession httpSession = mock(HttpSession.class);
- if (exception) {
- if (operation.equals(INDEX_OP)) {
- doThrow(new IOException()).when(httpSession).post(request);
- } else {
- doThrow(new IOException()).when(httpSession).delete(request);
- }
- } else {
- IndexResult result = new IndexResult(isOperationSuccessful, msg);
- if (operation.equals(INDEX_OP)) {
- when(httpSession.post(request)).thenReturn(result);
- } else {
- when(httpSession.delete(request)).thenReturn(result);
- }
- }
- restClient = new RestSession(httpSession, PLUGIN_NAME);
- }
-}
diff --git a/src/test/java/com/ericsson/gerrit/plugins/syncindex/SyncIndexExecutorProviderTest.java b/src/test/java/com/ericsson/gerrit/plugins/syncindex/SyncIndexExecutorProviderTest.java
deleted file mode 100644
index a48dd9b..0000000
--- a/src/test/java/com/ericsson/gerrit/plugins/syncindex/SyncIndexExecutorProviderTest.java
+++ /dev/null
@@ -1,62 +0,0 @@
-// Copyright (C) 2015 Ericsson
-//
-// 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.ericsson.gerrit.plugins.syncindex;
-
-import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import com.google.gerrit.server.git.WorkQueue;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.junit.MockitoJUnitRunner;
-
-@RunWith(MockitoJUnitRunner.class)
-public class SyncIndexExecutorProviderTest {
- @Mock
- private WorkQueue.Executor executorMock;
- private SyncIndexExecutorProvider syncIndexExecutorProvider;
-
- @Before
- public void setUp() throws Exception {
- executorMock = mock(WorkQueue.Executor.class);
- WorkQueue workQueueMock = mock(WorkQueue.class);
- when(workQueueMock.createQueue(4, "Sync remote index"))
- .thenReturn(executorMock);
- Configuration configMock = mock(Configuration.class);
- when(configMock.getThreadPoolSize()).thenReturn(4);
- syncIndexExecutorProvider =
- new SyncIndexExecutorProvider(workQueueMock, configMock);
- }
-
- @Test
- public void shouldReturnExecutor() throws Exception {
- assertThat(syncIndexExecutorProvider.get()).isEqualTo(executorMock);
- }
-
- @Test
- public void testStop() throws Exception {
- syncIndexExecutorProvider.start();
- assertThat(syncIndexExecutorProvider.get()).isEqualTo(executorMock);
- syncIndexExecutorProvider.stop();
- verify(executorMock).shutdown();
- verify(executorMock).unregisterWorkQueue();
- assertThat(syncIndexExecutorProvider.get()).isNull();
- }
-}
diff --git a/src/test/java/com/ericsson/gerrit/plugins/syncindex/SyncIndexRestApiServletTest.java b/src/test/java/com/ericsson/gerrit/plugins/syncindex/SyncIndexRestApiServletTest.java
deleted file mode 100644
index 7e8ac83..0000000
--- a/src/test/java/com/ericsson/gerrit/plugins/syncindex/SyncIndexRestApiServletTest.java
+++ /dev/null
@@ -1,170 +0,0 @@
-// Copyright (C) 2016 Ericsson
-//
-// 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.ericsson.gerrit.plugins.syncindex;
-
-import static javax.servlet.http.HttpServletResponse.SC_CONFLICT;
-import static javax.servlet.http.HttpServletResponse.SC_NOT_FOUND;
-import static javax.servlet.http.HttpServletResponse.SC_NO_CONTENT;
-import static org.mockito.Mockito.doThrow;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyZeroInteractions;
-import static org.mockito.Mockito.when;
-
-import com.google.gerrit.common.TimeUtil;
-import com.google.gerrit.reviewdb.client.Change;
-import com.google.gerrit.reviewdb.server.ChangeAccess;
-import com.google.gerrit.reviewdb.server.ReviewDb;
-import com.google.gerrit.server.index.change.ChangeIndexer;
-import com.google.gwtorm.client.KeyUtil;
-import com.google.gwtorm.server.OrmException;
-import com.google.gwtorm.server.SchemaFactory;
-import com.google.gwtorm.server.StandardKeyEncoder;
-
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.junit.MockitoJUnitRunner;
-
-import java.io.IOException;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-@RunWith(MockitoJUnitRunner.class)
-public class SyncIndexRestApiServletTest {
- private static final boolean CHANGE_EXISTS = true;
- private static final boolean CHANGE_DOES_NOT_EXIST = false;
- private static final boolean DO_NOT_THROW_IO_EXCEPTION = false;
- private static final boolean DO_NOT_THROW_ORM_EXCEPTION = false;
- private static final boolean THROW_IO_EXCEPTION = true;
- private static final boolean THROW_ORM_EXCEPTION = true;
- private static final String CHANGE_NUMBER = "1";
-
- @Mock
- private ChangeIndexer indexer;
- @Mock
- private SchemaFactory<ReviewDb> schemaFactory;
- @Mock
- private ReviewDb db;
- @Mock
- private HttpServletRequest req;
- @Mock
- private HttpServletResponse rsp;
- private Change.Id id;
- private Change change;
- private SyncIndexRestApiServlet syncIndexRestApiServlet;
-
- @BeforeClass
- public static void setup() {
- KeyUtil.setEncoderImpl(new StandardKeyEncoder());
- }
-
- @Before
- public void setUpMocks() {
- syncIndexRestApiServlet =
- new SyncIndexRestApiServlet(indexer, schemaFactory);
- id = Change.Id.parse(CHANGE_NUMBER);
- when(req.getPathInfo()).thenReturn("/index/" + CHANGE_NUMBER);
- change = new Change(null, id, null, null, TimeUtil.nowTs());
- }
-
- @Test
- public void changeIsIndexed() throws Exception {
- setupPostMocks(CHANGE_EXISTS);
- syncIndexRestApiServlet.doPost(req, rsp);
- verify(indexer, times(1)).index(db, change);
- verify(rsp).setStatus(SC_NO_CONTENT);
- }
-
- @Test
- public void changeToIndexDoNotExist() throws Exception {
- setupPostMocks(CHANGE_DOES_NOT_EXIST);
- syncIndexRestApiServlet.doPost(req, rsp);
- verify(indexer, times(1)).delete(id);
- verify(rsp).setStatus(SC_NO_CONTENT);
- }
-
- @Test
- public void schemaThrowsExceptionWhenLookingUpForChange() throws Exception {
- setupPostMocks(CHANGE_EXISTS, THROW_ORM_EXCEPTION);
- syncIndexRestApiServlet.doPost(req, rsp);
- verify(rsp).sendError(SC_NOT_FOUND, "Error trying to find a change \n");
- }
-
- @Test
- public void indexerThrowsIOExceptionTryingToIndexChange() throws Exception {
- setupPostMocks(CHANGE_EXISTS, DO_NOT_THROW_ORM_EXCEPTION,
- THROW_IO_EXCEPTION);
- syncIndexRestApiServlet.doPost(req, rsp);
- verify(rsp).sendError(SC_CONFLICT, "io-error");
- }
-
- @Test
- public void changeIsDeletedFromIndex() throws Exception {
- syncIndexRestApiServlet.doDelete(req, rsp);
- verify(indexer, times(1)).delete(id);
- verify(rsp).setStatus(SC_NO_CONTENT);
- }
-
- @Test
- public void indexerThrowsExceptionTryingToDeleteChange() throws Exception {
- doThrow(new IOException("io-error")).when(indexer).delete(id);
- syncIndexRestApiServlet.doDelete(req, rsp);
- verify(rsp).sendError(SC_CONFLICT, "io-error");
- }
-
- @Test
- public void sendErrorThrowsIOException() throws Exception {
- doThrow(new IOException("someError")).when(rsp).sendError(SC_NOT_FOUND,
- "Error trying to find a change \n");
- setupPostMocks(CHANGE_EXISTS, THROW_ORM_EXCEPTION);
- syncIndexRestApiServlet.doPost(req, rsp);
- verify(rsp).sendError(SC_NOT_FOUND, "Error trying to find a change \n");
- verifyZeroInteractions(indexer);
- }
-
- private void setupPostMocks(boolean changeExist) throws Exception {
- setupPostMocks(changeExist, DO_NOT_THROW_ORM_EXCEPTION,
- DO_NOT_THROW_IO_EXCEPTION);
- }
-
- private void setupPostMocks(boolean changeExist, boolean ormException)
- throws OrmException, IOException {
- setupPostMocks(changeExist, ormException, DO_NOT_THROW_IO_EXCEPTION);
- }
-
- private void setupPostMocks(boolean changeExist, boolean ormException,
- boolean ioException) throws OrmException, IOException {
- if (ormException) {
- doThrow(new OrmException("")).when(schemaFactory).open();
- } else {
- when(schemaFactory.open()).thenReturn(db);
- ChangeAccess ca = mock(ChangeAccess.class);
- when(db.changes()).thenReturn(ca);
- if (changeExist) {
- when(ca.get(id)).thenReturn(change);
- if (ioException) {
- doThrow(new IOException("io-error")).when(indexer).index(db, change);
- }
- } else {
- when(ca.get(id)).thenReturn(null);
- }
- }
- }
-}