Merge branch 'stable-2.14' into stable-2.15

* stable-2.14:
  Extract duplicated code in servlets to abstract class
  Rename DispatchEvent to ForwardedEventHandler
  Rename EvictCache to ForwardedCacheEvictionHandler
  Refactor EvictCache.evict method to accept only one argument
  Inline private method in EvictCache
  Add mock suffix in Index*RestApiServletTest

Change-Id: I847bbf2ab134272b5e961da3c73e8243fd2fe902
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/CacheEntry.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/CacheEntry.java
new file mode 100644
index 0000000..ed9898f
--- /dev/null
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/CacheEntry.java
@@ -0,0 +1,65 @@
+// Copyright (C) 2018 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.ericsson.gerrit.plugins.highavailability.forwarder;
+
+import com.ericsson.gerrit.plugins.highavailability.cache.Constants;
+
+/** Represents a cache entry to evict */
+public class CacheEntry {
+  private final String pluginName;
+  private final String cacheName;
+  private final Object key;
+
+  /**
+   * Cache entry
+   *
+   * @param pluginName the plugin name to which the cache belongs, or "gerrit" for a Gerrit core
+   *     cache
+   * @param cacheName the name of the cache to evict the entry from
+   * @param key the key identifying the entry in the cache
+   */
+  public CacheEntry(String pluginName, String cacheName, Object key) {
+    this.pluginName = pluginName;
+    this.cacheName = cacheName;
+    this.key = key;
+  }
+
+  public String getPluginName() {
+    return pluginName;
+  }
+
+  public String getCacheName() {
+    return cacheName;
+  }
+
+  public Object getKey() {
+    return key;
+  }
+
+  /**
+   * Build a CacheEntry from the specified cache and key
+   *
+   * @param cache String representing the cache, e.g. my_plugin.my_cache
+   * @param key The Object representing the key
+   * @return the CacheEntry
+   */
+  public static CacheEntry from(String cache, Object key) {
+    int dot = cache.indexOf('.');
+    if (dot > 0) {
+      return new CacheEntry(cache.substring(0, dot), cache.substring(dot + 1), key);
+    }
+    return new CacheEntry(Constants.GERRIT, cache, key);
+  }
+}
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/EvictCache.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedCacheEvictionHandler.java
similarity index 61%
rename from src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/EvictCache.java
rename to src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedCacheEvictionHandler.java
index dfca8da..66a455a 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/EvictCache.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedCacheEvictionHandler.java
@@ -28,13 +28,13 @@
  * forwarding loop between the 2 nodes.
  */
 @Singleton
-public class EvictCache {
-  private static final Logger logger = LoggerFactory.getLogger(EvictCache.class);
+public class ForwardedCacheEvictionHandler {
+  private static final Logger logger = LoggerFactory.getLogger(ForwardedCacheEvictionHandler.class);
 
   private final DynamicMap<Cache<?, ?>> cacheMap;
 
   @Inject
-  public EvictCache(DynamicMap<Cache<?, ?>> cacheMap) {
+  public ForwardedCacheEvictionHandler(DynamicMap<Cache<?, ?>> cacheMap) {
     this.cacheMap = cacheMap;
   }
 
@@ -42,33 +42,26 @@
    * Evict an entry from the cache of the local node, eviction will not be forwarded to the other
    * node.
    *
-   * @param pluginName the plugin name to which the cache belongs, or "gerrit" for a Gerrit core
-   *     cache
-   * @param cacheName the name of the cache to evict the entry from
-   * @param key the key identifying the entry to evict
+   * @param cacheEntry the entry to evict
    * @throws CacheNotFoundException if cache does not exist
    */
-  public void evict(String pluginName, String cacheName, Object key) throws CacheNotFoundException {
-    Cache<?, ?> cache = cacheMap.get(pluginName, cacheName);
+  public void evict(CacheEntry entry) throws CacheNotFoundException {
+    Cache<?, ?> cache = cacheMap.get(entry.getPluginName(), entry.getCacheName());
     if (cache == null) {
-      throw new CacheNotFoundException(pluginName, cacheName);
+      throw new CacheNotFoundException(entry.getPluginName(), entry.getCacheName());
     }
     try {
       Context.setForwardedEvent(true);
-      evictCache(cache, cacheName, key);
+      if (Constants.PROJECT_LIST.equals(entry.getCacheName())) {
+        // One key is holding the list of projects
+        cache.invalidateAll();
+        logger.debug("Invalidated cache {}", entry.getCacheName());
+      } else {
+        cache.invalidate(entry.getKey());
+        logger.debug("Invalidated cache {}[{}]", entry.getCacheName(), entry.getKey());
+      }
     } finally {
       Context.unsetForwardedEvent();
     }
   }
-
-  private void evictCache(Cache<?, ?> cache, String cacheName, Object key) {
-    if (Constants.PROJECT_LIST.equals(cacheName)) {
-      // One key is holding the list of projects
-      cache.invalidateAll();
-      logger.debug("Invalidated cache {}", cacheName);
-    } else {
-      cache.invalidate(key);
-      logger.debug("Invalidated cache {}[{}]", cacheName, key);
-    }
-  }
 }
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/DispatchEvent.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedEventHandler.java
similarity index 90%
rename from src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/DispatchEvent.java
rename to src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedEventHandler.java
index 9e23f34..e6aa5f1 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/DispatchEvent.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedEventHandler.java
@@ -29,13 +29,13 @@
  * causing an infinite forwarding loop between the 2 nodes.
  */
 @Singleton
-public class DispatchEvent {
-  private static final Logger logger = LoggerFactory.getLogger(DispatchEvent.class);
+public class ForwardedEventHandler {
+  private static final Logger logger = LoggerFactory.getLogger(ForwardedEventHandler.class);
 
   private final EventDispatcher dispatcher;
 
   @Inject
-  public DispatchEvent(EventDispatcher dispatcher) {
+  public ForwardedEventHandler(EventDispatcher dispatcher) {
     this.dispatcher = dispatcher;
   }
 
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/AbstractIndexRestApiServlet.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/AbstractIndexRestApiServlet.java
index 7a378a5..56cc176 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/AbstractIndexRestApiServlet.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/AbstractIndexRestApiServlet.java
@@ -14,7 +14,6 @@
 
 package com.ericsson.gerrit.plugins.highavailability.forwarder.rest;
 
-import static java.nio.charset.StandardCharsets.UTF_8;
 import static javax.servlet.http.HttpServletResponse.SC_CONFLICT;
 import static javax.servlet.http.HttpServletResponse.SC_METHOD_NOT_ALLOWED;
 import static javax.servlet.http.HttpServletResponse.SC_NOT_FOUND;
@@ -25,15 +24,11 @@
 import com.google.gwtorm.server.OrmException;
 import java.io.IOException;
 import java.util.concurrent.locks.Lock;
-import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
-public abstract class AbstractIndexRestApiServlet<T> extends HttpServlet {
+public abstract class AbstractIndexRestApiServlet<T> extends AbstractRestApiServlet {
   private static final long serialVersionUID = -1L;
-  private static final Logger logger = LoggerFactory.getLogger(AbstractIndexRestApiServlet.class);
 
   private final IndexName indexName;
   private final boolean allowDelete;
@@ -90,8 +85,7 @@
   }
 
   private void process(HttpServletRequest req, HttpServletResponse rsp, Operation operation) {
-    rsp.setContentType("text/plain");
-    rsp.setCharacterEncoding(UTF_8.name());
+    setHeaders(rsp);
     String path = req.getPathInfo();
     T id = parse(path.substring(path.lastIndexOf('/') + 1));
     logger.debug("{} {} {}", operation, indexName, id);
@@ -116,12 +110,4 @@
       Context.unsetForwardedEvent();
     }
   }
-
-  private 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);
-    }
-  }
 }
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/AbstractRestApiServlet.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/AbstractRestApiServlet.java
new file mode 100644
index 0000000..cff54cd
--- /dev/null
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/AbstractRestApiServlet.java
@@ -0,0 +1,41 @@
+// Copyright (C) 2018 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.ericsson.gerrit.plugins.highavailability.forwarder.rest;
+
+import static java.nio.charset.StandardCharsets.UTF_8;
+
+import java.io.IOException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletResponse;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public abstract class AbstractRestApiServlet extends HttpServlet {
+  private static final long serialVersionUID = 1L;
+  protected final Logger logger = LoggerFactory.getLogger(getClass());
+
+  protected static void setHeaders(HttpServletResponse rsp) {
+    rsp.setContentType("text/plain");
+    rsp.setCharacterEncoding(UTF_8.name());
+  }
+
+  protected 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);
+    }
+  }
+}
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/CacheRestApiServlet.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/CacheRestApiServlet.java
index 3d83de7..d82b8e2 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/CacheRestApiServlet.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/CacheRestApiServlet.java
@@ -17,45 +17,38 @@
 import static javax.servlet.http.HttpServletResponse.SC_BAD_REQUEST;
 import static javax.servlet.http.HttpServletResponse.SC_NO_CONTENT;
 
-import com.ericsson.gerrit.plugins.highavailability.cache.Constants;
+import com.ericsson.gerrit.plugins.highavailability.forwarder.CacheEntry;
 import com.ericsson.gerrit.plugins.highavailability.forwarder.CacheNotFoundException;
-import com.ericsson.gerrit.plugins.highavailability.forwarder.EvictCache;
-import com.google.common.annotations.VisibleForTesting;
+import com.ericsson.gerrit.plugins.highavailability.forwarder.ForwardedCacheEvictionHandler;
 import com.google.common.base.Splitter;
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
 import java.io.IOException;
 import java.util.List;
-import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 @Singleton
-class CacheRestApiServlet extends HttpServlet {
+class CacheRestApiServlet extends AbstractRestApiServlet {
   private static final int CACHENAME_INDEX = 1;
   private static final long serialVersionUID = -1L;
-  private static final Logger logger = LoggerFactory.getLogger(CacheRestApiServlet.class);
 
-  private final EvictCache evictCache;
+  private final ForwardedCacheEvictionHandler forwardedCacheEvictionHandler;
 
   @Inject
-  CacheRestApiServlet(EvictCache evictCache) {
-    this.evictCache = evictCache;
+  CacheRestApiServlet(ForwardedCacheEvictionHandler forwardedCacheEvictionHandler) {
+    this.forwardedCacheEvictionHandler = forwardedCacheEvictionHandler;
   }
 
   @Override
   protected void doPost(HttpServletRequest req, HttpServletResponse rsp) {
-    rsp.setContentType("text/plain");
-    rsp.setCharacterEncoding("UTF-8");
+    setHeaders(rsp);
     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);
-      CacheParameters cacheKey = getCacheParameters(cacheName);
-      evictCache.evict(cacheKey.pluginName, cacheKey.cacheName, key);
+      forwardedCacheEvictionHandler.evict(
+          CacheEntry.from(cacheName, GsonParser.fromJson(cacheName, json)));
       rsp.setStatus(SC_NO_CONTENT);
     } catch (CacheNotFoundException e) {
       logger.error("Failed to process eviction request: {}", e.getMessage());
@@ -65,32 +58,4 @@
       sendError(rsp, SC_BAD_REQUEST, e.getMessage());
     }
   }
-
-  @VisibleForTesting
-  public static class CacheParameters {
-    public final String pluginName;
-    public final String cacheName;
-
-    public CacheParameters(String pluginName, String cacheName) {
-      this.pluginName = pluginName;
-      this.cacheName = cacheName;
-    }
-  }
-
-  @VisibleForTesting
-  public static CacheParameters getCacheParameters(String cache) {
-    int dot = cache.indexOf('.');
-    if (dot > 0) {
-      return new CacheParameters(cache.substring(0, dot), cache.substring(dot + 1));
-    }
-    return new CacheParameters(Constants.GERRIT, cache);
-  }
-
-  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);
-    }
-  }
 }
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/EventRestApiServlet.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/EventRestApiServlet.java
index 77e6af4..5b4caa8 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/EventRestApiServlet.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/EventRestApiServlet.java
@@ -20,7 +20,7 @@
 import static javax.servlet.http.HttpServletResponse.SC_NO_CONTENT;
 import static javax.servlet.http.HttpServletResponse.SC_UNSUPPORTED_MEDIA_TYPE;
 
-import com.ericsson.gerrit.plugins.highavailability.forwarder.DispatchEvent;
+import com.ericsson.gerrit.plugins.highavailability.forwarder.ForwardedEventHandler;
 import com.google.common.base.Supplier;
 import com.google.common.io.CharStreams;
 import com.google.common.net.MediaType;
@@ -34,35 +34,30 @@
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
 import java.io.IOException;
-import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 @Singleton
-class EventRestApiServlet extends HttpServlet {
+class EventRestApiServlet extends AbstractRestApiServlet {
   private static final long serialVersionUID = -1L;
-  private static final Logger logger = LoggerFactory.getLogger(EventRestApiServlet.class);
 
-  private final DispatchEvent dispatchEvent;
+  private final ForwardedEventHandler forwardedEventHandler;
 
   @Inject
-  EventRestApiServlet(DispatchEvent dispatchEvent) {
-    this.dispatchEvent = dispatchEvent;
+  EventRestApiServlet(ForwardedEventHandler forwardedEventHandler) {
+    this.forwardedEventHandler = forwardedEventHandler;
   }
 
   @Override
   protected void doPost(HttpServletRequest req, HttpServletResponse rsp) {
-    rsp.setContentType("text/plain");
-    rsp.setCharacterEncoding("UTF-8");
+    setHeaders(rsp);
     try {
       if (!MediaType.parse(req.getContentType()).is(JSON_UTF_8)) {
         sendError(
             rsp, SC_UNSUPPORTED_MEDIA_TYPE, "Expecting " + JSON_UTF_8.toString() + " content type");
         return;
       }
-      dispatchEvent.dispatch(getEventFromRequest(req));
+      forwardedEventHandler.dispatch(getEventFromRequest(req));
       rsp.setStatus(SC_NO_CONTENT);
     } catch (OrmException e) {
       logger.debug("Error trying to find a change ", e);
@@ -82,12 +77,4 @@
             .create();
     return gson.fromJson(jsonEvent, Event.class);
   }
-
-  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);
-    }
-  }
 }
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/IndexAccountRestApiServlet.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/IndexAccountRestApiServlet.java
index 65ddcb2..dae8f71 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/IndexAccountRestApiServlet.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/IndexAccountRestApiServlet.java
@@ -19,13 +19,10 @@
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
 import java.io.IOException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 @Singleton
 class IndexAccountRestApiServlet extends AbstractIndexRestApiServlet<Account.Id> {
   private static final long serialVersionUID = -1L;
-  private static final Logger logger = LoggerFactory.getLogger(IndexAccountRestApiServlet.class);
 
   private final AccountIndexer indexer;
 
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/IndexChangeRestApiServlet.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/IndexChangeRestApiServlet.java
index ff6391a..f786dc6 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/IndexChangeRestApiServlet.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/IndexChangeRestApiServlet.java
@@ -23,13 +23,10 @@
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
 import java.io.IOException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 @Singleton
 class IndexChangeRestApiServlet extends AbstractIndexRestApiServlet<Change.Id> {
   private static final long serialVersionUID = -1L;
-  private static final Logger logger = LoggerFactory.getLogger(IndexChangeRestApiServlet.class);
 
   private final ChangeIndexer indexer;
   private final SchemaFactory<ReviewDb> schemaFactory;
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/IndexGroupRestApiServlet.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/IndexGroupRestApiServlet.java
index 0f92b8a..1cfb606 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/IndexGroupRestApiServlet.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/IndexGroupRestApiServlet.java
@@ -19,13 +19,10 @@
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
 import java.io.IOException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 @Singleton
 class IndexGroupRestApiServlet extends AbstractIndexRestApiServlet<AccountGroup.UUID> {
   private static final long serialVersionUID = -1L;
-  private static final Logger logger = LoggerFactory.getLogger(IndexGroupRestApiServlet.class);
 
   private final GroupIndexer indexer;
 
diff --git a/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/CacheEntryTest.java b/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/CacheEntryTest.java
new file mode 100644
index 0000000..5cdcf5a
--- /dev/null
+++ b/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/CacheEntryTest.java
@@ -0,0 +1,36 @@
+// Copyright (C) 2018 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.ericsson.gerrit.plugins.highavailability.forwarder;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import com.ericsson.gerrit.plugins.highavailability.cache.Constants;
+import org.junit.Test;
+
+public class CacheEntryTest {
+
+  @Test
+  public void cacheEntry() throws Exception {
+    CacheEntry entry = CacheEntry.from("accounts_by_name", "someKey");
+    assertThat(entry.getPluginName()).isEqualTo(Constants.GERRIT);
+    assertThat(entry.getCacheName()).isEqualTo("accounts_by_name");
+    assertThat(entry.getKey()).isEqualTo("someKey");
+
+    entry = CacheEntry.from("my_plugin.my_cache", "someOtherKey");
+    assertThat(entry.getPluginName()).isEqualTo("my_plugin");
+    assertThat(entry.getCacheName()).isEqualTo("my_cache");
+    assertThat(entry.getKey()).isEqualTo("someOtherKey");
+  }
+}
diff --git a/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/EvictCacheTest.java b/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedCacheEvictionHandlerTest.java
similarity index 66%
rename from src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/EvictCacheTest.java
rename to src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedCacheEvictionHandlerTest.java
index bab6473..a9bb5be 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/EvictCacheTest.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedCacheEvictionHandlerTest.java
@@ -33,49 +33,50 @@
 import org.mockito.stubbing.Answer;
 
 @RunWith(MockitoJUnitRunner.class)
-public class EvictCacheTest {
+public class ForwardedCacheEvictionHandlerTest {
 
   @Rule public ExpectedException exception = ExpectedException.none();
   @Mock private DynamicMap<Cache<?, ?>> cacheMapMock;
   @Mock private Cache<?, ?> cacheMock;
-  private EvictCache evictCache;
+  private ForwardedCacheEvictionHandler handler;
 
   @Before
   public void setUp() throws Exception {
-    evictCache = new EvictCache(cacheMapMock);
+    handler = new ForwardedCacheEvictionHandler(cacheMapMock);
   }
 
   @Test
   public void shouldThrowAnExceptionWhenCacheNotFound() throws Exception {
-    String pluginName = "somePlugin";
-    String cacheName = "unexistingCache";
+    CacheEntry entry = new CacheEntry("somePlugin", "unexistingCache", null);
 
     exception.expect(CacheNotFoundException.class);
-    exception.expectMessage(String.format("cache %s.%s not found", pluginName, cacheName));
-    evictCache.evict(pluginName, cacheName, null);
+    exception.expectMessage(
+        String.format("cache %s.%s not found", entry.getPluginName(), entry.getCacheName()));
+    handler.evict(entry);
   }
 
   @Test
   public void testSuccessfulCacheEviction() throws Exception {
-    Account.Id key = new Account.Id(123);
-    doReturn(cacheMock).when(cacheMapMock).get(Constants.GERRIT, Constants.ACCOUNTS);
+    CacheEntry entry = new CacheEntry(Constants.GERRIT, Constants.ACCOUNTS, new Account.Id(123));
+    doReturn(cacheMock).when(cacheMapMock).get(entry.getPluginName(), entry.getCacheName());
 
-    evictCache.evict(Constants.GERRIT, Constants.ACCOUNTS, key);
-    verify(cacheMock).invalidate(key);
+    handler.evict(entry);
+    verify(cacheMock).invalidate(entry.getKey());
   }
 
   @Test
   public void testSuccessfulProjectListCacheEviction() throws Exception {
-    doReturn(cacheMock).when(cacheMapMock).get(Constants.GERRIT, Constants.PROJECT_LIST);
+    CacheEntry entry = new CacheEntry(Constants.GERRIT, Constants.PROJECT_LIST, null);
+    doReturn(cacheMock).when(cacheMapMock).get(entry.getPluginName(), entry.getCacheName());
 
-    evictCache.evict(Constants.GERRIT, Constants.PROJECT_LIST, null);
+    handler.evict(entry);
     verify(cacheMock).invalidateAll();
   }
 
   @Test
   public void shouldSetAndUnsetForwardedContext() throws Exception {
-    Account.Id key = new Account.Id(456);
-    doReturn(cacheMock).when(cacheMapMock).get(Constants.GERRIT, Constants.ACCOUNTS);
+    CacheEntry entry = new CacheEntry(Constants.GERRIT, Constants.ACCOUNTS, new Account.Id(456));
+    doReturn(cacheMock).when(cacheMapMock).get(entry.getPluginName(), entry.getCacheName());
 
     //this doAnswer is to allow to assert that context is set to forwarded
     //while cache eviction is called.
@@ -86,19 +87,19 @@
                   return null;
                 })
         .when(cacheMock)
-        .invalidate(key);
+        .invalidate(entry.getKey());
 
     assertThat(Context.isForwardedEvent()).isFalse();
-    evictCache.evict(Constants.GERRIT, Constants.ACCOUNTS, key);
+    handler.evict(entry);
     assertThat(Context.isForwardedEvent()).isFalse();
 
-    verify(cacheMock).invalidate(key);
+    verify(cacheMock).invalidate(entry.getKey());
   }
 
   @Test
   public void shouldSetAndUnsetForwardedContextEvenIfExceptionIsThrown() throws Exception {
-    Account.Id key = new Account.Id(789);
-    doReturn(cacheMock).when(cacheMapMock).get(Constants.GERRIT, Constants.ACCOUNTS);
+    CacheEntry entry = new CacheEntry(Constants.GERRIT, Constants.ACCOUNTS, new Account.Id(789));
+    doReturn(cacheMock).when(cacheMapMock).get(entry.getPluginName(), entry.getCacheName());
 
     doAnswer(
             (Answer<Void>)
@@ -107,15 +108,15 @@
                   throw new RuntimeException();
                 })
         .when(cacheMock)
-        .invalidate(key);
+        .invalidate(entry.getKey());
 
     assertThat(Context.isForwardedEvent()).isFalse();
     try {
-      evictCache.evict(Constants.GERRIT, Constants.ACCOUNTS, key);
+      handler.evict(entry);
     } catch (RuntimeException e) {
     }
     assertThat(Context.isForwardedEvent()).isFalse();
 
-    verify(cacheMock).invalidate(key);
+    verify(cacheMock).invalidate(entry.getKey());
   }
 }
diff --git a/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/DispatchEventTest.java b/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedEventHandlerTest.java
similarity index 92%
rename from src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/DispatchEventTest.java
rename to src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedEventHandlerTest.java
index eae0353..0589bb1 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/DispatchEventTest.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedEventHandlerTest.java
@@ -33,21 +33,21 @@
 import org.mockito.stubbing.Answer;
 
 @RunWith(MockitoJUnitRunner.class)
-public class DispatchEventTest {
+public class ForwardedEventHandlerTest {
 
   @Rule public ExpectedException exception = ExpectedException.none();
   @Mock private EventDispatcher dispatcherMock;
-  private DispatchEvent dispatchEvent;
+  private ForwardedEventHandler handler;
 
   @Before
   public void setUp() throws Exception {
-    dispatchEvent = new DispatchEvent(dispatcherMock);
+    handler = new ForwardedEventHandler(dispatcherMock);
   }
 
   @Test
   public void testSuccessfulDispatching() throws Exception {
     Event event = new ProjectCreatedEvent();
-    dispatchEvent.dispatch(event);
+    handler.dispatch(event);
     verify(dispatcherMock).postEvent(event);
   }
 
@@ -66,7 +66,7 @@
         .postEvent(event);
 
     assertThat(Context.isForwardedEvent()).isFalse();
-    dispatchEvent.dispatch(event);
+    handler.dispatch(event);
     assertThat(Context.isForwardedEvent()).isFalse();
 
     verify(dispatcherMock).postEvent(event);
@@ -86,7 +86,7 @@
 
     assertThat(Context.isForwardedEvent()).isFalse();
     try {
-      dispatchEvent.dispatch(event);
+      handler.dispatch(event);
       fail("should have throw an OrmException");
     } catch (OrmException e) {
       assertThat(e.getMessage()).isEqualTo("someMessage");
diff --git a/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/CacheRestApiServletTest.java b/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/CacheRestApiServletTest.java
index 782cb81..cf15787 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/CacheRestApiServletTest.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/CacheRestApiServletTest.java
@@ -14,19 +14,16 @@
 
 package com.ericsson.gerrit.plugins.highavailability.forwarder.rest;
 
-import static com.google.common.truth.Truth.assertThat;
 import static javax.servlet.http.HttpServletResponse.SC_BAD_REQUEST;
 import static javax.servlet.http.HttpServletResponse.SC_NO_CONTENT;
 import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.doThrow;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 import com.ericsson.gerrit.plugins.highavailability.cache.Constants;
 import com.ericsson.gerrit.plugins.highavailability.forwarder.CacheNotFoundException;
-import com.ericsson.gerrit.plugins.highavailability.forwarder.EvictCache;
-import com.ericsson.gerrit.plugins.highavailability.forwarder.rest.CacheRestApiServlet.CacheParameters;
+import com.ericsson.gerrit.plugins.highavailability.forwarder.ForwardedCacheEvictionHandler;
 import java.io.BufferedReader;
 import java.io.IOException;
 import javax.servlet.http.HttpServletRequest;
@@ -42,12 +39,12 @@
   @Mock private HttpServletRequest requestMock;
   @Mock private HttpServletResponse responseMock;
   @Mock private BufferedReader readerMock;
-  @Mock private EvictCache evictCacheMock;
+  @Mock private ForwardedCacheEvictionHandler forwardedCacheEvictionHandlerMock;
   private CacheRestApiServlet servlet;
 
   @Before
   public void setUp() {
-    servlet = new CacheRestApiServlet(evictCacheMock);
+    servlet = new CacheRestApiServlet(forwardedCacheEvictionHandlerMock);
   }
 
   @Test
@@ -107,7 +104,7 @@
     String cacheName = "nonexistingCache";
     configureMocksFor(pluginName, cacheName);
     CacheNotFoundException e = new CacheNotFoundException(pluginName, cacheName);
-    doThrow(e).when(evictCacheMock).evict(eq(pluginName), eq(cacheName), any());
+    doThrow(e).when(forwardedCacheEvictionHandlerMock).evict(any());
     servlet.doPost(requestMock, responseMock);
     verify(responseMock).sendError(SC_BAD_REQUEST, e.getMessage());
   }
@@ -121,17 +118,6 @@
     verify(responseMock).sendError(SC_BAD_REQUEST, errorMessage);
   }
 
-  @Test
-  public void cacheParameters() throws Exception {
-    CacheParameters key = CacheRestApiServlet.getCacheParameters("accounts_by_name");
-    assertThat(key.pluginName).isEqualTo(Constants.GERRIT);
-    assertThat(key.cacheName).isEqualTo("accounts_by_name");
-
-    key = CacheRestApiServlet.getCacheParameters("my_plugin.my_cache");
-    assertThat(key.pluginName).isEqualTo("my_plugin");
-    assertThat(key.cacheName).isEqualTo("my_cache");
-  }
-
   private void verifyResponseIsOK() throws Exception {
     servlet.doPost(requestMock, responseMock);
     verify(responseMock).setStatus(SC_NO_CONTENT);
diff --git a/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/EventRestApiServletTest.java b/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/EventRestApiServletTest.java
index dc677b1..3774059 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/EventRestApiServletTest.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/EventRestApiServletTest.java
@@ -24,7 +24,7 @@
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
-import com.ericsson.gerrit.plugins.highavailability.forwarder.DispatchEvent;
+import com.ericsson.gerrit.plugins.highavailability.forwarder.ForwardedEventHandler;
 import com.google.common.net.MediaType;
 import com.google.gerrit.reviewdb.client.Project;
 import com.google.gerrit.server.events.EventTypes;
@@ -48,7 +48,7 @@
 public class EventRestApiServletTest {
   private static final String ERR_MSG = "some Error";
 
-  @Mock private DispatchEvent dispatchEventMock;
+  @Mock private ForwardedEventHandler forwardedEventHandlerMock;
   @Mock private HttpServletRequest requestMock;
   @Mock private HttpServletResponse responseMock;
   private EventRestApiServlet eventRestApiServlet;
@@ -61,7 +61,7 @@
 
   @Before
   public void createEventsRestApiServlet() throws Exception {
-    eventRestApiServlet = new EventRestApiServlet(dispatchEventMock);
+    eventRestApiServlet = new EventRestApiServlet(forwardedEventHandlerMock);
     when(requestMock.getContentType()).thenReturn(MediaType.JSON_UTF_8.toString());
   }
 
@@ -75,7 +75,7 @@
 
     eventRestApiServlet.doPost(requestMock, responseMock);
 
-    verify(dispatchEventMock).dispatch(any(RefReplicationDoneEvent.class));
+    verify(forwardedEventHandlerMock).dispatch(any(RefReplicationDoneEvent.class));
     verify(responseMock).setStatus(SC_NO_CONTENT);
   }
 
@@ -87,7 +87,7 @@
             + "\"ref-replication-done\",\"eventCreatedOn\":1451415011}";
     when(requestMock.getReader()).thenReturn(new BufferedReader(new StringReader(event)));
     doThrow(new OrmException(ERR_MSG))
-        .when(dispatchEventMock)
+        .when(forwardedEventHandlerMock)
         .dispatch(any(RefReplicationDoneEvent.class));
     eventRestApiServlet.doPost(requestMock, responseMock);
     verify(responseMock).sendError(SC_NOT_FOUND, "Change not found\n");
diff --git a/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/IndexAccountRestApiServletTest.java b/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/IndexAccountRestApiServletTest.java
index 9893c0a..a2fcc99 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/IndexAccountRestApiServletTest.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/IndexAccountRestApiServletTest.java
@@ -40,9 +40,9 @@
 public class IndexAccountRestApiServletTest {
   private static final String ACCOUNT_NUMBER = "1";
 
-  @Mock private AccountIndexer indexer;
-  @Mock private HttpServletRequest req;
-  @Mock private HttpServletResponse rsp;
+  @Mock private AccountIndexer indexerMock;
+  @Mock private HttpServletRequest requestMock;
+  @Mock private HttpServletResponse responseMock;
 
   private Account.Id id;
   private IndexAccountRestApiServlet servlet;
@@ -54,36 +54,36 @@
 
   @Before
   public void setUpMocks() {
-    servlet = new IndexAccountRestApiServlet(indexer);
+    servlet = new IndexAccountRestApiServlet(indexerMock);
     id = Account.Id.parse(ACCOUNT_NUMBER);
-    when(req.getPathInfo()).thenReturn("/index/account/" + ACCOUNT_NUMBER);
+    when(requestMock.getPathInfo()).thenReturn("/index/account/" + ACCOUNT_NUMBER);
   }
 
   @Test
   public void accountIsIndexed() throws Exception {
-    servlet.doPost(req, rsp);
-    verify(indexer, times(1)).index(id);
-    verify(rsp).setStatus(SC_NO_CONTENT);
+    servlet.doPost(requestMock, responseMock);
+    verify(indexerMock, times(1)).index(id);
+    verify(responseMock).setStatus(SC_NO_CONTENT);
   }
 
   @Test
   public void cannotDeleteAccount() throws Exception {
-    servlet.doDelete(req, rsp);
-    verify(rsp).sendError(SC_METHOD_NOT_ALLOWED, "cannot delete account from index");
+    servlet.doDelete(requestMock, responseMock);
+    verify(responseMock).sendError(SC_METHOD_NOT_ALLOWED, "cannot delete account from index");
   }
 
   @Test
   public void indexerThrowsIOExceptionTryingToIndexAccount() throws Exception {
-    doThrow(new IOException("io-error")).when(indexer).index(id);
-    servlet.doPost(req, rsp);
-    verify(rsp).sendError(SC_CONFLICT, "io-error");
+    doThrow(new IOException("io-error")).when(indexerMock).index(id);
+    servlet.doPost(requestMock, responseMock);
+    verify(responseMock).sendError(SC_CONFLICT, "io-error");
   }
 
   @Test
   public void sendErrorThrowsIOException() throws Exception {
-    doThrow(new IOException("io-error")).when(indexer).index(id);
-    doThrow(new IOException("someError")).when(rsp).sendError(SC_CONFLICT, "io-error");
-    servlet.doPost(req, rsp);
-    verify(rsp).sendError(SC_CONFLICT, "io-error");
+    doThrow(new IOException("io-error")).when(indexerMock).index(id);
+    doThrow(new IOException("someError")).when(responseMock).sendError(SC_CONFLICT, "io-error");
+    servlet.doPost(requestMock, responseMock);
+    verify(responseMock).sendError(SC_CONFLICT, "io-error");
   }
 }
diff --git a/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/IndexChangeRestApiServletTest.java b/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/IndexChangeRestApiServletTest.java
index 2e63fa7..4348e27 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/IndexChangeRestApiServletTest.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/IndexChangeRestApiServletTest.java
@@ -54,11 +54,11 @@
   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;
+  @Mock private ChangeIndexer indexerMock;
+  @Mock private SchemaFactory<ReviewDb> schemaFactoryMock;
+  @Mock private ReviewDb dbMock;
+  @Mock private HttpServletRequest requestMock;
+  @Mock private HttpServletResponse responseMock;
   private Change.Id id;
   private Change change;
   private IndexChangeRestApiServlet indexRestApiServlet;
@@ -70,82 +70,82 @@
 
   @Before
   public void setUpMocks() {
-    indexRestApiServlet = new IndexChangeRestApiServlet(indexer, schemaFactory);
+    indexRestApiServlet = new IndexChangeRestApiServlet(indexerMock, schemaFactoryMock);
     id = Change.Id.parse(CHANGE_NUMBER);
-    when(req.getPathInfo()).thenReturn("/index/change/" + CHANGE_NUMBER);
+    when(requestMock.getPathInfo()).thenReturn("/index/change/" + CHANGE_NUMBER);
     change = new Change(null, id, null, null, TimeUtil.nowTs());
   }
 
   @Test
   public void changeIsIndexed() throws Exception {
     setupPostMocks(CHANGE_EXISTS);
-    indexRestApiServlet.doPost(req, rsp);
-    verify(indexer, times(1)).index(db, change);
-    verify(rsp).setStatus(SC_NO_CONTENT);
+    indexRestApiServlet.doPost(requestMock, responseMock);
+    verify(indexerMock, times(1)).index(dbMock, change);
+    verify(responseMock).setStatus(SC_NO_CONTENT);
   }
 
   @Test
   public void changeToIndexDoNotExist() throws Exception {
     setupPostMocks(CHANGE_DOES_NOT_EXIST);
-    indexRestApiServlet.doPost(req, rsp);
-    verify(indexer, times(1)).delete(id);
-    verify(rsp).setStatus(SC_NO_CONTENT);
+    indexRestApiServlet.doPost(requestMock, responseMock);
+    verify(indexerMock, times(1)).delete(id);
+    verify(responseMock).setStatus(SC_NO_CONTENT);
   }
 
   @Test
   public void schemaThrowsExceptionWhenLookingUpForChange() throws Exception {
     setupPostMocks(CHANGE_EXISTS, THROW_ORM_EXCEPTION);
-    indexRestApiServlet.doPost(req, rsp);
-    verify(rsp).sendError(SC_NOT_FOUND, "Error trying to find change \n");
+    indexRestApiServlet.doPost(requestMock, responseMock);
+    verify(responseMock).sendError(SC_NOT_FOUND, "Error trying to find change \n");
   }
 
   @Test
   public void indexerThrowsNoSuchChangeExceptionTryingToPostChange() throws Exception {
-    doThrow(new NoSuchChangeException(id)).when(schemaFactory).open();
-    indexRestApiServlet.doPost(req, rsp);
-    verify(indexer, times(1)).delete(id);
-    verify(rsp).setStatus(SC_NO_CONTENT);
+    doThrow(new NoSuchChangeException(id)).when(schemaFactoryMock).open();
+    indexRestApiServlet.doPost(requestMock, responseMock);
+    verify(indexerMock, times(1)).delete(id);
+    verify(responseMock).setStatus(SC_NO_CONTENT);
   }
 
   @Test
   public void indexerThrowsNestedNoSuchChangeExceptionTryingToPostChange() throws Exception {
     OrmException e = new OrmException("test", new NoSuchChangeException(id));
-    doThrow(e).when(schemaFactory).open();
-    indexRestApiServlet.doPost(req, rsp);
-    verify(indexer, times(1)).delete(id);
-    verify(rsp).setStatus(SC_NO_CONTENT);
+    doThrow(e).when(schemaFactoryMock).open();
+    indexRestApiServlet.doPost(requestMock, responseMock);
+    verify(indexerMock, times(1)).delete(id);
+    verify(responseMock).setStatus(SC_NO_CONTENT);
   }
 
   @Test
   public void indexerThrowsIOExceptionTryingToIndexChange() throws Exception {
     setupPostMocks(CHANGE_EXISTS, DO_NOT_THROW_ORM_EXCEPTION, THROW_IO_EXCEPTION);
-    indexRestApiServlet.doPost(req, rsp);
-    verify(rsp).sendError(SC_CONFLICT, "io-error");
+    indexRestApiServlet.doPost(requestMock, responseMock);
+    verify(responseMock).sendError(SC_CONFLICT, "io-error");
   }
 
   @Test
   public void changeIsDeletedFromIndex() throws Exception {
-    indexRestApiServlet.doDelete(req, rsp);
-    verify(indexer, times(1)).delete(id);
-    verify(rsp).setStatus(SC_NO_CONTENT);
+    indexRestApiServlet.doDelete(requestMock, responseMock);
+    verify(indexerMock, times(1)).delete(id);
+    verify(responseMock).setStatus(SC_NO_CONTENT);
   }
 
   @Test
   public void indexerThrowsExceptionTryingToDeleteChange() throws Exception {
-    doThrow(new IOException("io-error")).when(indexer).delete(id);
-    indexRestApiServlet.doDelete(req, rsp);
-    verify(rsp).sendError(SC_CONFLICT, "io-error");
+    doThrow(new IOException("io-error")).when(indexerMock).delete(id);
+    indexRestApiServlet.doDelete(requestMock, responseMock);
+    verify(responseMock).sendError(SC_CONFLICT, "io-error");
   }
 
   @Test
   public void sendErrorThrowsIOException() throws Exception {
     doThrow(new IOException("someError"))
-        .when(rsp)
+        .when(responseMock)
         .sendError(SC_NOT_FOUND, "Error trying to find change \n");
     setupPostMocks(CHANGE_EXISTS, THROW_ORM_EXCEPTION);
-    indexRestApiServlet.doPost(req, rsp);
-    verify(rsp).sendError(SC_NOT_FOUND, "Error trying to find change \n");
-    verifyZeroInteractions(indexer);
+    indexRestApiServlet.doPost(requestMock, responseMock);
+    verify(responseMock).sendError(SC_NOT_FOUND, "Error trying to find change \n");
+    verifyZeroInteractions(indexerMock);
   }
 
   private void setupPostMocks(boolean changeExist) throws Exception {
@@ -160,15 +160,15 @@
   private void setupPostMocks(boolean changeExist, boolean ormException, boolean ioException)
       throws OrmException, IOException {
     if (ormException) {
-      doThrow(new OrmException("")).when(schemaFactory).open();
+      doThrow(new OrmException("")).when(schemaFactoryMock).open();
     } else {
-      when(schemaFactory.open()).thenReturn(db);
+      when(schemaFactoryMock.open()).thenReturn(dbMock);
       ChangeAccess ca = mock(ChangeAccess.class);
-      when(db.changes()).thenReturn(ca);
+      when(dbMock.changes()).thenReturn(ca);
       if (changeExist) {
         when(ca.get(id)).thenReturn(change);
         if (ioException) {
-          doThrow(new IOException("io-error")).when(indexer).index(db, change);
+          doThrow(new IOException("io-error")).when(indexerMock).index(dbMock, change);
         }
       } else {
         when(ca.get(id)).thenReturn(null);
diff --git a/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/IndexGroupRestApiServletTest.java b/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/IndexGroupRestApiServletTest.java
index 0994b9b..ffdd93e 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/IndexGroupRestApiServletTest.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/IndexGroupRestApiServletTest.java
@@ -40,9 +40,9 @@
 public class IndexGroupRestApiServletTest {
   private static final String UUID = "we235jdf92nfj2351";
 
-  @Mock private GroupIndexer indexer;
-  @Mock private HttpServletRequest req;
-  @Mock private HttpServletResponse rsp;
+  @Mock private GroupIndexer indexerMock;
+  @Mock private HttpServletRequest requestMock;
+  @Mock private HttpServletResponse responseMock;
 
   private AccountGroup.UUID uuid;
   private IndexGroupRestApiServlet servlet;
@@ -54,36 +54,36 @@
 
   @Before
   public void setUpMocks() {
-    servlet = new IndexGroupRestApiServlet(indexer);
+    servlet = new IndexGroupRestApiServlet(indexerMock);
     uuid = AccountGroup.UUID.parse(UUID);
-    when(req.getPathInfo()).thenReturn("/index/group/" + UUID);
+    when(requestMock.getPathInfo()).thenReturn("/index/group/" + UUID);
   }
 
   @Test
   public void groupIsIndexed() throws Exception {
-    servlet.doPost(req, rsp);
-    verify(indexer, times(1)).index(uuid);
-    verify(rsp).setStatus(SC_NO_CONTENT);
+    servlet.doPost(requestMock, responseMock);
+    verify(indexerMock, times(1)).index(uuid);
+    verify(responseMock).setStatus(SC_NO_CONTENT);
   }
 
   @Test
   public void cannotDeleteGroup() throws Exception {
-    servlet.doDelete(req, rsp);
-    verify(rsp).sendError(SC_METHOD_NOT_ALLOWED, "cannot delete group from index");
+    servlet.doDelete(requestMock, responseMock);
+    verify(responseMock).sendError(SC_METHOD_NOT_ALLOWED, "cannot delete group from index");
   }
 
   @Test
   public void indexerThrowsIOExceptionTryingToIndexGroup() throws Exception {
-    doThrow(new IOException("io-error")).when(indexer).index(uuid);
-    servlet.doPost(req, rsp);
-    verify(rsp).sendError(SC_CONFLICT, "io-error");
+    doThrow(new IOException("io-error")).when(indexerMock).index(uuid);
+    servlet.doPost(requestMock, responseMock);
+    verify(responseMock).sendError(SC_CONFLICT, "io-error");
   }
 
   @Test
   public void sendErrorThrowsIOException() throws Exception {
-    doThrow(new IOException("io-error")).when(indexer).index(uuid);
-    doThrow(new IOException("someError")).when(rsp).sendError(SC_CONFLICT, "io-error");
-    servlet.doPost(req, rsp);
-    verify(rsp).sendError(SC_CONFLICT, "io-error");
+    doThrow(new IOException("io-error")).when(indexerMock).index(uuid);
+    doThrow(new IOException("someError")).when(responseMock).sendError(SC_CONFLICT, "io-error");
+    servlet.doPost(requestMock, responseMock);
+    verify(responseMock).sendError(SC_CONFLICT, "io-error");
   }
 }