Merge branch 'stable-2.13'

* stable-2.13:
  Replace EasyMock with Mockito

Change-Id: I28fae8d964fca37580f6779b6b3819688eecd4ff
diff --git a/BUCK b/BUCK
index a789c05..1126b12 100644
--- a/BUCK
+++ b/BUCK
@@ -7,7 +7,7 @@
 
 TEST_DEPS = GERRIT_PLUGIN_API + GERRIT_TESTS + [
   ':sync-index__plugin',
-  ':wiremock',
+  ':mockito',
 ]
 
 gerrit_plugin(
@@ -49,3 +49,30 @@
   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
index 32842a8..ed6ffe4 100644
--- a/BUILD
+++ b/BUILD
@@ -26,6 +26,9 @@
     tags = ["sync-index", "local"],
     deps = PLUGIN_DEPS + PLUGIN_TEST_DEPS + [
         "@wiremock//jar",
+        "@mockito//jar",
+        "@byte-buddy//jar",
+        "@objenesis//jar",
         ":sync-index__plugin",
     ],
 )
diff --git a/WORKSPACE b/WORKSPACE
index 0121fc2..c4582eb 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -31,3 +31,21 @@
     artifact = "com.github.tomakehurst:wiremock-standalone:2.4.1",
     sha1 = "228d3047147fffa0f12771f5dc2b3cd3b38c454b",
 )
+
+maven_jar(
+    name = 'mockito',
+    artifact = 'org.mockito:mockito-core:2.5.0',
+    sha1 = 'be28d46a52c7f2563580adeca350145e9ce916f8',
+)
+
+maven_jar(
+    name = 'byte-buddy',
+    artifact = 'net.bytebuddy:byte-buddy:1.5.12',
+    sha1 = 'b1ba1d15f102b36ed43b826488114678d6d413da',
+)
+
+maven_jar(
+    name = 'objenesis',
+    artifact = 'org.objenesis:objenesis:2.4',
+    sha1 = '2916b6c96b50c5b3ec4452ed99401db745aabb27',
+)
diff --git a/src/test/java/com/ericsson/gerrit/plugins/syncindex/ConfigurationTest.java b/src/test/java/com/ericsson/gerrit/plugins/syncindex/ConfigurationTest.java
index fd39331..aab72d3 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/syncindex/ConfigurationTest.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/syncindex/ConfigurationTest.java
@@ -15,41 +15,46 @@
 package com.ericsson.gerrit.plugins.syncindex;
 
 import static com.google.common.truth.Truth.assertThat;
-import static org.easymock.EasyMock.expect;
-
-import org.easymock.EasyMockSupport;
-import org.junit.Before;
-import org.junit.Test;
+import static org.mockito.Mockito.when;
 
 import com.google.gerrit.server.config.PluginConfig;
 import com.google.gerrit.server.config.PluginConfigFactory;
 
-public class ConfigurationTest extends EasyMockSupport {
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnitRunner;
+
+@RunWith(MockitoJUnitRunner.class)
+public class ConfigurationTest {
   private static final String PASS = "fakePass";
   private static final String USER = "fakeUser";
   private static final String URL = "fakeUrl";
   private static final String EMPTY = "";
+  private static final boolean CUSTOM_VALUES = true;
+  private static final boolean DEFAULT_VALUES = false;
   private static final int TIMEOUT = 5000;
   private static final int MAX_TRIES = 5;
   private static final int RETRY_INTERVAL = 1000;
   private static final int THREAD_POOL_SIZE = 1;
 
+  @Mock
   private PluginConfigFactory cfgFactoryMock;
+  @Mock
   private PluginConfig configMock;
   private Configuration configuration;
-  private String pluginName = "sync-index";
+  private String pluginName = "sync-events";
 
   @Before
   public void setUp() throws Exception {
-    configMock = createNiceMock(PluginConfig.class);
-    cfgFactoryMock = createMock(PluginConfigFactory.class);
-    expect(cfgFactoryMock.getFromGerritConfig(pluginName, true))
-        .andStubReturn(configMock);
+    when(cfgFactoryMock.getFromGerritConfig(pluginName, true))
+        .thenReturn(configMock);
   }
 
   @Test
   public void testValuesPresentInGerritConfig() throws Exception {
-    buildMocks(true);
+    buildMocks(CUSTOM_VALUES);
     assertThat(configuration.getUrl()).isEqualTo(URL);
     assertThat(configuration.getUser()).isEqualTo(USER);
     assertThat(configuration.getPassword()).isEqualTo(PASS);
@@ -62,7 +67,7 @@
 
   @Test
   public void testValuesNotPresentInGerritConfig() throws Exception {
-    buildMocks(false);
+    buildMocks(DEFAULT_VALUES);
     assertThat(configuration.getUrl()).isEqualTo(EMPTY);
     assertThat(configuration.getUser()).isEqualTo(EMPTY);
     assertThat(configuration.getPassword()).isEqualTo(EMPTY);
@@ -75,28 +80,28 @@
 
   @Test
   public void testUrlTrailingSlashIsDropped() throws Exception {
-    expect(configMock.getString("url")).andReturn(URL + "/");
-    replayAll();
+    when(configMock.getString("url")).thenReturn(URL + "/");
+
     configuration = new Configuration(cfgFactoryMock, pluginName);
     assertThat(configuration).isNotNull();
     assertThat(configuration.getUrl()).isEqualTo(URL);
   }
 
   private void buildMocks(boolean values) {
-    expect(configMock.getString("url")).andReturn(values ? URL : null);
-    expect(configMock.getString("user")).andReturn(values ? USER : null);
-    expect(configMock.getString("password")).andReturn(values ? PASS : null);
-    expect(configMock.getInt("connectionTimeout", TIMEOUT))
-        .andReturn(values ? TIMEOUT : 0);
-    expect(configMock.getInt("socketTimeout", TIMEOUT))
-        .andReturn(values ? TIMEOUT : 0);
-    expect(configMock.getInt("maxTries", MAX_TRIES))
-        .andReturn(values ? MAX_TRIES : 0);
-    expect(configMock.getInt("retryInterval", RETRY_INTERVAL))
-        .andReturn(values ? RETRY_INTERVAL : 0);
-    expect(configMock.getInt("threadPoolSize", THREAD_POOL_SIZE))
-        .andReturn(values ? THREAD_POOL_SIZE : 0);
-    replayAll();
+    when(configMock.getString("url")).thenReturn(values ? URL : null);
+    when(configMock.getString("user")).thenReturn(values ? USER : null);
+    when(configMock.getString("password")).thenReturn(values ? PASS : null);
+    when(configMock.getInt("connectionTimeout", TIMEOUT))
+        .thenReturn(values ? TIMEOUT : 0);
+    when(configMock.getInt("socketTimeout", TIMEOUT))
+        .thenReturn(values ? TIMEOUT : 0);
+    when(configMock.getInt("maxTries", MAX_TRIES))
+        .thenReturn(values ? MAX_TRIES : 0);
+    when(configMock.getInt("retryInterval", RETRY_INTERVAL))
+        .thenReturn(values ? RETRY_INTERVAL : 0);
+    when(configMock.getInt("threadPoolSize", THREAD_POOL_SIZE))
+        .thenReturn(values ? THREAD_POOL_SIZE : 0);
+
     configuration = new Configuration(cfgFactoryMock, pluginName);
   }
 }
diff --git a/src/test/java/com/ericsson/gerrit/plugins/syncindex/ContextTest.java b/src/test/java/com/ericsson/gerrit/plugins/syncindex/ContextTest.java
index f43439e..a6898b5 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/syncindex/ContextTest.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/syncindex/ContextTest.java
@@ -16,10 +16,10 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
-import org.easymock.EasyMockSupport;
+
 import org.junit.Test;
 
-public class ContextTest extends EasyMockSupport {
+public class ContextTest {
 
   @Test
   public void testInitialValueNotNull() throws Exception {
diff --git a/src/test/java/com/ericsson/gerrit/plugins/syncindex/HttpClientProviderTest.java b/src/test/java/com/ericsson/gerrit/plugins/syncindex/HttpClientProviderTest.java
index 48af47a..68577b8 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/syncindex/HttpClientProviderTest.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/syncindex/HttpClientProviderTest.java
@@ -15,7 +15,7 @@
 package com.ericsson.gerrit.plugins.syncindex;
 
 import static com.google.common.truth.Truth.assertThat;
-import static org.easymock.EasyMock.expect;
+import static org.mockito.Mockito.when;
 
 import com.google.gerrit.lifecycle.LifecycleModule;
 import com.google.inject.Guice;
@@ -23,27 +23,27 @@
 import com.google.inject.Scopes;
 
 import org.apache.http.impl.client.CloseableHttpClient;
-import org.easymock.EasyMockSupport;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnitRunner;
 
-public class HttpClientProviderTest extends EasyMockSupport {
+@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 {
-    config = createNiceMock(Configuration.class);
-    expect(config.getUrl()).andReturn(EMPTY).anyTimes();
-    expect(config.getUser()).andReturn(EMPTY).anyTimes();
-    expect(config.getPassword()).andReturn(EMPTY).anyTimes();
-    expect(config.getMaxTries()).andReturn(1).anyTimes();
-    expect(config.getConnectionTimeout()).andReturn(TIME_INTERVAL).anyTimes();
-    expect(config.getSocketTimeout()).andReturn(TIME_INTERVAL).anyTimes();
-    expect(config.getRetryInterval()).andReturn(TIME_INTERVAL).anyTimes();
-    replayAll();
+    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
diff --git a/src/test/java/com/ericsson/gerrit/plugins/syncindex/HttpSessionTest.java b/src/test/java/com/ericsson/gerrit/plugins/syncindex/HttpSessionTest.java
index 183f542..f83b499 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/syncindex/HttpSessionTest.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/syncindex/HttpSessionTest.java
@@ -15,26 +15,26 @@
 package com.ericsson.gerrit.plugins.syncindex;
 
 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.delete;
+import static com.github.tomakehurst.wiremock.client.WireMock.post;
 import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo;
 import static com.google.common.truth.Truth.assertThat;
-import static org.easymock.EasyMock.expect;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 
 import com.ericsson.gerrit.plugins.syncindex.IndexResponseHandler.IndexResult;
 import com.github.tomakehurst.wiremock.http.Fault;
 import com.github.tomakehurst.wiremock.junit.WireMockRule;
 import com.github.tomakehurst.wiremock.stubbing.Scenario;
 
-import org.apache.http.impl.client.CloseableHttpClient;
-import org.easymock.EasyMockSupport;
+
 import org.junit.Before;
 import org.junit.ClassRule;
 import org.junit.Test;
 
 import java.net.SocketTimeoutException;
 
-public class HttpSessionTest extends EasyMockSupport {
+public class HttpSessionTest {
   private static final int MAX_TRIES = 3;
   private static final int RETRY_INTERVAL = 250;
   private static final int TIMEOUT = 500;
@@ -51,8 +51,6 @@
   private static final String RETRY_AT_ERROR = "Retry at error";
   private static final String RETRY_AT_DELAY = "Retry at delay";
 
-  private Configuration cfg;
-  private CloseableHttpClient httpClient;
   private HttpSession httpSession;
 
   @ClassRule
@@ -61,18 +59,17 @@
   @Before
   public void setUp() throws Exception {
     String url = "http://localhost:" + wireMockRule.port();
-    cfg = createMock(Configuration.class);
-    expect(cfg.getUrl()).andReturn(url).anyTimes();
-    expect(cfg.getUser()).andReturn("user");
-    expect(cfg.getPassword()).andReturn("pass");
-    expect(cfg.getMaxTries()).andReturn(MAX_TRIES).anyTimes();
-    expect(cfg.getConnectionTimeout()).andReturn(TIMEOUT).anyTimes();
-    expect(cfg.getSocketTimeout()).andReturn(TIMEOUT).anyTimes();
-    expect(cfg.getRetryInterval()).andReturn(RETRY_INTERVAL).anyTimes();
-    replayAll();
-    httpClient = new HttpClientProvider(cfg).get();
-    httpSession = new HttpSession(httpClient, url);
+    Configuration cfg = mock(Configuration.class);
+    when(cfg.getUrl()).thenReturn(url);
+    when(cfg.getUser()).thenReturn("user");
+    when(cfg.getPassword()).thenReturn("pass");
+    when(cfg.getMaxTries()).thenReturn(MAX_TRIES);
+    when(cfg.getConnectionTimeout()).thenReturn(TIMEOUT);
+    when(cfg.getSocketTimeout()).thenReturn(TIMEOUT);
+    when(cfg.getRetryInterval()).thenReturn(RETRY_INTERVAL);
 
+    httpSession =
+        new HttpSession(new HttpClientProvider(cfg).get(), url);
     wireMockRule.resetRequests();
   }
 
diff --git a/src/test/java/com/ericsson/gerrit/plugins/syncindex/IndexEventHandlerTest.java b/src/test/java/com/ericsson/gerrit/plugins/syncindex/IndexEventHandlerTest.java
index 4bc0eec..bb83dcc 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/syncindex/IndexEventHandlerTest.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/syncindex/IndexEventHandlerTest.java
@@ -15,34 +15,34 @@
 package com.ericsson.gerrit.plugins.syncindex;
 
 import static com.google.common.truth.Truth.assertThat;
-import static org.easymock.EasyMock.anyObject;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.expectLastCall;
-import static org.easymock.EasyMock.reset;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyZeroInteractions;
 
 import com.google.common.util.concurrent.MoreExecutors;
 import com.google.gerrit.reviewdb.client.Change;
-import com.google.gerrit.server.query.change.ChangeData;
+import com.google.gerrit.server.git.WorkQueue.Executor;
 import com.google.gwtorm.client.KeyUtil;
 import com.google.gwtorm.server.StandardKeyEncoder;
 
 import com.ericsson.gerrit.plugins.syncindex.IndexEventHandler.SyncIndexTask;
 
-import org.easymock.EasyMockSupport;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnitRunner;
 
-import java.util.concurrent.Executor;
-
-public class IndexEventHandlerTest extends EasyMockSupport {
+@RunWith(MockitoJUnitRunner.class)
+public class IndexEventHandlerTest {
   private static final String PLUGIN_NAME = "sync-index";
   private static final int CHANGE_ID = 1;
 
   private IndexEventHandler indexEventHandler;
-  private Executor poolMock;
-  private RestSession restClientMock;
-  private ChangeData cd;
+  @Mock
+  private RestSession restSessionMock;
   private Change.Id id;
 
   @BeforeClass
@@ -52,64 +52,50 @@
 
   @Before
   public void setUpMocks() {
-    cd = createNiceMock(ChangeData.class);
     id = Change.Id.parse(Integer.toString(CHANGE_ID));
-    expect(cd.getId()).andReturn(id).anyTimes();
-    poolMock = createMock(Executor.class);
-    poolMock.execute(anyObject(SyncIndexTask.class));
-    expectLastCall().andDelegateTo(MoreExecutors.directExecutor());
-    restClientMock = createMock(RestSession.class);
-    indexEventHandler =
-        new IndexEventHandler(poolMock, PLUGIN_NAME, restClientMock);
+    indexEventHandler = new IndexEventHandler(MoreExecutors.directExecutor(),
+        PLUGIN_NAME, restSessionMock);
   }
 
   @Test
   public void shouldIndexInRemoteOnChangeIndexedEvent() throws Exception {
-    expect(restClientMock.index(CHANGE_ID)).andReturn(true);
-    replayAll();
     indexEventHandler.onChangeIndexed(id.get());
-    verifyAll();
+    verify(restSessionMock).index(CHANGE_ID);
   }
 
   @Test
   public void shouldDeleteFromIndexInRemoteOnChangeDeletedEvent()
       throws Exception {
-    reset(cd);
-    expect(restClientMock.deleteFromIndex(CHANGE_ID)).andReturn(true);
-    replayAll();
     indexEventHandler.onChangeDeleted(id.get());
-    verifyAll();
+    verify(restSessionMock).deleteFromIndex(CHANGE_ID);
   }
 
   @Test
   public void shouldNotCallRemoteWhenEventIsForwarded() throws Exception {
-    reset(poolMock);
-    replayAll();
     Context.setForwardedEvent(true);
     indexEventHandler.onChangeIndexed(id.get());
     indexEventHandler.onChangeDeleted(id.get());
     Context.unsetForwardedEvent();
-    verifyAll();
+    verifyZeroInteractions(restSessionMock);
   }
 
   @Test
   public void duplicateEventOfAQueuedEventShouldGetDiscarded() {
-    reset(poolMock);
-    poolMock.execute(indexEventHandler.new SyncIndexTask(CHANGE_ID, false));
-    expectLastCall().once();
-    replayAll();
+    Executor poolMock = mock(Executor.class);
+    indexEventHandler =
+        new IndexEventHandler(poolMock, PLUGIN_NAME, restSessionMock);
     indexEventHandler.onChangeIndexed(id.get());
     indexEventHandler.onChangeIndexed(id.get());
-    verifyAll();
+    verify(poolMock, times(1))
+        .execute(indexEventHandler.new SyncIndexTask(CHANGE_ID, false));
   }
 
   @Test
   public void testSyncIndexTaskToString() throws Exception {
     SyncIndexTask syncIndexTask =
         indexEventHandler.new SyncIndexTask(CHANGE_ID, false);
-    assertThat(syncIndexTask.toString()).isEqualTo(
-        String.format("[%s] Index change %s in target instance", PLUGIN_NAME,
-            CHANGE_ID));
+    assertThat(syncIndexTask.toString()).isEqualTo(String.format(
+        "[%s] Index change %s in target instance", PLUGIN_NAME, CHANGE_ID));
   }
 
   @Test
diff --git a/src/test/java/com/ericsson/gerrit/plugins/syncindex/IndexResponseHandlerTest.java b/src/test/java/com/ericsson/gerrit/plugins/syncindex/IndexResponseHandlerTest.java
index 595cf7d..46488b7 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/syncindex/IndexResponseHandlerTest.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/syncindex/IndexResponseHandlerTest.java
@@ -15,20 +15,20 @@
 package com.ericsson.gerrit.plugins.syncindex;
 
 import static com.google.common.truth.Truth.assertThat;
-import static org.easymock.EasyMock.expect;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 
 import com.ericsson.gerrit.plugins.syncindex.IndexResponseHandler.IndexResult;
 
 import org.apache.http.HttpResponse;
 import org.apache.http.StatusLine;
 import org.apache.http.entity.StringEntity;
-import org.easymock.EasyMockSupport;
 import org.junit.Before;
 import org.junit.Test;
 
 import java.io.UnsupportedEncodingException;
 
-public class IndexResponseHandlerTest extends EasyMockSupport {
+public class IndexResponseHandlerTest {
   private static final int ERROR = 400;
   private static final int OK = 204;
   private static final String EMPTY_ENTITY = "";
@@ -59,12 +59,11 @@
 
   private HttpResponse setupMocks(int httpCode, String entity)
       throws UnsupportedEncodingException {
-    StatusLine status = createNiceMock(StatusLine.class);
-    expect(status.getStatusCode()).andReturn(httpCode).anyTimes();
-    HttpResponse response = createNiceMock(HttpResponse.class);
-    expect(response.getStatusLine()).andReturn(status).anyTimes();
-    expect(response.getEntity()).andReturn(new StringEntity(entity)).anyTimes();
-    replayAll();
+    StatusLine status = mock(StatusLine.class);
+    when(status.getStatusCode()).thenReturn(httpCode);
+    HttpResponse response = mock(HttpResponse.class);
+    when(response.getStatusLine()).thenReturn(status);
+    when(response.getEntity()).thenReturn(new StringEntity(entity));
     return response;
   }
 }
diff --git a/src/test/java/com/ericsson/gerrit/plugins/syncindex/ModuleTest.java b/src/test/java/com/ericsson/gerrit/plugins/syncindex/ModuleTest.java
index bfc42b4..f997afa 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/syncindex/ModuleTest.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/syncindex/ModuleTest.java
@@ -15,19 +15,18 @@
 package com.ericsson.gerrit.plugins.syncindex;
 
 import static com.google.common.truth.Truth.assertThat;
-import static org.easymock.EasyMock.expect;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 
-import org.easymock.EasyMockSupport;
 import org.junit.Test;
 
-public class ModuleTest extends EasyMockSupport {
+public class ModuleTest {
 
   @Test
   public void testSyncUrlProvider() {
-    Configuration configMock = createNiceMock(Configuration.class);
+    Configuration configMock = mock(Configuration.class);
     String expected = "someUrl";
-    expect(configMock.getUrl()).andReturn(expected);
-    replayAll();
+    when(configMock.getUrl()).thenReturn(expected);
     Module module = new Module();
     assertThat(module.syncUrl(configMock)).isEqualTo(expected);
   }
diff --git a/src/test/java/com/ericsson/gerrit/plugins/syncindex/RestSessionTest.java b/src/test/java/com/ericsson/gerrit/plugins/syncindex/RestSessionTest.java
index 31850c2..6f716c4 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/syncindex/RestSessionTest.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/syncindex/RestSessionTest.java
@@ -15,18 +15,19 @@
 package com.ericsson.gerrit.plugins.syncindex;
 
 import static com.google.common.truth.Truth.assertThat;
-import static org.easymock.EasyMock.expect;
+import static org.mockito.Mockito.doThrow;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 
 import com.google.common.base.Joiner;
 
 import com.ericsson.gerrit.plugins.syncindex.IndexResponseHandler.IndexResult;
 
-import org.easymock.EasyMockSupport;
 import org.junit.Test;
 
 import java.io.IOException;
 
-public class RestSessionTest extends EasyMockSupport {
+public class RestSessionTest {
   private static final int CHANGE_NUMBER = 1;
   private static final String DELETE_OP = "delete";
   private static final String INDEX_OP = "index";
@@ -81,22 +82,21 @@
       String msg, boolean exception) throws Exception {
     String request =
         Joiner.on("/").join("/plugins", PLUGIN_NAME, INDEX_OP, CHANGE_NUMBER);
-    HttpSession httpSession = createNiceMock(HttpSession.class);
+    HttpSession httpSession = mock(HttpSession.class);
     if (exception) {
       if (operation.equals(INDEX_OP)) {
-        expect(httpSession.post(request)).andThrow(new IOException());
+        doThrow(new IOException()).when(httpSession).post(request);
       } else {
-        expect(httpSession.delete(request)).andThrow(new IOException());
+        doThrow(new IOException()).when(httpSession).delete(request);
       }
     } else {
       IndexResult result = new IndexResult(isOperationSuccessful, msg);
       if (operation.equals(INDEX_OP)) {
-        expect(httpSession.post(request)).andReturn(result);
+        when(httpSession.post(request)).thenReturn(result);
       } else {
-        expect(httpSession.delete(request)).andReturn(result);
+        when(httpSession.delete(request)).thenReturn(result);
       }
     }
     restClient = new RestSession(httpSession, PLUGIN_NAME);
-    replayAll();
   }
 }
diff --git a/src/test/java/com/ericsson/gerrit/plugins/syncindex/SyncIndexExecutorProviderTest.java b/src/test/java/com/ericsson/gerrit/plugins/syncindex/SyncIndexExecutorProviderTest.java
index 665b10a..a48dd9b 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/syncindex/SyncIndexExecutorProviderTest.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/syncindex/SyncIndexExecutorProviderTest.java
@@ -15,28 +15,32 @@
 package com.ericsson.gerrit.plugins.syncindex;
 
 import static com.google.common.truth.Truth.assertThat;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.expectLastCall;
+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.easymock.EasyMockSupport;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnitRunner;
 
-public class SyncIndexExecutorProviderTest extends EasyMockSupport {
+@RunWith(MockitoJUnitRunner.class)
+public class SyncIndexExecutorProviderTest {
+  @Mock
   private WorkQueue.Executor executorMock;
   private SyncIndexExecutorProvider syncIndexExecutorProvider;
 
   @Before
   public void setUp() throws Exception {
-    executorMock = createStrictMock(WorkQueue.Executor.class);
-    WorkQueue workQueueMock = createNiceMock(WorkQueue.class);
-    expect(workQueueMock.createQueue(4, "Sync remote index")).andReturn(
-        executorMock);
-    Configuration configMock = createStrictMock(Configuration.class);
-    expect(configMock.getThreadPoolSize()).andReturn(4);
-    replayAll();
+    executorMock = mock(WorkQueue.Executor.class);
+    WorkQueue workQueueMock = mock(WorkQueue.class);
+    when(workQueueMock.createQueue(4, "Sync remote index"))
+        .thenReturn(executorMock);
+    Configuration configMock = mock(Configuration.class);
+    when(configMock.getThreadPoolSize()).thenReturn(4);
     syncIndexExecutorProvider =
         new SyncIndexExecutorProvider(workQueueMock, configMock);
   }
@@ -48,17 +52,11 @@
 
   @Test
   public void testStop() throws Exception {
-    resetAll();
-    executorMock.shutdown();
-    expectLastCall().once();
-    executorMock.unregisterWorkQueue();
-    expectLastCall().once();
-    replayAll();
-
     syncIndexExecutorProvider.start();
     assertThat(syncIndexExecutorProvider.get()).isEqualTo(executorMock);
     syncIndexExecutorProvider.stop();
-    verifyAll();
+    verify(executorMock).shutdown();
+    verify(executorMock).unregisterWorkQueue();
     assertThat(syncIndexExecutorProvider.get()).isNull();
   }
 }
diff --git a/src/test/java/com/ericsson/gerrit/plugins/syncindex/SyncIndexRestApiServletTest.java b/src/test/java/com/ericsson/gerrit/plugins/syncindex/SyncIndexRestApiServletTest.java
index 3522e77..7e8ac83 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/syncindex/SyncIndexRestApiServletTest.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/syncindex/SyncIndexRestApiServletTest.java
@@ -14,9 +14,15 @@
 
 package com.ericsson.gerrit.plugins.syncindex;
 
+import static javax.servlet.http.HttpServletResponse.SC_CONFLICT;
 import static javax.servlet.http.HttpServletResponse.SC_NOT_FOUND;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.expectLastCall;
+import static javax.servlet.http.HttpServletResponse.SC_NO_CONTENT;
+import static org.mockito.Mockito.doThrow;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyZeroInteractions;
+import static org.mockito.Mockito.when;
 
 import com.google.gerrit.common.TimeUtil;
 import com.google.gerrit.reviewdb.client.Change;
@@ -28,18 +34,20 @@
 import com.google.gwtorm.server.SchemaFactory;
 import com.google.gwtorm.server.StandardKeyEncoder;
 
-import org.easymock.EasyMockSupport;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnitRunner;
 
 import java.io.IOException;
 
-import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
-public class SyncIndexRestApiServletTest extends EasyMockSupport {
+@RunWith(MockitoJUnitRunner.class)
+public class SyncIndexRestApiServletTest {
   private static final boolean CHANGE_EXISTS = true;
   private static final boolean CHANGE_DOES_NOT_EXIST = false;
   private static final boolean DO_NOT_THROW_IO_EXCEPTION = false;
@@ -48,12 +56,19 @@
   private static final boolean THROW_ORM_EXCEPTION = true;
   private static final String CHANGE_NUMBER = "1";
 
+  @Mock
   private ChangeIndexer indexer;
+  @Mock
   private SchemaFactory<ReviewDb> schemaFactory;
-  private SyncIndexRestApiServlet syncIndexRestApiServlet;
+  @Mock
+  private ReviewDb db;
+  @Mock
   private HttpServletRequest req;
+  @Mock
   private HttpServletResponse rsp;
   private Change.Id id;
+  private Change change;
+  private SyncIndexRestApiServlet syncIndexRestApiServlet;
 
   @BeforeClass
   public static void setup() {
@@ -61,62 +76,67 @@
   }
 
   @Before
-  @SuppressWarnings("unchecked")
   public void setUpMocks() {
-    indexer = createNiceMock(ChangeIndexer.class);
-    schemaFactory = createNiceMock(SchemaFactory.class);
-    req = createNiceMock(HttpServletRequest.class);
-    rsp = createNiceMock(HttpServletResponse.class);
     syncIndexRestApiServlet =
         new SyncIndexRestApiServlet(indexer, schemaFactory);
     id = Change.Id.parse(CHANGE_NUMBER);
-
-    expect(req.getPathInfo()).andReturn("/index/" + CHANGE_NUMBER);
+    when(req.getPathInfo()).thenReturn("/index/" + CHANGE_NUMBER);
+    change = new Change(null, id, null, null, TimeUtil.nowTs());
   }
 
   @Test
   public void changeIsIndexed() throws Exception {
     setupPostMocks(CHANGE_EXISTS);
-    verifyPost();
+    syncIndexRestApiServlet.doPost(req, rsp);
+    verify(indexer, times(1)).index(db, change);
+    verify(rsp).setStatus(SC_NO_CONTENT);
   }
 
   @Test
   public void changeToIndexDoNotExist() throws Exception {
     setupPostMocks(CHANGE_DOES_NOT_EXIST);
-    verifyPost();
+    syncIndexRestApiServlet.doPost(req, rsp);
+    verify(indexer, times(1)).delete(id);
+    verify(rsp).setStatus(SC_NO_CONTENT);
   }
 
   @Test
   public void schemaThrowsExceptionWhenLookingUpForChange() throws Exception {
     setupPostMocks(CHANGE_EXISTS, THROW_ORM_EXCEPTION);
-    verifyPost();
+    syncIndexRestApiServlet.doPost(req, rsp);
+    verify(rsp).sendError(SC_NOT_FOUND, "Error trying to find a change \n");
   }
 
   @Test
   public void indexerThrowsIOExceptionTryingToIndexChange() throws Exception {
     setupPostMocks(CHANGE_EXISTS, DO_NOT_THROW_ORM_EXCEPTION,
         THROW_IO_EXCEPTION);
-    verifyPost();
+    syncIndexRestApiServlet.doPost(req, rsp);
+    verify(rsp).sendError(SC_CONFLICT, "io-error");
   }
 
   @Test
   public void changeIsDeletedFromIndex() throws Exception {
-    setupDeleteMocks(DO_NOT_THROW_IO_EXCEPTION);
-    verifyDelete();
+    syncIndexRestApiServlet.doDelete(req, rsp);
+    verify(indexer, times(1)).delete(id);
+    verify(rsp).setStatus(SC_NO_CONTENT);
   }
 
   @Test
   public void indexerThrowsExceptionTryingToDeleteChange() throws Exception {
-    setupDeleteMocks(THROW_IO_EXCEPTION);
-    verifyDelete();
+    doThrow(new IOException("io-error")).when(indexer).delete(id);
+    syncIndexRestApiServlet.doDelete(req, rsp);
+    verify(rsp).sendError(SC_CONFLICT, "io-error");
   }
 
   @Test
   public void sendErrorThrowsIOException() throws Exception {
-    rsp.sendError(SC_NOT_FOUND, "Error trying to find a change \n");
-    expectLastCall().andThrow(new IOException("someError"));
+    doThrow(new IOException("someError")).when(rsp).sendError(SC_NOT_FOUND,
+        "Error trying to find a change \n");
     setupPostMocks(CHANGE_EXISTS, THROW_ORM_EXCEPTION);
-    verifyPost();
+    syncIndexRestApiServlet.doPost(req, rsp);
+    verify(rsp).sendError(SC_NOT_FOUND, "Error trying to find a change \n");
+    verifyZeroInteractions(indexer);
   }
 
   private void setupPostMocks(boolean changeExist) throws Exception {
@@ -132,46 +152,19 @@
   private void setupPostMocks(boolean changeExist, boolean ormException,
       boolean ioException) throws OrmException, IOException {
     if (ormException) {
-      expect(schemaFactory.open()).andThrow(new OrmException(""));
+      doThrow(new OrmException("")).when(schemaFactory).open();
     } else {
-      ReviewDb db = createNiceMock(ReviewDb.class);
-      expect(schemaFactory.open()).andReturn(db);
-      ChangeAccess ca = createNiceMock(ChangeAccess.class);
-      expect(db.changes()).andReturn(ca);
-
+      when(schemaFactory.open()).thenReturn(db);
+      ChangeAccess ca = mock(ChangeAccess.class);
+      when(db.changes()).thenReturn(ca);
       if (changeExist) {
-        Change change = new Change(null, id, null, null, TimeUtil.nowTs());
-        expect(ca.get(id)).andReturn(change);
-        indexer.index(db, change);
+        when(ca.get(id)).thenReturn(change);
         if (ioException) {
-          expectLastCall().andThrow(new IOException());
-        } else {
-          expectLastCall().once();
+          doThrow(new IOException("io-error")).when(indexer).index(db, change);
         }
       } else {
-        expect(ca.get(id)).andReturn(null);
+        when(ca.get(id)).thenReturn(null);
       }
     }
-    replayAll();
-  }
-
-  private void verifyPost() throws IOException, ServletException {
-    syncIndexRestApiServlet.doPost(req, rsp);
-    verifyAll();
-  }
-
-  private void setupDeleteMocks(boolean exception) throws IOException {
-    indexer.delete(id);
-    if (exception) {
-      expectLastCall().andThrow(new IOException());
-    } else {
-      expectLastCall().once();
-    }
-    replayAll();
-  }
-
-  private void verifyDelete() throws IOException, ServletException {
-    syncIndexRestApiServlet.doDelete(req, rsp);
-    verifyAll();
   }
 }
diff --git a/tools/eclipse/BUILD b/tools/eclipse/BUILD
index 9c68d0f..cb18eda 100644
--- a/tools/eclipse/BUILD
+++ b/tools/eclipse/BUILD
@@ -8,6 +8,9 @@
   name = "classpath",
     runtime_deps = PLUGIN_DEPS + PLUGIN_TEST_DEPS + [
       "@wiremock//jar",
+      "@mockito//jar",
+      "@byte-buddy//jar",
+      "@objenesis//jar",
       "//:sync-index__plugin",
     ],
 )
@@ -16,6 +19,9 @@
   name = "main_classpath_collect",
   deps = PLUGIN_DEPS + PLUGIN_TEST_DEPS + [
     "@wiremock//jar",
+    "@mockito//jar",
+    "@byte-buddy//jar",
+    "@objenesis//jar",
     "//:sync-index__plugin"
   ],
 )