Merge branch 'stable-2.13' into stable-2.14
* stable-2.13:
Deprecate plugin
Change-Id: I556554a60bfd6f979a9ccfe151bd4f39ba6aea4b
diff --git a/BUCK b/BUCK
deleted file mode 100644
index acdb2af..0000000
--- a/BUCK
+++ /dev/null
@@ -1,88 +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',
-]
-
-PROVIDED_DEPS = GERRIT_TESTS + [
- '//lib:gson',
-]
-
-TEST_DEPS = GERRIT_PLUGIN_API + PROVIDED_DEPS + DEPS + [
- ':evict-cache__plugin',
- ':mockito',
-]
-
-gerrit_plugin(
- name = 'evict-cache',
- srcs = SOURCES,
- resources = RESOURCES,
- manifest_entries = [
- 'Gerrit-PluginName: evict-cache',
- 'Gerrit-ApiType: plugin',
- 'Gerrit-Module: com.ericsson.gerrit.plugins.evictcache.Module',
- 'Gerrit-HttpModule: com.ericsson.gerrit.plugins.evictcache.HttpModule',
- 'Implementation-Title: evict-cache plugin',
- 'Implementation-URL: https://gerrit-review.googlesource.com/#/admin/projects/plugins/evict-cache',
- 'Implementation-Vendor: Ericsson',
- ],
- provided_deps = PROVIDED_DEPS,
- deps = DEPS,
-)
-
-java_sources(
- name = 'evict-cache-sources',
- srcs = SOURCES + RESOURCES,
-)
-
-java_library(
- name = 'classpath',
- deps = TEST_DEPS,
-)
-
-java_test(
- name = 'evict-cache_tests',
- srcs = glob(['src/test/java/**/*.java']),
- labels = ['evict-cache'],
- 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/BUILD b/BUILD
deleted file mode 100644
index 874a96f..0000000
--- a/BUILD
+++ /dev/null
@@ -1,42 +0,0 @@
-load("//tools/bzl:junit.bzl", "junit_tests")
-load(
- "//tools/bzl:plugin.bzl",
- "gerrit_plugin",
- "PLUGIN_DEPS",
- "PLUGIN_TEST_DEPS",
-)
-
-gerrit_plugin(
- name = "evict-cache",
- srcs = glob(["src/main/java/**/*.java"]),
- manifest_entries = [
- "Gerrit-PluginName: evict-cache",
- "Gerrit-Module: com.ericsson.gerrit.plugins.evictcache.Module",
- "Gerrit-HttpModule: com.ericsson.gerrit.plugins.evictcache.HttpModule",
- "Implementation-Title: evict-cache plugin",
- "Implementation-URL: https://gerrit-review.googlesource.com/#/admin/projects/plugins/evict-cache",
- ],
- resources = glob(["src/main/resources/**/*"]),
-)
-
-UTILS = ["src/test/java/com/ericsson/gerrit/plugins/evictcache/Constants.java"]
-
-java_library(
- name = "testutils",
- srcs = UTILS,
-)
-
-junit_tests(
- name = "evict_cache_tests",
- srcs = glob(
- ["src/test/java/**/*.java"],
- exclude = UTILS,
- ),
- tags = ["evict-cache"],
- deps = PLUGIN_DEPS + PLUGIN_TEST_DEPS + [
- ":evict-cache__plugin",
- ":testutils",
- "@mockito//jar",
- "@wiremock//jar",
- ],
-)
diff --git a/README-THIS-REPO-IS-DEPRECATED.txt b/README-THIS-REPO-IS-DEPRECATED.txt
new file mode 100644
index 0000000..4579684
--- /dev/null
+++ b/README-THIS-REPO-IS-DEPRECATED.txt
@@ -0,0 +1,3 @@
+As of branch 2.13, this plugin is deprecated. The functionality has been merged into
+
+https://gerrit-review.googlesource.com/#/admin/projects/plugins/high-availability
diff --git a/external_plugin_deps.bzl b/external_plugin_deps.bzl
deleted file mode 100644
index 6c723ba..0000000
--- a/external_plugin_deps.bzl
+++ /dev/null
@@ -1,33 +0,0 @@
-load("//tools/bzl:maven_jar.bzl", "maven_jar")
-
-def external_plugin_deps():
- maven_jar(
- name = 'wiremock',
- artifact = 'com.github.tomakehurst:wiremock:1.58:standalone',
- sha1 = '21c8386a95c5dc54a9c55839c5a95083e42412ae',
- attach_source = False,
- )
-
- maven_jar(
- name = 'mockito',
- artifact = 'org.mockito:mockito-core:2.5.0',
- sha1 = 'be28d46a52c7f2563580adeca350145e9ce916f8',
- deps = [
- '@byte_buddy//jar',
- '@objenesis//jar',
- ],
- )
-
- maven_jar(
- name = 'byte_buddy',
- artifact = 'net.bytebuddy:byte-buddy:1.5.12',
- sha1 = 'b1ba1d15f102b36ed43b826488114678d6d413da',
- attach_source = False,
- )
-
- maven_jar(
- name = 'objenesis',
- artifact = 'org.objenesis:objenesis:2.4',
- sha1 = '2916b6c96b50c5b3ec4452ed99401db745aabb27',
- attach_source = False,
- )
diff --git a/lib/BUCK b/lib/BUCK
deleted file mode 100644
index 8892994..0000000
--- a/lib/BUCK
+++ /dev/null
@@ -1,8 +0,0 @@
-include_defs('//bucklets/maven_jar.bucklet')
-
-maven_jar(
- name = 'gson',
- id = 'com.google.code.gson:gson:2.1',
- sha1 = '2e66da15851f9f5b5079228f856c2f090ba98c38',
- license = 'Apache2.0',
-)
diff --git a/lib/gerrit/BUCK b/lib/gerrit/BUCK
deleted file mode 100644
index 77ba66f..0000000
--- a/lib/gerrit/BUCK
+++ /dev/null
@@ -1,20 +0,0 @@
-include_defs('//bucklets/maven_jar.bucklet')
-
-VER = '2.14-SNAPSHOT'
-REPO = MAVEN_LOCAL
-
-maven_jar(
- name = 'plugin-api',
- id = 'com.google.gerrit:gerrit-plugin-api:' + VER,
- license = 'Apache2.0',
- attach_source = False,
- repository = REPO,
-)
-
-maven_jar(
- name = 'acceptance-framework',
- id = 'com.google.gerrit:gerrit-acceptance-framework:' + VER,
- license = 'Apache2.0',
- attach_source = False,
- repository = REPO,
-)
diff --git a/src/main/java/com/ericsson/gerrit/plugins/evictcache/CacheResponseHandler.java b/src/main/java/com/ericsson/gerrit/plugins/evictcache/CacheResponseHandler.java
deleted file mode 100644
index 768ee72..0000000
--- a/src/main/java/com/ericsson/gerrit/plugins/evictcache/CacheResponseHandler.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.evictcache;
-
-import static javax.servlet.http.HttpServletResponse.SC_NO_CONTENT;
-
-import com.ericsson.gerrit.plugins.evictcache.CacheResponseHandler.CacheResult;
-
-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 CacheResponseHandler implements ResponseHandler<CacheResult> {
-
- static class CacheResult {
- private boolean successful;
- private String message;
-
- CacheResult(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(CacheResponseHandler.class);
-
- @Override
- public CacheResult handleResponse(HttpResponse response) {
- return new CacheResult(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/evictcache/Configuration.java b/src/main/java/com/ericsson/gerrit/plugins/evictcache/Configuration.java
deleted file mode 100644
index e342f88..0000000
--- a/src/main/java/com/ericsson/gerrit/plugins/evictcache/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.evictcache;
-
-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;
- }
-
- int getThreadPoolSize() {
- return threadPoolSize;
- }
-}
diff --git a/src/main/java/com/ericsson/gerrit/plugins/evictcache/Context.java b/src/main/java/com/ericsson/gerrit/plugins/evictcache/Context.java
deleted file mode 100644
index 0b0519b..0000000
--- a/src/main/java/com/ericsson/gerrit/plugins/evictcache/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.evictcache;
-
-/**
- * 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() {
- FORWARDED_EVENT.set(true);
- }
-
- static void unsetForwardedEvent() {
- FORWARDED_EVENT.remove();
- }
-}
diff --git a/src/main/java/com/ericsson/gerrit/plugins/evictcache/EvictCacheExecutor.java b/src/main/java/com/ericsson/gerrit/plugins/evictcache/EvictCacheExecutor.java
deleted file mode 100644
index 8106f55..0000000
--- a/src/main/java/com/ericsson/gerrit/plugins/evictcache/EvictCacheExecutor.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.evictcache;
-
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-
-import com.google.inject.BindingAnnotation;
-
-import java.lang.annotation.Retention;
-
-@Retention(RUNTIME)
-@BindingAnnotation
-@interface EvictCacheExecutor {
-}
diff --git a/src/main/java/com/ericsson/gerrit/plugins/evictcache/EvictCacheExecutorProvider.java b/src/main/java/com/ericsson/gerrit/plugins/evictcache/EvictCacheExecutorProvider.java
deleted file mode 100644
index e1de403..0000000
--- a/src/main/java/com/ericsson/gerrit/plugins/evictcache/EvictCacheExecutorProvider.java
+++ /dev/null
@@ -1,55 +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.evictcache;
-
-import com.google.gerrit.extensions.annotations.PluginName;
-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.ScheduledThreadPoolExecutor;
-
-@Singleton
-class EvictCacheExecutorProvider
- implements Provider<ScheduledThreadPoolExecutor>, LifecycleListener {
- private WorkQueue.Executor executor;
-
- @Inject
- EvictCacheExecutorProvider(WorkQueue workQueue,
- @PluginName String pluginName,
- Configuration config) {
- executor = workQueue.createQueue(config.getThreadPoolSize(),
- "Evict cache [" + pluginName + " plugin]");
- }
-
- @Override
- public void start() {
- // do nothing
- }
-
- @Override
- public void stop() {
- executor.shutdown();
- executor.unregisterWorkQueue();
- executor = null;
- }
-
- @Override
- public ScheduledThreadPoolExecutor get() {
- return executor;
- }
-}
diff --git a/src/main/java/com/ericsson/gerrit/plugins/evictcache/EvictCacheHandler.java b/src/main/java/com/ericsson/gerrit/plugins/evictcache/EvictCacheHandler.java
deleted file mode 100644
index fe8dc3a..0000000
--- a/src/main/java/com/ericsson/gerrit/plugins/evictcache/EvictCacheHandler.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.evictcache;
-
-import com.google.common.cache.RemovalNotification;
-import com.google.gerrit.server.cache.CacheRemovalListener;
-import com.google.inject.Inject;
-
-import java.util.concurrent.ScheduledThreadPoolExecutor;
-import java.util.regex.Pattern;
-
-class EvictCacheHandler<K, V> implements CacheRemovalListener<K, V> {
- private final ScheduledThreadPoolExecutor executor;
- private final RestSession restSession;
- private final Pattern pattern;
-
- @Inject
- EvictCacheHandler(RestSession restSession,
- @EvictCacheExecutor ScheduledThreadPoolExecutor executor) {
- this.restSession = restSession;
- this.executor = executor;
- pattern = Pattern.compile(
- "^accounts.*|^groups.*|ldap_groups|ldap_usernames|^project.*|sshkeys|web_sessions");
- }
-
- @Override
- public void onRemoval(String pluginName, String cacheName,
- RemovalNotification<K, V> notification) {
- if (!Context.isForwardedEvent() && !notification.wasEvicted()
- && isSynchronized(cacheName)) {
- executor.execute(
- new EvictCacheTask(pluginName, cacheName, notification.getKey()));
- }
- }
-
- private boolean isSynchronized(String cacheName) {
- return pattern.matcher(cacheName).matches();
- }
-
- class EvictCacheTask implements Runnable {
- private String pluginName;
- private String cacheName;
- private Object key;
-
- EvictCacheTask(String pluginName, String cacheName, Object key) {
- this.pluginName = pluginName;
- this.cacheName = cacheName;
- this.key = key;
- }
-
- @Override
- public void run() {
- restSession.evict(pluginName, cacheName, key);
- }
-
- @Override
- public String toString() {
- return String.format("Evict key '%s' from cache '%s' in target instance",
- key, cacheName);
- }
- }
-}
diff --git a/src/main/java/com/ericsson/gerrit/plugins/evictcache/EvictCacheRestApiServlet.java b/src/main/java/com/ericsson/gerrit/plugins/evictcache/EvictCacheRestApiServlet.java
deleted file mode 100644
index bb4f0ba..0000000
--- a/src/main/java/com/ericsson/gerrit/plugins/evictcache/EvictCacheRestApiServlet.java
+++ /dev/null
@@ -1,93 +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.evictcache;
-
-import static javax.servlet.http.HttpServletResponse.SC_BAD_REQUEST;
-import static javax.servlet.http.HttpServletResponse.SC_NO_CONTENT;
-
-import com.google.common.base.Splitter;
-import com.google.common.cache.Cache;
-import com.google.gerrit.extensions.registration.DynamicMap;
-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.List;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-@Singleton
-class EvictCacheRestApiServlet extends HttpServlet {
- private static final int CACHENAME_INDEX = 1;
- private static final long serialVersionUID = -1L;
- private static final String SOURCE_NAME = "gerrit";
- private static final String PROJECT_LIST = "project_list";
- private static final Logger logger =
- LoggerFactory.getLogger(EvictCacheRestApiServlet.class);
-
- private final DynamicMap<Cache<?, ?>> cacheMap;
-
- @Inject
- EvictCacheRestApiServlet(DynamicMap<Cache<?, ?>> cacheMap) {
- this.cacheMap = cacheMap;
- }
-
- @Override
- protected void doPost(HttpServletRequest req, HttpServletResponse rsp)
- throws IOException, ServletException {
- rsp.setContentType("text/plain");
- rsp.setCharacterEncoding("UTF-8");
- try {
- List<String> params = Splitter.on('/').splitToList(req.getPathInfo());
- String cacheName = params.get(CACHENAME_INDEX);
- String json = req.getReader().readLine();
- Object key = GsonParser.fromJson(cacheName, json);
- Cache<?, ?> cache = cacheMap.get(SOURCE_NAME, cacheName);
- Context.setForwardedEvent();
- evictCache(cache, cacheName, key);
- rsp.setStatus(SC_NO_CONTENT);
- } catch (IOException e) {
- logger.error("Failed to process eviction request: " + e.getMessage(), e);
- sendError(rsp, SC_BAD_REQUEST, e.getMessage());
- } 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 evictCache(Cache<?, ?> cache, String cacheName, Object key) {
- if (PROJECT_LIST.equals(cacheName)) {
- // One key is holding the list of projects
- cache.invalidateAll();
- } else {
- cache.invalidate(key);
- }
- logger.debug("Invalidated " + cacheName);
- }
-}
diff --git a/src/main/java/com/ericsson/gerrit/plugins/evictcache/GsonParser.java b/src/main/java/com/ericsson/gerrit/plugins/evictcache/GsonParser.java
deleted file mode 100644
index d752c06..0000000
--- a/src/main/java/com/ericsson/gerrit/plugins/evictcache/GsonParser.java
+++ /dev/null
@@ -1,80 +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.evictcache;
-
-import com.google.common.base.Strings;
-import com.google.gerrit.reviewdb.client.Account;
-import com.google.gerrit.reviewdb.client.AccountGroup;
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-
-final class GsonParser {
- private static final String ACCOUNTS = "accounts";
- private static final String GROUPS = "groups";
- private static final String GROUPS_BYINCLUDE = "groups_byinclude";
- private static final String GROUPS_MEMBERS = "groups_members";
- private static final String PROJECT_LIST = "project_list";
-
- private GsonParser() {
- }
-
- static Object fromJson(String cacheName, String json) {
- Gson gson = new GsonBuilder().create();
- Object key;
- // Need to add a case for 'adv_bases'
- switch (cacheName) {
- case ACCOUNTS:
- key = gson.fromJson(Strings.nullToEmpty(json).trim(), Account.Id.class);
- break;
- case GROUPS:
- key = gson.fromJson(Strings.nullToEmpty(json).trim(),
- AccountGroup.Id.class);
- break;
- case GROUPS_BYINCLUDE:
- case GROUPS_MEMBERS:
- key = gson.fromJson(Strings.nullToEmpty(json).trim(),
- AccountGroup.UUID.class);
- break;
- case PROJECT_LIST:
- key = gson.fromJson(Strings.nullToEmpty(json), Object.class);
- break;
- default:
- key = gson.fromJson(Strings.nullToEmpty(json).trim(), String.class);
- }
- return key;
- }
-
- static String toJson(String cacheName, Object key) {
- Gson gson = new GsonBuilder().create();
- String json;
- // Need to add a case for 'adv_bases'
- switch (cacheName) {
- case ACCOUNTS:
- json = gson.toJson(key, Account.Id.class);
- break;
- case GROUPS:
- json = gson.toJson(key, AccountGroup.Id.class);
- break;
- case GROUPS_BYINCLUDE:
- case GROUPS_MEMBERS:
- json = gson.toJson(key, AccountGroup.UUID.class);
- break;
- case PROJECT_LIST:
- default:
- json = gson.toJson(key);
- }
- return json;
- }
-}
diff --git a/src/main/java/com/ericsson/gerrit/plugins/evictcache/HttpClientProvider.java b/src/main/java/com/ericsson/gerrit/plugins/evictcache/HttpClientProvider.java
deleted file mode 100644
index df42800..0000000
--- a/src/main/java/com/ericsson/gerrit/plugins/evictcache/HttpClientProvider.java
+++ /dev/null
@@ -1,206 +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.evictcache;
-
-import com.google.inject.Inject;
-import com.google.inject.Provider;
-import com.google.inject.Singleton;
-
-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.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.HostnameVerifier;
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.SSLException;
-import javax.net.ssl.SSLSession;
-import javax.net.ssl.TrustManager;
-import javax.net.ssl.X509TrustManager;
-
-/**
- * Provides an HTTP client with SSL capabilities.
- */
-@Singleton
-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.warn("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(),
- new DummyHostnameVerifier());
- }
-
- 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
- }
- }
-
- private static class DummyHostnameVerifier implements HostnameVerifier {
- @Override
- public boolean verify(String hostname, SSLSession session) {
- // always accept
- return true;
- }
- }
-}
\ No newline at end of file
diff --git a/src/main/java/com/ericsson/gerrit/plugins/evictcache/HttpModule.java b/src/main/java/com/ericsson/gerrit/plugins/evictcache/HttpModule.java
deleted file mode 100644
index 27cf205..0000000
--- a/src/main/java/com/ericsson/gerrit/plugins/evictcache/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.evictcache;
-
-import com.google.gerrit.httpd.plugins.HttpPluginModule;
-
-class HttpModule extends HttpPluginModule {
- @Override
- protected void configureServlets() {
- serve("/gerrit/evict/*").with(EvictCacheRestApiServlet.class);
- }
-}
diff --git a/src/main/java/com/ericsson/gerrit/plugins/evictcache/HttpSession.java b/src/main/java/com/ericsson/gerrit/plugins/evictcache/HttpSession.java
deleted file mode 100644
index 35fbd65..0000000
--- a/src/main/java/com/ericsson/gerrit/plugins/evictcache/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.evictcache;
-
-import com.google.common.net.MediaType;
-import com.google.inject.Inject;
-
-import com.ericsson.gerrit.plugins.evictcache.CacheResponseHandler.CacheResult;
-
-import org.apache.http.client.methods.HttpPost;
-import org.apache.http.entity.StringEntity;
-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;
- }
-
- CacheResult post(String endpoint, String json) throws IOException {
- HttpPost post = new HttpPost(url + endpoint);
- StringEntity params = new StringEntity(json.trim());
- post.addHeader("Content-Type", MediaType.JSON_UTF_8.toString());
- post.addHeader("Accept", MediaType.JSON_UTF_8.toString());
- post.setEntity(params);
- return httpClient.execute(post, new CacheResponseHandler());
- }
-}
diff --git a/src/main/java/com/ericsson/gerrit/plugins/evictcache/Module.java b/src/main/java/com/ericsson/gerrit/plugins/evictcache/Module.java
deleted file mode 100644
index 28ba756..0000000
--- a/src/main/java/com/ericsson/gerrit/plugins/evictcache/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.evictcache;
-
-import com.google.gerrit.extensions.registration.DynamicSet;
-import com.google.gerrit.lifecycle.LifecycleModule;
-import com.google.gerrit.server.cache.CacheRemovalListener;
-import com.google.inject.Provides;
-import com.google.inject.Scopes;
-
-import org.apache.http.impl.client.CloseableHttpClient;
-
-import java.util.concurrent.ScheduledThreadPoolExecutor;
-
-class Module extends LifecycleModule {
-
- @Override
- protected void configure() {
- bind(CloseableHttpClient.class).toProvider(HttpClientProvider.class)
- .in(Scopes.SINGLETON);
- bind(Configuration.class);
- bind(HttpSession.class);
- bind(RestSession.class);
- bind(ScheduledThreadPoolExecutor.class)
- .annotatedWith(EvictCacheExecutor.class)
- .toProvider(EvictCacheExecutorProvider.class);
- listener().to(EvictCacheExecutorProvider.class);
- DynamicSet.bind(binder(), CacheRemovalListener.class).to(
- EvictCacheHandler.class);
- }
-
- @Provides
- @SyncUrl
- String syncUrl(Configuration config) {
- return config.getUrl();
- }
-}
diff --git a/src/main/java/com/ericsson/gerrit/plugins/evictcache/RestSession.java b/src/main/java/com/ericsson/gerrit/plugins/evictcache/RestSession.java
deleted file mode 100644
index 1295ce2..0000000
--- a/src/main/java/com/ericsson/gerrit/plugins/evictcache/RestSession.java
+++ /dev/null
@@ -1,56 +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.evictcache;
-
-import com.google.common.base.Joiner;
-import com.google.gerrit.extensions.annotations.PluginName;
-import com.google.inject.Inject;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.IOException;
-
-class RestSession {
- private static final Logger log = LoggerFactory.getLogger(RestSession.class);
- private static final String EVICT = "evict";
- private final HttpSession httpSession;
- private final String pluginName;
-
- @Inject
- RestSession(HttpSession httpClient,
- @PluginName String pluginName) {
- this.httpSession = httpClient;
- this.pluginName = pluginName;
- }
-
- boolean evict(String sourceName, String cacheName, Object key) {
- try {
- String json = GsonParser.toJson(cacheName, key);
- String buildEndpoint = buildEndpoint(pluginName, sourceName, cacheName);
- return httpSession
- .post(buildEndpoint, json)
- .isSuccessful();
- } catch (IOException e) {
- log.error("Error trying to evict for cache " + cacheName, e);
- return false;
- }
- }
-
- private String buildEndpoint(String pluginName, String sourceName,
- String cacheName) {
- return Joiner.on("/").join("/plugins", pluginName, sourceName, EVICT, cacheName);
- }
-}
diff --git a/src/main/java/com/ericsson/gerrit/plugins/evictcache/SyncUrl.java b/src/main/java/com/ericsson/gerrit/plugins/evictcache/SyncUrl.java
deleted file mode 100644
index 14c2880..0000000
--- a/src/main/java/com/ericsson/gerrit/plugins/evictcache/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.evictcache;
-
-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 a5adccc..0000000
--- a/src/main/resources/Documentation/about.md
+++ /dev/null
@@ -1,10 +0,0 @@
-The @PLUGIN@ plugin allows to synchronize the eviction of caches between two
-Gerrit instances sharing the same repositories and database.
-
-The plugin needs to be installed in both instances and every time a cache
-eviction occurs in one of the instances, the other instance's cache is updated.
-This way, both caches are kept synchronized.
-
-For this 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 ffe8f84..0000000
--- a/src/main/resources/Documentation/build.md
+++ /dev/null
@@ -1,50 +0,0 @@
-Build
-=====
-
-This plugin is built with Bazel.
-
-Clone (or link) this plugin to the `plugins` directory of Gerrit's source tree.
-
-Put the external dependency Bazel build file into the Gerrit /plugins directory,
-replacing the existing empty one.
-
-```
- cd gerrit/plugins
- rm external_plugin_deps.bzl
- ln -s @PLUGIN@/external_plugin_deps.bzl .
-```
-
-Then issue
-
-```
- bazel build plugins/@PLUGIN@
-```
-
-in the root of Gerrit's source tree to build
-
-The output is created in
-
-```
- bazel-genfiles/plugins/@PLUGIN@/@PLUGIN@.jar
-```
-
-This project can be imported into the Eclipse IDE.
-Add the plugin name to the `CUSTOM_PLUGINS` set in
-Gerrit core in `tools/bzl/plugins.bzl`, and execute:
-
-```
- ./tools/eclipse/project.py
-```
-
-To execute the tests run:
-
-```
- bazel test plugins/@PLUGIN@:evict_cache_tests
-```
-
-How to build the Gerrit Plugin API is described in the [Gerrit
-documentation](../../../Documentation/dev-bazel.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 da544a7..0000000
--- a/src/main/resources/Documentation/config.md
+++ /dev/null
@@ -1,46 +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
-: 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 synchronize cache evictions 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 evict the cache 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 flush the cache 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 cache evictions to the target instance.
- Defaults to 1.
diff --git a/src/test/java/com/ericsson/gerrit/plugins/evictcache/CacheResponseHandlerTest.java b/src/test/java/com/ericsson/gerrit/plugins/evictcache/CacheResponseHandlerTest.java
deleted file mode 100644
index 8e94727..0000000
--- a/src/test/java/com/ericsson/gerrit/plugins/evictcache/CacheResponseHandlerTest.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.evictcache;
-
-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.evictcache.CacheResponseHandler.CacheResult;
-
-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 CacheResponseHandlerTest {
- 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 CacheResponseHandler handler;
-
- @Before
- public void setUp() throws Exception {
- handler = new CacheResponseHandler();
- }
-
- @Test
- public void testIsSuccessful() throws Exception {
- HttpResponse response = setupMocks(OK, EMPTY_ENTITY);
- CacheResult result = handler.handleResponse(response);
- assertThat(result.isSuccessful()).isTrue();
- assertThat(result.getMessage()).isEmpty();
- }
-
- @Test
- public void testIsNotSuccessful() throws Exception {
- HttpResponse response = setupMocks(ERROR, ERROR_ENTITY);
- CacheResult 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/evictcache/ConfigurationTest.java b/src/test/java/com/ericsson/gerrit/plugins/evictcache/ConfigurationTest.java
deleted file mode 100644
index 88ddc54..0000000
--- a/src/test/java/com/ericsson/gerrit/plugins/evictcache/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.evictcache;
-
-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 = "evict-cache";
-
- @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/evictcache/Constants.java b/src/test/java/com/ericsson/gerrit/plugins/evictcache/Constants.java
deleted file mode 100644
index ce6d933..0000000
--- a/src/test/java/com/ericsson/gerrit/plugins/evictcache/Constants.java
+++ /dev/null
@@ -1,29 +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.evictcache;
-
-final class Constants {
-
- private Constants() {
- }
-
- static final String ENDPOINT_BASE = "/plugins/evict-cache/gerrit/evict/";
- static final String PROJECT_LIST = "project_list";
- static final String ACCOUNTS = "accounts";
- static final String GROUPS = "groups";
- static final String GROUPS_BYINCLUDE = "groups_byinclude";
- static final String GROUPS_MEMBERS = "groups_members";
- static final String DEFAULT = "projects";
-}
diff --git a/src/test/java/com/ericsson/gerrit/plugins/evictcache/ContextTest.java b/src/test/java/com/ericsson/gerrit/plugins/evictcache/ContextTest.java
deleted file mode 100644
index f7f51b6..0000000
--- a/src/test/java/com/ericsson/gerrit/plugins/evictcache/ContextTest.java
+++ /dev/null
@@ -1,45 +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.evictcache;
-
-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();
- try {
- assertThat(Context.isForwardedEvent()).isTrue();
- } finally {
- Context.unsetForwardedEvent();
- }
- }
-
- @Test
- public void testUnsetForwardedEvent() throws Exception {
- Context.setForwardedEvent();
- Context.unsetForwardedEvent();
- assertThat(Context.isForwardedEvent()).isFalse();
- }
-}
diff --git a/src/test/java/com/ericsson/gerrit/plugins/evictcache/EvictCacheExecutorProviderTest.java b/src/test/java/com/ericsson/gerrit/plugins/evictcache/EvictCacheExecutorProviderTest.java
deleted file mode 100644
index a01b187..0000000
--- a/src/test/java/com/ericsson/gerrit/plugins/evictcache/EvictCacheExecutorProviderTest.java
+++ /dev/null
@@ -1,64 +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.evictcache;
-
-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 EvictCacheExecutorProviderTest {
- private static final String PLUGIN_NAME = "evict-cache";
-
- @Mock
- private WorkQueue.Executor executorMock;
- private EvictCacheExecutorProvider evictCacheExecutorProvider;
-
- @Before
- public void setUp() throws Exception {
- WorkQueue workQueueMock = mock(WorkQueue.class);
- when(workQueueMock.createQueue(4,
- "Evict cache [" + PLUGIN_NAME + " plugin]")).thenReturn(executorMock);
- Configuration configMock = mock(Configuration.class);
- when(configMock.getThreadPoolSize()).thenReturn(4);
-
- evictCacheExecutorProvider =
- new EvictCacheExecutorProvider(workQueueMock, PLUGIN_NAME, configMock);
- }
-
- @Test
- public void shouldReturnExecutor() throws Exception {
- assertThat(evictCacheExecutorProvider.get()).isEqualTo(executorMock);
- }
-
- @Test
- public void testStop() throws Exception {
- evictCacheExecutorProvider.start();
- assertThat(evictCacheExecutorProvider.get()).isEqualTo(executorMock);
- evictCacheExecutorProvider.stop();
- verify(executorMock).shutdown();
- verify(executorMock).unregisterWorkQueue();
- assertThat(evictCacheExecutorProvider.get()).isNull();
- }
-}
diff --git a/src/test/java/com/ericsson/gerrit/plugins/evictcache/EvictCacheIT.java b/src/test/java/com/ericsson/gerrit/plugins/evictcache/EvictCacheIT.java
deleted file mode 100644
index a6d61cb..0000000
--- a/src/test/java/com/ericsson/gerrit/plugins/evictcache/EvictCacheIT.java
+++ /dev/null
@@ -1,81 +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.evictcache;
-
-import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
-import static com.github.tomakehurst.wiremock.client.WireMock.givenThat;
-import static com.github.tomakehurst.wiremock.client.WireMock.post;
-import static com.github.tomakehurst.wiremock.client.WireMock.postRequestedFor;
-import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo;
-import static com.github.tomakehurst.wiremock.client.WireMock.verify;
-
-import com.google.gerrit.acceptance.GerritConfig;
-import com.google.gerrit.acceptance.LightweightPluginDaemonTest;
-import com.google.gerrit.acceptance.NoHttpd;
-import com.google.gerrit.acceptance.TestPlugin;
-import com.google.gerrit.acceptance.UseSsh;
-
-import com.github.tomakehurst.wiremock.http.Request;
-import com.github.tomakehurst.wiremock.http.RequestListener;
-import com.github.tomakehurst.wiremock.http.Response;
-import com.github.tomakehurst.wiremock.junit.WireMockRule;
-
-import org.apache.http.HttpStatus;
-import org.junit.Rule;
-import org.junit.Test;
-
-import java.util.concurrent.TimeUnit;
-
-@NoHttpd
-@UseSsh
-@TestPlugin(
- name = "evict-cache",
- sysModule = "com.ericsson.gerrit.plugins.evictcache.Module",
- httpModule = "com.ericsson.gerrit.plugins.evictcache.HttpModule"
-)
-public class EvictCacheIT extends LightweightPluginDaemonTest {
- private static final int PORT = 18888;
- private static final String URL = "http://localhost:" + PORT;
-
- @Rule
- public WireMockRule wireMockRule = new WireMockRule(PORT);
-
- @Test
- @GerritConfig(name = "plugin.evict-cache.url", value = URL)
- @GerritConfig(name = "plugin.evict-cache.user", value = "admin")
- public void flushAndSendPost() throws Exception {
- final String flushRequest =
- Constants.ENDPOINT_BASE + Constants.PROJECT_LIST;
- wireMockRule.addMockServiceRequestListener(new RequestListener() {
- @Override
- public void requestReceived(Request request, Response response) {
- if (request.getAbsoluteUrl().contains(flushRequest)) {
- synchronized (flushRequest) {
- flushRequest.notify();
- }
- }
- }
- });
- givenThat(post(urlEqualTo(flushRequest))
- .willReturn(aResponse().withStatus(HttpStatus.SC_OK)));
-
- adminSshSession
- .exec("gerrit flush-caches --cache " + Constants.PROJECT_LIST);
- synchronized (flushRequest) {
- flushRequest.wait(TimeUnit.SECONDS.toMillis(2));
- }
- verify(postRequestedFor(urlEqualTo(flushRequest)));
- }
-}
diff --git a/src/test/java/com/ericsson/gerrit/plugins/evictcache/EvictCacheRestApiServletTest.java b/src/test/java/com/ericsson/gerrit/plugins/evictcache/EvictCacheRestApiServletTest.java
deleted file mode 100644
index 3db1f75..0000000
--- a/src/test/java/com/ericsson/gerrit/plugins/evictcache/EvictCacheRestApiServletTest.java
+++ /dev/null
@@ -1,131 +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.evictcache;
-
-import static javax.servlet.http.HttpServletResponse.SC_BAD_REQUEST;
-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.verify;
-import static org.mockito.Mockito.when;
-
-import com.google.common.cache.Cache;
-import com.google.gerrit.extensions.registration.DynamicMap;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.junit.MockitoJUnitRunner;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-@RunWith(MockitoJUnitRunner.class)
-public class EvictCacheRestApiServletTest {
- @Mock
- private HttpServletRequest request;
- @Mock
- private HttpServletResponse response;
- @Mock
- private BufferedReader reader;
- @Mock
- private DynamicMap<Cache<?, ?>> cacheMap;
- private EvictCacheRestApiServlet servlet;
-
- @Before
- public void setUp() {
- servlet = new EvictCacheRestApiServlet(cacheMap);
- }
-
- @Test
- public void evictAccounts() throws Exception {
- configureMocksFor(Constants.ACCOUNTS);
- verifyResponseIsOK();
- }
-
- @Test
- public void evictProjectList() throws Exception {
- configureMocksFor(Constants.PROJECT_LIST);
- verifyResponseIsOK();
- }
-
- @Test
- public void evictGroups() throws Exception {
- configureMocksFor(Constants.GROUPS);
- verifyResponseIsOK();
- }
-
- @Test
- public void evictGroupsByInclude() throws Exception {
- configureMocksFor(Constants.GROUPS_BYINCLUDE);
- verifyResponseIsOK();
- }
-
- @Test
- public void evictGroupsMembers() throws Exception {
- configureMocksFor(Constants.GROUPS_MEMBERS);
- servlet.doPost(request, response);
-
- }
-
- @Test
- public void evictDefault() throws Exception {
- configureMocksFor(Constants.DEFAULT);
- verifyResponseIsOK();
- }
-
- private void verifyResponseIsOK() throws Exception {
- servlet.doPost(request, response);
- verify(response).setStatus(SC_NO_CONTENT);
- }
-
- @Test
- public void badRequest() throws Exception {
- when(request.getPathInfo()).thenReturn("/someCache");
- String errorMessage = "someError";
- doThrow(new IOException(errorMessage)).when(request).getReader();
- servlet.doPost(request, response);
- verify(response).sendError(SC_BAD_REQUEST, errorMessage);
- }
-
- @Test
- public void errorWhileSendingErrorMessage() throws Exception {
- when(request.getPathInfo()).thenReturn("/someCache");
- String errorMessage = "someError";
- doThrow(new IOException(errorMessage)).when(request).getReader();
- servlet.doPost(request, response);
- verify(response).sendError(SC_BAD_REQUEST, errorMessage);
- }
-
- @SuppressWarnings("unchecked")
- private void configureMocksFor(String cacheName) throws IOException {
- when(cacheMap.get("gerrit", cacheName)).thenReturn(mock(Cache.class));
- when(request.getPathInfo()).thenReturn("/" + cacheName);
- when(request.getReader()).thenReturn(reader);
-
- if (Constants.DEFAULT.equals(cacheName)) {
- when(reader.readLine()).thenReturn("abc");
- } else if (Constants.GROUPS_BYINCLUDE.equals(cacheName)
- || Constants.GROUPS_MEMBERS.equals(cacheName)) {
- when(reader.readLine()).thenReturn("{\"uuid\":\"abcd1234\"}");
- } else {
- when(reader.readLine()).thenReturn("{}");
- }
- }
-}
diff --git a/src/test/java/com/ericsson/gerrit/plugins/evictcache/GsonParserTest.java b/src/test/java/com/ericsson/gerrit/plugins/evictcache/GsonParserTest.java
deleted file mode 100644
index 638456d..0000000
--- a/src/test/java/com/ericsson/gerrit/plugins/evictcache/GsonParserTest.java
+++ /dev/null
@@ -1,65 +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.evictcache;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import com.google.gerrit.reviewdb.client.Account;
-import com.google.gerrit.reviewdb.client.AccountGroup;
-
-import org.junit.Test;
-
-public class GsonParserTest {
- private static final Object EMPTY_JSON = "{}";
-
- @Test
- public void AccountIDParse() {
- Account.Id accountId = new Account.Id(1);
- String json = GsonParser.toJson(Constants.ACCOUNTS, accountId);
- assertThat(accountId)
- .isEqualTo(GsonParser.fromJson(Constants.ACCOUNTS, json));
- }
-
- @Test
- public void AccountGroupIDParse() {
- AccountGroup.Id accountGroupId = new AccountGroup.Id(1);
- String json = GsonParser.toJson(Constants.GROUPS, accountGroupId);
- assertThat(accountGroupId)
- .isEqualTo(GsonParser.fromJson(Constants.GROUPS, json));
- }
-
- @Test
- public void AccountGroupUUIDParse() {
- AccountGroup.UUID accountGroupUuid = new AccountGroup.UUID("abc123");
- String json =
- GsonParser.toJson(Constants.GROUPS_BYINCLUDE, accountGroupUuid);
- assertThat(accountGroupUuid)
- .isEqualTo(GsonParser.fromJson(Constants.GROUPS_BYINCLUDE, json));
- }
-
- @Test
- public void StringParse() {
- String key = "key";
- String json = GsonParser.toJson(Constants.DEFAULT, key);
- assertThat(key).isEqualTo(GsonParser.fromJson(Constants.DEFAULT, json));
- }
-
- @Test
- public void NoKeyParse() {
- Object object = new Object();
- String json = GsonParser.toJson(Constants.PROJECT_LIST, object);
- assertThat(json).isEqualTo(EMPTY_JSON);
- }
-}
diff --git a/src/test/java/com/ericsson/gerrit/plugins/evictcache/HttpClientProviderTest.java b/src/test/java/com/ericsson/gerrit/plugins/evictcache/HttpClientProviderTest.java
deleted file mode 100644
index e64cf7c..0000000
--- a/src/test/java/com/ericsson/gerrit/plugins/evictcache/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.evictcache;
-
-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/evictcache/HttpSessionTest.java b/src/test/java/com/ericsson/gerrit/plugins/evictcache/HttpSessionTest.java
deleted file mode 100644
index cb03159..0000000
--- a/src/test/java/com/ericsson/gerrit/plugins/evictcache/HttpSessionTest.java
+++ /dev/null
@@ -1,189 +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.evictcache;
-
-import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
-import static com.github.tomakehurst.wiremock.client.WireMock.post;
-import static com.github.tomakehurst.wiremock.client.WireMock.stubFor;
-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.evictcache.CacheResponseHandler.CacheResult;
-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.Rule;
-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 = Constants.ENDPOINT_BASE + "cache";
- private static final String EMPTYJSON = "{}";
- 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;
-
- @Rule
- public 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);
- }
-
- @Test
- public void testResponseOK() throws Exception {
- stubFor(post(urlEqualTo(ENDPOINT)).willReturn(aResponse().withStatus(OK)));
- assertThat(httpSession.post(ENDPOINT, EMPTYJSON).isSuccessful()).isTrue();
- }
-
- @Test
- public void testNotAuthorized() throws Exception {
- String expected = "unauthorized";
- stubFor(post(urlEqualTo(ENDPOINT)).willReturn(
- aResponse().withStatus(UNAUTHORIZED).withBody(expected)));
-
- CacheResult result = httpSession.post(ENDPOINT, EMPTYJSON);
- assertThat(result.isSuccessful()).isFalse();
- assertThat(result.getMessage()).isEqualTo(expected);
- }
-
- @Test
- public void testNotFound() throws Exception {
- String expected = "not found";
- stubFor(post(urlEqualTo(ENDPOINT)).willReturn(
- aResponse().withStatus(NOT_FOUND).withBody(expected)));
-
- CacheResult result = httpSession.post(ENDPOINT, EMPTYJSON);
- assertThat(result.isSuccessful()).isFalse();
- assertThat(result.getMessage()).isEqualTo(expected);
- }
-
- @Test
- public void testBadResponseRetryThenOK() throws Exception {
- stubFor(post(urlEqualTo(ENDPOINT)).inScenario(RETRY_AT_ERROR)
- .whenScenarioStateIs(Scenario.STARTED).willSetStateTo(REQUEST_MADE)
- .willReturn(aResponse().withStatus(ERROR)));
- stubFor(post(urlEqualTo(ENDPOINT)).inScenario(RETRY_AT_ERROR)
- .whenScenarioStateIs(REQUEST_MADE)
- .willReturn(aResponse().withStatus(OK)));
-
- assertThat(httpSession.post(ENDPOINT, EMPTYJSON).isSuccessful()).isTrue();
- }
-
- @Test
- public void testBadResponseRetryThenGiveUp() throws Exception {
- stubFor(post(urlEqualTo(ENDPOINT)).willReturn(
- aResponse().withStatus(ERROR).withBody(ERROR_MESSAGE)));
-
- assertThat(httpSession.post(ENDPOINT, EMPTYJSON).isSuccessful()).isFalse();
- assertThat(httpSession.post(ENDPOINT, EMPTYJSON).getMessage())
- .isEqualTo(ERROR_MESSAGE);
- }
-
- @Test
- public void testRetryAfterDelay() throws Exception {
- stubFor(post(urlEqualTo(ENDPOINT)).inScenario(RETRY_AT_DELAY)
- .whenScenarioStateIs(Scenario.STARTED).willSetStateTo(REQUEST_MADE)
- .willReturn(aResponse().withStatus(ERROR).withFixedDelay(TIMEOUT / 2)));
- stubFor(post(urlEqualTo(ENDPOINT)).inScenario(RETRY_AT_DELAY)
- .whenScenarioStateIs(REQUEST_MADE)
- .willReturn(aResponse().withStatus(OK)));
-
- assertThat(httpSession.post(ENDPOINT, EMPTYJSON).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, EMPTYJSON).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, EMPTYJSON);
- }
-
- @Test
- public void testGiveUpAtTimeout() throws Exception {
- stubFor(post(urlEqualTo(ENDPOINT)).inScenario(RETRY_AT_DELAY)
- .whenScenarioStateIs(Scenario.STARTED).willSetStateTo(REQUEST_MADE)
- .willReturn(aResponse().withStatus(ERROR).withFixedDelay(TIMEOUT)));
-
- assertThat(httpSession.post(ENDPOINT, EMPTYJSON).isSuccessful()).isFalse();
- }
-
- @Test
- public void testResponseWithMalformedResponse() throws Exception {
- stubFor(post(urlEqualTo(ENDPOINT)).willReturn(
- aResponse().withFault(Fault.MALFORMED_RESPONSE_CHUNK)));
-
- assertThat(httpSession.post(ENDPOINT, EMPTYJSON).isSuccessful()).isFalse();
- }
-}
diff --git a/src/test/java/com/ericsson/gerrit/plugins/evictcache/ModuleTest.java b/src/test/java/com/ericsson/gerrit/plugins/evictcache/ModuleTest.java
deleted file mode 100644
index 479ed90..0000000
--- a/src/test/java/com/ericsson/gerrit/plugins/evictcache/ModuleTest.java
+++ /dev/null
@@ -1,34 +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.evictcache;
-
-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/evictcache/RestSessionTest.java b/src/test/java/com/ericsson/gerrit/plugins/evictcache/RestSessionTest.java
deleted file mode 100644
index 731792b..0000000
--- a/src/test/java/com/ericsson/gerrit/plugins/evictcache/RestSessionTest.java
+++ /dev/null
@@ -1,124 +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.evictcache;
-
-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.google.gerrit.reviewdb.client.Account;
-import com.google.gerrit.reviewdb.client.AccountGroup;
-
-import com.ericsson.gerrit.plugins.evictcache.CacheResponseHandler.CacheResult;
-
-import org.junit.Test;
-
-import java.io.IOException;
-
-public class RestSessionTest {
- private static final String EVICT = "evict";
- private static final String SOURCE_NAME = "gerrit";
- private static final String PLUGIN_NAME = "evict-cache";
- private static final String EMPTY_JSON = "{}";
- private static final String EMPTY_JSON2 = "\"{}\"";
- private static final String ID_RESPONSE = "{\"id\":0}";
- private static final boolean OK_RESPONSE = true;
- private static final boolean FAIL_RESPONSE = false;
- private static final boolean THROW_EXCEPTION = true;
- private static final boolean DO_NOT_THROW_EXCEPTION = false;
-
- private RestSession restClient;
-
- @Test
- public void testEvictCacheOK() throws Exception {
- setupMocks(Constants.DEFAULT, EMPTY_JSON2, OK_RESPONSE,
- DO_NOT_THROW_EXCEPTION);
- assertThat(restClient.evict(SOURCE_NAME, Constants.DEFAULT, EMPTY_JSON))
- .isTrue();
- }
-
- @Test
- public void testEvictAccountsOK() throws Exception {
- setupMocks(Constants.ACCOUNTS, ID_RESPONSE, OK_RESPONSE,
- DO_NOT_THROW_EXCEPTION);
- assertThat(restClient.evict(SOURCE_NAME, Constants.ACCOUNTS,
- mock(Account.Id.class))).isTrue();
- }
-
- @Test
- public void testEvictGroupsOK() throws Exception {
- setupMocks(Constants.GROUPS, ID_RESPONSE, OK_RESPONSE,
- DO_NOT_THROW_EXCEPTION);
- assertThat(restClient.evict(SOURCE_NAME, Constants.GROUPS,
- mock(AccountGroup.Id.class))).isTrue();
- }
-
- @Test
- public void testEvictGroupsByIncludeOK() throws Exception {
- setupMocks(Constants.GROUPS_BYINCLUDE, EMPTY_JSON, OK_RESPONSE,
- DO_NOT_THROW_EXCEPTION);
- assertThat(restClient.evict(SOURCE_NAME, Constants.GROUPS_BYINCLUDE,
- mock(AccountGroup.UUID.class))).isTrue();
- }
-
- @Test
- public void testEvictGroupsMembersOK() throws Exception {
- setupMocks(Constants.GROUPS_MEMBERS, EMPTY_JSON, OK_RESPONSE,
- DO_NOT_THROW_EXCEPTION);
- assertThat(restClient.evict(SOURCE_NAME, Constants.GROUPS_MEMBERS,
- mock(AccountGroup.UUID.class))).isTrue();
- }
-
- @Test
- public void testEvictProjectListOK() throws Exception {
- setupMocks(Constants.PROJECT_LIST, EMPTY_JSON, OK_RESPONSE,
- DO_NOT_THROW_EXCEPTION);
- assertThat(
- restClient.evict(SOURCE_NAME, Constants.PROJECT_LIST, new Object()))
- .isTrue();
- }
-
- @Test
- public void testEvictCacheFailed() throws Exception {
- setupMocks(Constants.DEFAULT, EMPTY_JSON2, FAIL_RESPONSE,
- DO_NOT_THROW_EXCEPTION);
- assertThat(restClient.evict(SOURCE_NAME, Constants.DEFAULT, EMPTY_JSON))
- .isFalse();
- }
-
- @Test
- public void testEvictCacheThrowsException() throws Exception {
- setupMocks(Constants.DEFAULT, EMPTY_JSON2, FAIL_RESPONSE, THROW_EXCEPTION);
- assertThat(restClient.evict(SOURCE_NAME, Constants.DEFAULT, EMPTY_JSON))
- .isFalse();
- }
-
- private void setupMocks(String cacheName, String json, boolean ok,
- boolean exception) throws IOException {
- String request = Joiner.on("/").join("/plugins", PLUGIN_NAME, SOURCE_NAME,
- EVICT, cacheName);
- HttpSession httpSession = mock(HttpSession.class);
- if (exception) {
- doThrow(new IOException()).when(httpSession).post(request, json);
- } else {
- CacheResult result = new CacheResult(ok, "Error");
- when(httpSession.post(request, json)).thenReturn(result);
- }
-
- restClient = new RestSession(httpSession, PLUGIN_NAME);
- }
-}