Replace EasyMock with Mockito
Mockito provides a cleaner API and better error messages.
Change-Id: I97be5106f7749ef5c50f645e27bd3b7796339173
diff --git a/BUCK b/BUCK
index 749b4c8..7b55bc0 100644
--- a/BUCK
+++ b/BUCK
@@ -1,5 +1,6 @@
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/**/*'])
@@ -9,6 +10,7 @@
]
TEST_DEPS = GERRIT_PLUGIN_API + DEPS + GERRIT_TESTS + [
':events-log__plugin',
+ ':mockito',
]
gerrit_plugin(
@@ -41,3 +43,30 @@
name = 'events-log-sources',
srcs = SOURCES + RESOURCES,
)
+
+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/src/test/java/com/ericsson/gerrit/plugins/eventslog/EventHandlerTest.java b/src/test/java/com/ericsson/gerrit/plugins/eventslog/EventHandlerTest.java
index 8a1dbaa..68f1ea4 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/eventslog/EventHandlerTest.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/eventslog/EventHandlerTest.java
@@ -15,55 +15,50 @@
package com.ericsson.gerrit.plugins.eventslog;
import static com.google.common.truth.Truth.assertThat;
-import static org.easymock.EasyMock.expectLastCall;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyZeroInteractions;
-import com.google.gerrit.common.EventListener;
import com.google.gerrit.server.events.ChangeEvent;
import com.google.gerrit.server.events.Event;
-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;
import java.util.concurrent.ScheduledThreadPoolExecutor;
+@RunWith(MockitoJUnitRunner.class)
public class EventHandlerTest {
- private EasyMockSupport easyMock = new EasyMockSupport();
+ @Mock
private EventStore storeMock;
- private EventListener listener;
- private ScheduledThreadPoolExecutor poolMock;
+ private EventHandler eventHandler;
@Before
public void setUp() {
- storeMock = easyMock.createMock(EventStore.class);
+ ScheduledThreadPoolExecutor poolMock = new PoolMock();
+ eventHandler = new EventHandler(storeMock, poolMock);
}
@Test
public void passEventToStore() {
- ChangeEvent eventMock = easyMock.createNiceMock(ChangeEvent.class);
- easyMock.resetAll();
- storeMock.storeEvent(eventMock);
- expectLastCall().once();
- easyMock.replayAll();
- poolMock = new PoolMock(1);
- listener = new EventHandler(storeMock, poolMock);
- listener.onEvent(eventMock);
- easyMock.verifyAll();
+ ChangeEvent eventMock = mock(ChangeEvent.class);
+ eventHandler.onEvent(eventMock);
+ verify(storeMock).storeEvent(eventMock);
}
@Test
public void nonProjectEvent() {
- poolMock = easyMock.createMock(ScheduledThreadPoolExecutor.class);
- Event eventMock = easyMock.createMock(Event.class);
- easyMock.replayAll();
- listener = new EventHandler(storeMock, poolMock);
- listener.onEvent(eventMock);
- easyMock.verifyAll();
+ Event eventMock = mock(Event.class);
+ eventHandler.onEvent(eventMock);
+ verifyZeroInteractions(storeMock);
}
class PoolMock extends ScheduledThreadPoolExecutor {
- PoolMock(int corePoolSize) {
- super(corePoolSize);
+ PoolMock() {
+ super(1);
}
@Override
public void execute(Runnable command) {
diff --git a/src/test/java/com/ericsson/gerrit/plugins/eventslog/EventsLogConfigTest.java b/src/test/java/com/ericsson/gerrit/plugins/eventslog/EventsLogConfigTest.java
index d6ae725..a767793 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/eventslog/EventsLogConfigTest.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/eventslog/EventsLogConfigTest.java
@@ -13,6 +13,7 @@
// limitations under the License.
package com.ericsson.gerrit.plugins.eventslog;
+
import static com.ericsson.gerrit.plugins.eventslog.EventsLogConfig.CONFIG_CONN_TIME;
import static com.ericsson.gerrit.plugins.eventslog.EventsLogConfig.CONFIG_COPY_LOCAL;
import static com.ericsson.gerrit.plugins.eventslog.EventsLogConfig.CONFIG_DRIVER;
@@ -36,91 +37,108 @@
import static com.ericsson.gerrit.plugins.eventslog.EventsLogConfig.DEFAULT_URL;
import static com.ericsson.gerrit.plugins.eventslog.EventsLogConfig.DEFAULT_WAIT_TIME;
import static com.google.common.truth.Truth.assertThat;
-import static org.easymock.EasyMock.expect;
+import static org.mockito.Mockito.when;
import com.google.common.base.Joiner;
import com.google.gerrit.server.config.PluginConfig;
import com.google.gerrit.server.config.PluginConfigFactory;
import com.google.gerrit.server.config.SitePaths;
-import org.easymock.EasyMock;
-import org.easymock.EasyMockSupport;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnitRunner;
import java.io.IOException;
import java.nio.file.Files;
+@RunWith(MockitoJUnitRunner.class)
public class EventsLogConfigTest {
+ private static final String PLUGIN_NAME = "eventsLog";
+ private static final int CUSTOM_EVICT_IDLE_TIME = 10000;
+
private SitePaths site;
private EventsLogConfig config;
- private PluginConfigFactory cfgFactoryMock;
- private PluginConfig configMock;
- private EasyMockSupport easyMock;
private String defaultLocalStorePath;
private String localStorePath;
- private String [] urlOptions = new String[]{"a=b", "c=d"};
+ private String[] urlOptions = new String[] {"DB_CLOSE_DELAY=10"};
- private static final int CUSTOM_EVICT_IDLE_TIME = 10000;
+ @Mock
+ private PluginConfigFactory cfgFactoryMock;
+ @Mock
+ private PluginConfig configMock;
@Rule
public TemporaryFolder gerrit_site = new TemporaryFolder();
@Before
public void setUp() throws IOException {
- easyMock = new EasyMockSupport();
site = new SitePaths(gerrit_site.getRoot().toPath());
Files.createDirectories(site.etc_dir);
defaultLocalStorePath = site.site_path.toString() + "/events-db/";
- configMock = easyMock.createMock(PluginConfig.class);
- cfgFactoryMock = easyMock.createMock(PluginConfigFactory.class);
- expect(cfgFactoryMock.getFromGerritConfig(EasyMock.anyString(),
- EasyMock.anyBoolean())).andStubReturn(configMock);
+ when(cfgFactoryMock.getFromGerritConfig(PLUGIN_NAME, true))
+ .thenReturn(configMock);
}
private void setUpDefaults() {
- expect(configMock.getBoolean(CONFIG_COPY_LOCAL, DEFAULT_COPY_LOCAL)).andReturn(DEFAULT_COPY_LOCAL);
- expect(configMock.getInt(CONFIG_MAX_AGE, DEFAULT_MAX_AGE)).andReturn(DEFAULT_MAX_AGE);
- expect(configMock.getInt(CONFIG_MAX_TRIES, DEFAULT_MAX_TRIES)).andReturn(DEFAULT_MAX_TRIES);
- expect(configMock.getInt(CONFIG_RETURN_LIMIT, DEFAULT_RETURN_LIMIT)).andReturn(DEFAULT_RETURN_LIMIT);
- expect(configMock.getInt(CONFIG_CONN_TIME, DEFAULT_CONN_TIME)).andReturn(DEFAULT_CONN_TIME);
- expect(configMock.getInt(CONFIG_WAIT_TIME, DEFAULT_WAIT_TIME)).andReturn(DEFAULT_WAIT_TIME);
- expect(configMock.getString(CONFIG_DRIVER, DEFAULT_DRIVER)).andReturn(DEFAULT_DRIVER);
- expect(configMock.getString(CONFIG_URL, DEFAULT_URL)).andReturn(DEFAULT_URL);
- expect(configMock.getString(CONFIG_LOCAL_PATH, defaultLocalStorePath)).andReturn(defaultLocalStorePath);
- expect(configMock.getStringList(CONFIG_URL_OPTIONS)).andReturn(new String[0]);
- expect(configMock.getString(CONFIG_USERNAME)).andReturn(null);
- expect(configMock.getString(CONFIG_PASSWORD)).andReturn(null);
- expect(configMock.getInt(CONFIG_EVICT_IDLE_TIME, DEFAULT_EVICT_IDLE_TIME)).andReturn(DEFAULT_EVICT_IDLE_TIME);
-
- easyMock.replayAll();
+ when(configMock.getBoolean(CONFIG_COPY_LOCAL, DEFAULT_COPY_LOCAL))
+ .thenReturn(DEFAULT_COPY_LOCAL);
+ when(configMock.getInt(CONFIG_MAX_AGE, DEFAULT_MAX_AGE))
+ .thenReturn(DEFAULT_MAX_AGE);
+ when(configMock.getInt(CONFIG_MAX_TRIES, DEFAULT_MAX_TRIES))
+ .thenReturn(DEFAULT_MAX_TRIES);
+ when(configMock.getInt(CONFIG_RETURN_LIMIT, DEFAULT_RETURN_LIMIT))
+ .thenReturn(DEFAULT_RETURN_LIMIT);
+ when(configMock.getInt(CONFIG_CONN_TIME, DEFAULT_CONN_TIME))
+ .thenReturn(DEFAULT_CONN_TIME);
+ when(configMock.getInt(CONFIG_WAIT_TIME, DEFAULT_WAIT_TIME))
+ .thenReturn(DEFAULT_WAIT_TIME);
+ when(configMock.getString(CONFIG_DRIVER, DEFAULT_DRIVER))
+ .thenReturn(DEFAULT_DRIVER);
+ when(configMock.getString(CONFIG_URL, DEFAULT_URL)).thenReturn(DEFAULT_URL);
+ when(configMock.getString(CONFIG_LOCAL_PATH, defaultLocalStorePath))
+ .thenReturn(defaultLocalStorePath);
+ when(configMock.getStringList(CONFIG_URL_OPTIONS))
+ .thenReturn(new String[] {});
+ when(configMock.getString(CONFIG_USERNAME)).thenReturn(null);
+ when(configMock.getString(CONFIG_PASSWORD)).thenReturn(null);
+ when(configMock.getInt(CONFIG_EVICT_IDLE_TIME, DEFAULT_EVICT_IDLE_TIME))
+ .thenReturn(DEFAULT_EVICT_IDLE_TIME);
}
private void setUpCustom() {
localStorePath = "~/gerrit/events-db/";
- expect(configMock.getBoolean(CONFIG_COPY_LOCAL, DEFAULT_COPY_LOCAL)).andReturn(true);
- expect(configMock.getInt(CONFIG_MAX_AGE, DEFAULT_MAX_AGE)).andReturn(20);
- expect(configMock.getInt(CONFIG_MAX_TRIES, DEFAULT_MAX_TRIES)).andReturn(5);
- expect(configMock.getInt(CONFIG_RETURN_LIMIT, DEFAULT_RETURN_LIMIT)).andReturn(10000);
- expect(configMock.getInt(CONFIG_CONN_TIME, DEFAULT_CONN_TIME)).andReturn(5000);
- expect(configMock.getInt(CONFIG_WAIT_TIME, DEFAULT_WAIT_TIME)).andReturn(5000);
- expect(configMock.getString(CONFIG_DRIVER, DEFAULT_DRIVER)).andReturn("org.h2.Driver2");
- expect(configMock.getString(CONFIG_URL, DEFAULT_URL)).andReturn("jdbc:h2:~/gerrit/db");
- expect(configMock.getString(CONFIG_LOCAL_PATH, defaultLocalStorePath)).andReturn(localStorePath);
- expect(configMock.getStringList(CONFIG_URL_OPTIONS)).andReturn(urlOptions);
- expect(configMock.getString(CONFIG_USERNAME)).andReturn("testUsername");
- expect(configMock.getString(CONFIG_PASSWORD)).andReturn("testPassword");
- expect(configMock.getInt(CONFIG_EVICT_IDLE_TIME, DEFAULT_EVICT_IDLE_TIME)).andReturn(CUSTOM_EVICT_IDLE_TIME);
+ when(configMock.getBoolean(CONFIG_COPY_LOCAL, DEFAULT_COPY_LOCAL))
+ .thenReturn(true);
+ when(configMock.getInt(CONFIG_MAX_AGE, DEFAULT_MAX_AGE)).thenReturn(20);
+ when(configMock.getInt(CONFIG_MAX_TRIES, DEFAULT_MAX_TRIES)).thenReturn(5);
+ when(configMock.getInt(CONFIG_RETURN_LIMIT, DEFAULT_RETURN_LIMIT))
+ .thenReturn(10000);
+ when(configMock.getInt(CONFIG_CONN_TIME, DEFAULT_CONN_TIME))
+ .thenReturn(5000);
+ when(configMock.getInt(CONFIG_WAIT_TIME, DEFAULT_WAIT_TIME))
+ .thenReturn(5000);
+ when(configMock.getString(CONFIG_DRIVER, DEFAULT_DRIVER))
+ .thenReturn("org.h2.Driver2");
+ when(configMock.getString(CONFIG_URL, DEFAULT_URL))
+ .thenReturn("jdbc:h2:~/gerrit/db");
+ when(configMock.getString(CONFIG_LOCAL_PATH, defaultLocalStorePath))
+ .thenReturn(localStorePath);
+ when(configMock.getStringList(CONFIG_URL_OPTIONS)).thenReturn(urlOptions);
+ when(configMock.getString(CONFIG_USERNAME)).thenReturn("testUsername");
+ when(configMock.getString(CONFIG_PASSWORD)).thenReturn("testPassword");
+ when(configMock.getInt(CONFIG_EVICT_IDLE_TIME, DEFAULT_EVICT_IDLE_TIME))
+ .thenReturn(CUSTOM_EVICT_IDLE_TIME);
- easyMock.replayAll();
}
@Test
public void shouldReturnDefaultsWhenMissingConfig() {
setUpDefaults();
- config = new EventsLogConfig(cfgFactoryMock, site, null);
+ config = new EventsLogConfig(cfgFactoryMock, site, PLUGIN_NAME);
assertThat(config.getCopyLocal()).isFalse();
assertThat(config.getMaxAge()).isEqualTo(30);
assertThat(config.getMaxTries()).isEqualTo(3);
@@ -128,7 +146,8 @@
assertThat(config.getConnectTime()).isEqualTo(1000);
assertThat(config.getWaitTime()).isEqualTo(1000);
assertThat(config.getLocalStoreDriver()).isEqualTo(DEFAULT_DRIVER);
- assertThat(config.getLocalStorePath().toString() + "/").isEqualTo(defaultLocalStorePath);
+ assertThat(config.getLocalStorePath().toString() + "/")
+ .isEqualTo(defaultLocalStorePath);
assertThat(config.getStoreDriver()).isEqualTo(DEFAULT_DRIVER);
assertThat(config.getStoreUrl()).isEqualTo(DEFAULT_URL);
assertThat(config.getUrlOptions()).isEmpty();
@@ -140,7 +159,7 @@
@Test
public void shouldReturnConfigValues() {
setUpCustom();
- config = new EventsLogConfig(cfgFactoryMock, site, null);
+ config = new EventsLogConfig(cfgFactoryMock, site, PLUGIN_NAME);
assertThat(config.getCopyLocal()).isTrue();
assertThat(config.getMaxAge()).isEqualTo(20);
assertThat(config.getMaxTries()).isEqualTo(5);
@@ -148,10 +167,12 @@
assertThat(config.getConnectTime()).isEqualTo(5000);
assertThat(config.getWaitTime()).isEqualTo(5000);
assertThat(config.getLocalStoreDriver()).isEqualTo(DEFAULT_DRIVER);
- assertThat(config.getLocalStorePath().toString() + "/").isEqualTo(localStorePath);
+ assertThat(config.getLocalStorePath().toString() + "/")
+ .isEqualTo(localStorePath);
assertThat(config.getStoreDriver()).isEqualTo("org.h2.Driver2");
assertThat(config.getStoreUrl()).isEqualTo("jdbc:h2:~/gerrit/db");
- assertThat(config.getUrlOptions()).isEqualTo(Joiner.on(";").join(urlOptions));
+ assertThat(config.getUrlOptions())
+ .isEqualTo(Joiner.on(";").join(urlOptions));
assertThat(config.getStoreUsername()).isEqualTo("testUsername");
assertThat(config.getStorePassword()).isEqualTo("testPassword");
assertThat(config.getEvictIdleTime()).isEqualTo(CUSTOM_EVICT_IDLE_TIME);
diff --git a/src/test/java/com/ericsson/gerrit/plugins/eventslog/EventsLogIT.java b/src/test/java/com/ericsson/gerrit/plugins/eventslog/EventsLogIT.java
index 9bb2834..45391c0 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/eventslog/EventsLogIT.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/eventslog/EventsLogIT.java
@@ -16,23 +16,15 @@
import static com.google.common.truth.Truth.assertThat;
+import com.google.gerrit.acceptance.GerritConfig;
import com.google.gerrit.acceptance.PluginDaemonTest;
-import org.eclipse.jgit.errors.ConfigInvalidException;
import org.junit.Test;
-import java.io.IOException;
-
public class EventsLogIT extends PluginDaemonTest {
- @Override
- protected void beforeTestServerStarts() throws IOException,
- ConfigInvalidException {
- // otherwise default ~/db not deleted after => corrupted next test/run
- setPluginConfigString("storeUrl", "jdbc:h2:" + testSite + "/db/");
- }
-
@Test
+ @GerritConfig(name = "plugin.events-log.storeUrl", value = "jdbc:h2:mem:db")
public void getEventsShallBeConsistent() throws Exception {
String events = "/plugins/events-log/events/?t1=1970-01-01;t2=2999-01-01";
String change1 = "refs/changes/01/1/1";
diff --git a/src/test/java/com/ericsson/gerrit/plugins/eventslog/EventsRestApiServletTest.java b/src/test/java/com/ericsson/gerrit/plugins/eventslog/EventsRestApiServletTest.java
index 3af1bfa..1dcb53a 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/eventslog/EventsRestApiServletTest.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/eventslog/EventsRestApiServletTest.java
@@ -15,143 +15,112 @@
package com.ericsson.gerrit.plugins.eventslog;
import static com.google.common.truth.Truth.assertThat;
-import static org.easymock.EasyMock.newCapture;
-import static org.easymock.EasyMock.capture;
-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.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+import com.google.gerrit.server.CurrentUser;
+import com.google.inject.Provider;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Captor;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnitRunner;
import java.io.PrintWriter;
import java.util.ArrayList;
-import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-import org.easymock.Capture;
-import org.easymock.EasyMock;
-import org.easymock.EasyMockSupport;
-import org.junit.Before;
-import org.junit.Test;
-
-import com.google.gerrit.server.CurrentUser;
-import com.google.inject.Provider;
-
-import com.ericsson.gerrit.plugins.eventslog.EventsRestApiServlet;
-import com.ericsson.gerrit.plugins.eventslog.EventStore;
-import com.ericsson.gerrit.plugins.eventslog.MalformedQueryException;
-import com.ericsson.gerrit.plugins.eventslog.QueryMaker;
-
+@RunWith(MockitoJUnitRunner.class)
public class EventsRestApiServletTest {
- private EasyMockSupport easyMock;
+ private static final String RANDOM_QUERY = "random query";
+
+ @Mock
private EventStore storeMock;
+ @Mock
private QueryMaker queryMakerMock;
+ @Mock
private Provider<CurrentUser> userProviderMock;
+ @Mock
private CurrentUser userMock;
+ @Mock
private HttpServletRequest reqMock;
+ @Mock
private HttpServletResponse rspMock;
+ @Captor
+ private ArgumentCaptor<Map<String, String>> captor;
+
private EventsRestApiServlet eventServlet;
- @SuppressWarnings("unchecked")
@Before
public void setUp() {
- easyMock = new EasyMockSupport();
- storeMock = easyMock.createNiceMock(EventStore.class);
- queryMakerMock = easyMock.createNiceMock(QueryMaker.class);
- userProviderMock = easyMock.createNiceMock(Provider.class);
- userMock = easyMock.createNiceMock(CurrentUser.class);
- reqMock = easyMock.createNiceMock(HttpServletRequest.class);
- rspMock = easyMock.createNiceMock(HttpServletResponse.class);
- easyMock.replayAll();
- eventServlet = new EventsRestApiServlet(storeMock, queryMakerMock,
- userProviderMock);
+ eventServlet =
+ new EventsRestApiServlet(storeMock, queryMakerMock, userProviderMock);
+
+ when(userProviderMock.get()).thenReturn(userMock);
+ when(userMock.isIdentifiedUser()).thenReturn(true);
}
@Test
public void queryStringSplitting() throws Exception {
- String queryStringMock = "a=1;b=2";
- Map<String, String> paramMock = new HashMap<>();
- paramMock.put("a", "1");
- paramMock.put("b", "2");
- Capture<Map<String, String>> catcher = newCapture();
- easyMock.resetAll();
- expect(userProviderMock.get()).andStubReturn(userMock);
- expect(userMock.isIdentifiedUser()).andStubReturn(true);
- expect(reqMock.getQueryString()).andStubReturn(queryStringMock);
- expect(queryMakerMock.formQueryFromRequestParameters(capture(catcher)))
- .andStubReturn("random query");
- expect(storeMock.queryChangeEvents("random query")).andStubReturn(
- new ArrayList<String>());
- easyMock.replayAll();
+ when(reqMock.getQueryString()).thenReturn("a=1;b=2");
+ when(queryMakerMock.formQueryFromRequestParameters(captor.capture()))
+ .thenReturn(RANDOM_QUERY);
+ when(storeMock.queryChangeEvents(RANDOM_QUERY))
+ .thenReturn(new ArrayList<String>());
eventServlet.doGet(reqMock, rspMock);
- Map<String, String> capturedParam = catcher.getValue();
- assertThat(paramMock).isEqualTo(capturedParam);
+ assertThat(ImmutableMap.of("a", "1", "b", "2"))
+ .isEqualTo(captor.getValue());
}
@Test
public void badQueryString() throws Exception {
- String queryStringMock = "a;b";
- Capture<Map<String, String>> catcher = newCapture();
- easyMock.resetAll();
- expect(userProviderMock.get()).andStubReturn(userMock);
- expect(userMock.isIdentifiedUser()).andStubReturn(true);
- expect(reqMock.getQueryString()).andStubReturn(queryStringMock);
- expect(queryMakerMock.formQueryFromRequestParameters(capture(catcher)))
- .andStubReturn("random query");
- expect(storeMock.queryChangeEvents("random query")).andStubReturn(
- new ArrayList<String>());
- easyMock.replayAll();
+ when(reqMock.getQueryString()).thenReturn("a;b");
+ when(queryMakerMock.formQueryFromRequestParameters(captor.capture()))
+ .thenReturn(RANDOM_QUERY);
+ when(storeMock.queryChangeEvents(RANDOM_QUERY))
+ .thenReturn(new ArrayList<String>());
eventServlet.doGet(reqMock, rspMock);
- Map<String, String> capturedParam = catcher.getValue();
- assertThat(capturedParam).isEmpty();
+ assertThat(captor.getValue()).isEmpty();
}
@Test
public void testUnAuthorizedCode() throws Exception {
- easyMock.resetAll();
- expect(userProviderMock.get()).andStubReturn(userMock);
- expect(userMock.isIdentifiedUser()).andStubReturn(false);
- rspMock.sendError(HttpServletResponse.SC_UNAUTHORIZED);
- expectLastCall().once();
- easyMock.replayAll();
+ when(userMock.isIdentifiedUser()).thenReturn(false);
eventServlet.doGet(reqMock, rspMock);
- easyMock.verifyAll();
+ verify(rspMock).sendError(HttpServletResponse.SC_UNAUTHORIZED);
}
@Test
public void testBadRequestCode() throws Exception {
- easyMock.resetAll();
- expect(userProviderMock.get()).andStubReturn(userMock);
- expect(userMock.isIdentifiedUser()).andStubReturn(true);
- expect(queryMakerMock.formQueryFromRequestParameters(
- EasyMock.<Map<String, String>> anyObject())).andStubThrow(
- new MalformedQueryException());
- rspMock.sendError(HttpServletResponse.SC_BAD_REQUEST);
- expectLastCall().once();
- easyMock.replayAll();
+ when(reqMock.getQueryString()).thenReturn("@@");
+ Map<String, String> emptyParams = ImmutableMap.of();
+ when(queryMakerMock.formQueryFromRequestParameters(emptyParams))
+ .thenThrow(new MalformedQueryException());
eventServlet.doGet(reqMock, rspMock);
- easyMock.verifyAll();
+ verify(rspMock).sendError(HttpServletResponse.SC_BAD_REQUEST);
}
@Test
public void queryDatabaseAndWrite() throws Exception {
- PrintWriter outMock = easyMock.createMock(PrintWriter.class);
- List<String> listMock = new ArrayList<>();
- listMock.add("event one");
- listMock.add("event two");
- easyMock.resetAll();
- expect(userProviderMock.get()).andStubReturn(userMock);
- expect(userMock.isIdentifiedUser()).andStubReturn(true);
- expect(rspMock.getWriter()).andStubReturn(outMock);
- expect(storeMock.queryChangeEvents(EasyMock.anyString())).andReturn(
- listMock);
- outMock.write(listMock.get(0) + "\n");
- expectLastCall().once();
- outMock.write(listMock.get(1) + "\n");
- expectLastCall().once();
- easyMock.replayAll();
+ when(reqMock.getQueryString()).thenReturn("@@");
+ PrintWriter outMock = mock(PrintWriter.class);
+ List<String> listMock = ImmutableList.of("event one", "event two");
+ when(rspMock.getWriter()).thenReturn(outMock);
+ when(queryMakerMock.formQueryFromRequestParameters(captor.capture()))
+ .thenReturn(RANDOM_QUERY);
+ when(storeMock.queryChangeEvents(RANDOM_QUERY)).thenReturn(listMock);
eventServlet.doGet(reqMock, rspMock);
- easyMock.verifyAll();
+ verify(outMock).write(listMock.get(0) + "\n");
+ verify(outMock).write(listMock.get(1) + "\n");
}
}
diff --git a/src/test/java/com/ericsson/gerrit/plugins/eventslog/sql/QueryMakerTest.java b/src/test/java/com/ericsson/gerrit/plugins/eventslog/sql/QueryMakerTest.java
index 9d606df..4094b23 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/eventslog/sql/QueryMakerTest.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/eventslog/sql/QueryMakerTest.java
@@ -15,106 +15,98 @@
package com.ericsson.gerrit.plugins.eventslog.sql;
import static com.google.common.truth.Truth.assertThat;
-import static org.easymock.EasyMock.expect;
+import static org.mockito.Mockito.when;
+
+import com.google.common.collect.ImmutableMap;
import com.ericsson.gerrit.plugins.eventslog.EventsLogConfig;
import com.ericsson.gerrit.plugins.eventslog.MalformedQueryException;
import com.ericsson.gerrit.plugins.eventslog.QueryMaker;
-import com.ericsson.gerrit.plugins.eventslog.sql.SQLQueryMaker;
-import org.easymock.EasyMockSupport;
-import org.junit.BeforeClass;
+import org.junit.Before;
import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnitRunner;
-import java.util.HashMap;
-import java.util.Map;
-
+@RunWith(MockitoJUnitRunner.class)
public class QueryMakerTest {
- private static QueryMaker queryMaker;
- private static String defaultQuery;
+ private static final String T2 = "t2";
+ private static final String T1 = "t1";
+ private static final String OLD_DATE = "2013-10-10 10:00:00";
+ private static final String NEW_DATE = "2014-10-10 10:00:00";
- @BeforeClass
- public static void setUp() throws Exception {
- EasyMockSupport easyMock = new EasyMockSupport();
- EventsLogConfig cfgMock = easyMock.createMock(EventsLogConfig.class);
- expect(cfgMock.getReturnLimit()).andReturn(10);
- easyMock.replayAll();
+ private QueryMaker queryMaker;
+ private String defaultQuery;
+
+ @Mock
+ private EventsLogConfig cfgMock;
+
+ private String query;
+
+ @Before
+ public void setUp() throws Exception {
+ when(cfgMock.getReturnLimit()).thenReturn(10);
queryMaker = new SQLQueryMaker(cfgMock);
defaultQuery = queryMaker.getDefaultQuery();
}
@Test
- public void returnDefaultforNullMap() throws Exception {
- assertThat(queryMaker.formQueryFromRequestParameters(null)).isEqualTo(defaultQuery);
+ public void returnDefaultQueryforNullMap() throws Exception {
+ assertThat(queryMaker.formQueryFromRequestParameters(null))
+ .isEqualTo(defaultQuery);
}
@Test(expected = MalformedQueryException.class)
public void badParameters() throws Exception {
- Map<String, String> params = new HashMap<>();
- params.put("t1", "bad format");
- params.put("t2", "bad format");
- queryMaker.formQueryFromRequestParameters(params);
+ queryMaker.formQueryFromRequestParameters(
+ ImmutableMap.of(T1, "13/13/32", T2, "14/10/10"));
}
@Test
public void dateOneOnly() throws Exception {
- Map<String, String> params = new HashMap<>();
- String oldDate = "1990-10-10 10:00:00";
- params.put("t1", oldDate);
- String query = queryMaker.formQueryFromRequestParameters(params);
- assertThat(query).contains(String.format("'%s' and ", oldDate));
+ query = queryMaker
+ .formQueryFromRequestParameters(ImmutableMap.of(T1, OLD_DATE));
+ assertThat(query).contains(String.format("'%s' and ", OLD_DATE));
}
@Test
public void dateTwoOnly() throws Exception {
- Map<String, String> params = new HashMap<>();
- String oldDate = "1990-10-10 10:00:00";
- params.put("t2", oldDate);
- String query = queryMaker.formQueryFromRequestParameters(params);
- assertThat(query).contains(String.format("'%s' and ", oldDate));
+ query = queryMaker
+ .formQueryFromRequestParameters(ImmutableMap.of(T2, OLD_DATE));
+ assertThat(query).contains(String.format("'%s' and ", OLD_DATE));
}
@Test(expected = MalformedQueryException.class)
public void noDate() throws Exception {
- Map<String, String> params = new HashMap<>();
- queryMaker.formQueryFromRequestParameters(params);
+ queryMaker
+ .formQueryFromRequestParameters(ImmutableMap.<String, String> of());
}
@Test
public void dateOrdering() throws Exception {
- String query;
- Map<String, String> params = new HashMap<>();
- String olderDate = "2013-10-10 10:00:00";
- String newerDate = "2014-10-10 10:00:00";
+ query = queryMaker.formQueryFromRequestParameters(
+ ImmutableMap.of(T1, OLD_DATE, T2, NEW_DATE));
+ assertThat(query)
+ .contains(String.format("'%s' and '%s'", OLD_DATE, NEW_DATE));
- params.put("t1", olderDate);
- params.put("t2", newerDate);
- query = queryMaker.formQueryFromRequestParameters(params);
- assertThat(query).contains(String.format("'%s' and '%s'",
- olderDate, newerDate));
-
- params.put("t1", newerDate);
- params.put("t2", olderDate);
- query = queryMaker.formQueryFromRequestParameters(params);
- assertThat(query).contains(String.format("'%s' and '%s'",
- olderDate, newerDate));
+ query = queryMaker.formQueryFromRequestParameters(
+ ImmutableMap.of(T1, NEW_DATE, T2, OLD_DATE));
+ assertThat(query)
+ .contains(String.format("'%s' and '%s'", OLD_DATE, NEW_DATE));
}
@Test
public void bothDateTime() throws Exception {
- Map<String, String> params = new HashMap<>();
- params.put("t1", "2013-10-10 10:00:00");
- params.put("t2", "2014-10-10 10:00:00");
- String query = queryMaker.formQueryFromRequestParameters(params);
+ query = queryMaker.formQueryFromRequestParameters(
+ ImmutableMap.of(T1, OLD_DATE, T2, NEW_DATE));
assertThat(query).isNotEqualTo(defaultQuery);
}
@Test
public void onlyDateNoTime() throws Exception {
- Map<String, String> params = new HashMap<>();
- params.put("t1", "2013-10-10");
- params.put("t2", "2014-10-10");
- String query = queryMaker.formQueryFromRequestParameters(params);
+ String query = queryMaker.formQueryFromRequestParameters(
+ ImmutableMap.of(T1, "2013-10-10", T2, "2014-10-10"));
assertThat(query).isNotEqualTo(defaultQuery);
}
}
diff --git a/src/test/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLStoreTest.java b/src/test/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLStoreTest.java
index d67ebd2..e506e26 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLStoreTest.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLStoreTest.java
@@ -16,10 +16,16 @@
import static com.ericsson.gerrit.plugins.eventslog.sql.SQLTable.TABLE_NAME;
import static com.google.common.truth.Truth.assertThat;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.expectLastCall;
+import static org.mockito.ArgumentMatchers.any;
+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.when;
+import com.google.common.collect.ImmutableList;
import com.google.gerrit.reviewdb.client.Project;
+import com.google.gerrit.reviewdb.client.Project.NameKey;
import com.google.gerrit.server.CurrentUser;
import com.google.gerrit.server.events.ProjectEvent;
import com.google.gerrit.server.project.NoSuchProjectException;
@@ -30,16 +36,14 @@
import com.ericsson.gerrit.plugins.eventslog.EventsLogConfig;
import com.ericsson.gerrit.plugins.eventslog.MalformedQueryException;
import com.ericsson.gerrit.plugins.eventslog.ServiceUnavailableException;
-import com.ericsson.gerrit.plugins.eventslog.sql.SQLClient;
-import com.ericsson.gerrit.plugins.eventslog.sql.SQLEntry;
-import com.ericsson.gerrit.plugins.eventslog.sql.SQLStore;
-import org.easymock.EasyMock;
-import org.easymock.EasyMockSupport;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnitRunner;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -50,52 +54,50 @@
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Timestamp;
-import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
+@RunWith(MockitoJUnitRunner.class)
public class SQLStoreTest {
private static final Logger log = LoggerFactory.getLogger(SQLStoreTest.class);
private static final String TEST_URL = "jdbc:h2:mem:" + TABLE_NAME;
- private static final String TEST_LOCAL_URL = "jdbc:h2:mem:test:";
+ private static final String TEST_LOCAL_URL = "jdbc:h2:mem:test";
private static final String TEST_DRIVER = "org.h2.Driver";
- private static final String TEST_OPTIONS = "DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false";
+ private static final String TEST_OPTIONS =
+ "DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false";
private static final String TERM_CONN_MSG = "terminating connection";
private static final String MSG = "message";
private static final String GENERIC_QUERY = "SELECT * FROM " + TABLE_NAME;
+ private static final boolean PROJECT_VISIBLE_TO_USER = true;
+ private static final boolean PROJECT_NOT_VISIBLE_TO_USER = false;
- private EasyMockSupport easyMock;
+ @Mock
private ProjectControl.GenericFactory pcFactoryMock;
+ @Mock
private Provider<CurrentUser> userProviderMock;
+ @Mock
private EventsLogConfig cfgMock;
private SQLClient eventsDb;
private SQLClient localEventsDb;
private SQLStore store;
private ScheduledThreadPoolExecutor poolMock;
- private String path = TEST_URL + ";" + TEST_OPTIONS;
- private Connection conn;
private Statement stat;
- private List<SQLEntry> results;
@Rule
public TemporaryFolder testFolder = new TemporaryFolder();
- @SuppressWarnings("unchecked")
@Before
public void setUp() throws SQLException {
- conn = DriverManager.getConnection(path);
+ Connection conn =
+ DriverManager.getConnection(TEST_URL + ";" + TEST_OPTIONS);
stat = conn.createStatement();
- results = new ArrayList<>();
- poolMock = new PoolMock(1);
- easyMock = new EasyMockSupport();
- pcFactoryMock = easyMock.createNiceMock(ProjectControl.GenericFactory.class);
- userProviderMock = easyMock.createNiceMock(Provider.class);
- cfgMock = easyMock.createNiceMock(EventsLogConfig.class);
- expect(cfgMock.getMaxAge()).andReturn(5);
- expect(cfgMock.getLocalStorePath()).andReturn(testFolder.getRoot().toPath()).atLeastOnce();
+ poolMock = new PoolMock();
+ when(cfgMock.getMaxAge()).thenReturn(5);
+ when(cfgMock.getLocalStorePath()).thenReturn(testFolder.getRoot().toPath());
}
public void tearDown() throws Exception {
@@ -106,76 +108,65 @@
private void setUpClient() {
eventsDb = new SQLClient(TEST_DRIVER, TEST_URL, TEST_OPTIONS);
localEventsDb = new SQLClient(TEST_DRIVER, TEST_LOCAL_URL, TEST_OPTIONS);
- store =
- new SQLStore(pcFactoryMock, userProviderMock, cfgMock, eventsDb,
- localEventsDb, poolMock);
+ store = new SQLStore(pcFactoryMock, userProviderMock, cfgMock, eventsDb,
+ localEventsDb, poolMock);
store.start();
}
- private void setUpClientMock(boolean reset) throws SQLException {
- eventsDb = easyMock.createNiceMock(SQLClient.class);
- localEventsDb = easyMock.createNiceMock(SQLClient.class);
- expect(localEventsDb.dbExists()).andReturn(true).anyTimes();
- if (reset) {
- easyMock.resetAll();
- }
+ private void setUpClientMock() throws SQLException {
+ eventsDb = mock(SQLClient.class);
+ localEventsDb = mock(SQLClient.class);
+ when(localEventsDb.dbExists()).thenReturn(true);
}
@Test
public void storeThenQueryVisible() throws Exception {
- MockEvent mockEvent = new MockEvent();
- ProjectControl pcMock = easyMock.createNiceMock(ProjectControl.class);
- CurrentUser userMock = easyMock.createNiceMock(CurrentUser.class);
- expect(userProviderMock.get()).andStubReturn(userMock);
- expect(pcFactoryMock.controlFor(mockEvent.getProjectNameKey(), userMock))
- .andStubReturn(pcMock);
- expect(pcMock.isVisible()).andStubReturn(true);
- easyMock.replayAll();
- setUpClient();
+ MockEvent mockEvent = setUpMocks(PROJECT_VISIBLE_TO_USER);
store.storeEvent(mockEvent);
List<String> events = store.queryChangeEvents(GENERIC_QUERY);
- Gson gson = new Gson();
- String json = gson.toJson(mockEvent);
+ String json = new Gson().toJson(mockEvent);
assertThat(events).containsExactly(json);
tearDown();
}
@Test
public void storeThenQueryNotVisible() throws Exception {
- MockEvent mockEvent = new MockEvent();
- ProjectControl pcMock = easyMock.createNiceMock(ProjectControl.class);
- CurrentUser userMock = easyMock.createNiceMock(CurrentUser.class);
- expect(userProviderMock.get()).andStubReturn(userMock);
- expect(pcFactoryMock.controlFor(mockEvent.getProjectNameKey(), userMock))
- .andStubReturn(pcMock);
- expect(pcMock.isVisible()).andStubReturn(false);
- easyMock.replayAll();
- setUpClient();
+ MockEvent mockEvent = setUpMocks(PROJECT_NOT_VISIBLE_TO_USER);
store.storeEvent(mockEvent);
List<String> events = store.queryChangeEvents(GENERIC_QUERY);
assertThat(events).isEmpty();
tearDown();
}
+ private MockEvent setUpMocks(boolean isVisible)
+ throws NoSuchProjectException, IOException {
+ MockEvent mockEvent = new MockEvent();
+ ProjectControl pcMock = mock(ProjectControl.class);
+ CurrentUser userMock = mock(CurrentUser.class);
+ when(userProviderMock.get()).thenReturn(userMock);
+ when(pcFactoryMock.controlFor(mockEvent.getProjectNameKey(), userMock))
+ .thenReturn(pcMock);
+ when(pcMock.isVisible()).thenReturn(isVisible);
+ setUpClient();
+ return mockEvent;
+ }
+
@Test(expected = MalformedQueryException.class)
public void throwBadRequestTriggerOnBadQuery() throws Exception {
- easyMock.replayAll();
setUpClient();
String badQuery = "bad query";
store.queryChangeEvents(badQuery);
- easyMock.verifyAll();
}
@Test
public void notReturnEventOfNonExistingProject() throws Exception {
MockEvent mockEvent = new MockEvent();
- Project.NameKey projectMock = easyMock.createMock(Project.NameKey.class);
- expect(projectMock.get()).andStubReturn(" ");
- expect(
- pcFactoryMock.controlFor(EasyMock.anyObject(Project.NameKey.class),
- EasyMock.anyObject(CurrentUser.class)))
- .andThrow(new NoSuchProjectException(projectMock));
- easyMock.replayAll();
+ Project.NameKey projectMock = mock(Project.NameKey.class);
+ CurrentUser userMock = mock(CurrentUser.class);
+ when(userProviderMock.get()).thenReturn(userMock);
+ NameKey projectNameKey = mockEvent.getProjectNameKey();
+ doThrow(new NoSuchProjectException(projectMock)).when(pcFactoryMock)
+ .controlFor(projectNameKey, userMock);
setUpClient();
store.storeEvent(mockEvent);
List<String> events = store.queryChangeEvents(GENERIC_QUERY);
@@ -186,12 +177,11 @@
@Test
public void notReturnEventWithNoVisibilityInfo() throws Exception {
MockEvent mockEvent = new MockEvent();
- Project.NameKey projectMock = easyMock.createMock(Project.NameKey.class);
- expect(projectMock.get()).andStubReturn(" ");
- expect(
- pcFactoryMock.controlFor(EasyMock.anyObject(Project.NameKey.class),
- EasyMock.anyObject(CurrentUser.class))).andThrow(new IOException());
- easyMock.replayAll();
+ CurrentUser userMock = mock(CurrentUser.class);
+ when(userProviderMock.get()).thenReturn(userMock);
+ NameKey projectNameKey = mockEvent.getProjectNameKey();
+ doThrow(new IOException()).when(pcFactoryMock).controlFor(projectNameKey,
+ userMock);
setUpClient();
store.storeEvent(mockEvent);
List<String> events = store.queryChangeEvents(GENERIC_QUERY);
@@ -202,93 +192,78 @@
@Test
public void retryOnConnectException() throws Exception {
MockEvent mockEvent = new MockEvent();
- setUpClientMock(false);
- EasyMock.reset(eventsDb, localEventsDb);
- expect(cfgMock.getMaxTries()).andReturn(3).once();
- eventsDb.storeEvent(mockEvent);
- expectLastCall().andThrow(new SQLException(new ConnectException()))
- .times(3);
- expect(localEventsDb.getAll()).andStubReturn(results);
- easyMock.replayAll();
- store =
- new SQLStore(pcFactoryMock, userProviderMock, cfgMock, eventsDb,
- localEventsDb, poolMock);
+ when(cfgMock.getMaxTries()).thenReturn(3);
+ Throwable[] exceptions = new Throwable[3];
+ Arrays.fill(exceptions, new SQLException(new ConnectException()));
+ setUpClientMock();
+ doThrow(exceptions).doNothing().when(eventsDb).storeEvent(mockEvent);
+ doThrow(exceptions).doNothing().when(eventsDb).queryOne();
+ store = new SQLStore(pcFactoryMock, userProviderMock, cfgMock, eventsDb,
+ localEventsDb, poolMock);
store.start();
-
store.storeEvent(mockEvent);
- easyMock.verifyAll();
+ verify(eventsDb, times(3)).storeEvent(mockEvent);
+ verify(localEventsDb).storeEvent(mockEvent);
}
@Test
public void retryOnMessage() throws Exception {
MockEvent mockEvent = new MockEvent();
- setUpClientMock(false);
- expect(cfgMock.getMaxTries()).andReturn(3).once();
- eventsDb.storeEvent(mockEvent);
- expectLastCall().andThrow(new SQLException(TERM_CONN_MSG)).times(3);
- expect(localEventsDb.getAll()).andStubReturn(results);
- easyMock.replayAll();
- store =
- new SQLStore(pcFactoryMock, userProviderMock, cfgMock, eventsDb,
- localEventsDb, poolMock);
+ when(cfgMock.getMaxTries()).thenReturn(3);
+ Throwable[] exceptions = new Throwable[3];
+ Arrays.fill(exceptions, new SQLException(TERM_CONN_MSG));
+ setUpClientMock();
+ doThrow(exceptions).doNothing().when(eventsDb).storeEvent(mockEvent);
+ doThrow(exceptions).doNothing().when(eventsDb).queryOne();
+ store = new SQLStore(pcFactoryMock, userProviderMock, cfgMock, eventsDb,
+ localEventsDb, poolMock);
store.start();
-
store.storeEvent(mockEvent);
- easyMock.verifyAll();
+ verify(eventsDb, times(3)).storeEvent(mockEvent);
+ verify(localEventsDb).storeEvent(mockEvent);
}
@Test
public void noRetryOnMessage() throws Exception {
MockEvent mockEvent = new MockEvent();
- setUpClientMock(false);
- expect(cfgMock.getMaxTries()).andReturn(3).once();
- eventsDb.storeEvent(mockEvent);
- expectLastCall().andThrow(new SQLException(MSG)).once();
- expect(localEventsDb.getAll()).andReturn(results);
- easyMock.replayAll();
- store =
- new SQLStore(pcFactoryMock, userProviderMock, cfgMock, eventsDb,
- localEventsDb, poolMock);
+ when(cfgMock.getMaxTries()).thenReturn(3);
+ setUpClientMock();
+ doThrow(new SQLException(MSG)).when(eventsDb).storeEvent(mockEvent);
+ store = new SQLStore(pcFactoryMock, userProviderMock, cfgMock, eventsDb,
+ localEventsDb, poolMock);
store.start();
-
store.storeEvent(mockEvent);
- easyMock.verifyAll();
+ verify(eventsDb, times(1)).storeEvent(mockEvent);
}
@Test
public void noRetryOnZeroMaxTries() throws Exception {
MockEvent mockEvent = new MockEvent();
- setUpClientMock(false);
- expect(cfgMock.getMaxTries()).andReturn(0).once();
- eventsDb.storeEvent(mockEvent);
- expectLastCall().andThrow(new SQLException(new ConnectException())).once();
- expect(localEventsDb.getAll()).andStubReturn(results);
- easyMock.replayAll();
- store =
- new SQLStore(pcFactoryMock, userProviderMock, cfgMock, eventsDb,
- localEventsDb, poolMock);
+ when(cfgMock.getMaxTries()).thenReturn(0);
+ Throwable[] exceptions = new Throwable[3];
+ Arrays.fill(exceptions, new SQLException(new ConnectException()));
+ setUpClientMock();
+ doThrow(exceptions).doNothing().when(eventsDb).storeEvent(mockEvent);
+ doThrow(exceptions).doNothing().when(eventsDb).queryOne();
+ store = new SQLStore(pcFactoryMock, userProviderMock, cfgMock, eventsDb,
+ localEventsDb, poolMock);
store.start();
-
store.storeEvent(mockEvent);
- easyMock.verifyAll();
+ verify(eventsDb, times(1)).storeEvent(mockEvent);
}
- @Test (expected = ServiceUnavailableException.class)
+ @Test(expected = ServiceUnavailableException.class)
public void throwSQLExceptionIfNotOnline() throws Exception {
MockEvent mockEvent = new MockEvent();
- setUpClientMock(true);
- eventsDb.createDBIfNotCreated();
- expectLastCall().andThrow(new SQLException(new ConnectException())).once();
- eventsDb.queryOne();
- expectLastCall().andThrow(new SQLException());
- easyMock.replayAll();
- store =
- new SQLStore(pcFactoryMock, userProviderMock, cfgMock, eventsDb,
- localEventsDb, poolMock);
+ setUpClientMock();
+ doThrow(new SQLException(new ConnectException())).when(eventsDb)
+ .createDBIfNotCreated();
+ doThrow(new SQLException()).when(eventsDb).queryOne();
+ store = new SQLStore(pcFactoryMock, userProviderMock, cfgMock, eventsDb,
+ localEventsDb, poolMock);
store.start();
store.storeEvent(mockEvent);
store.queryChangeEvents(GENERIC_QUERY);
- easyMock.verifyAll();
}
@Test
@@ -297,26 +272,22 @@
MockEvent mockEvent2 = new MockEvent("proj");
MockEvent mockEvent3 = new MockEvent("unfound");
- ProjectControl pc = easyMock.createNiceMock(ProjectControl.class);
- NoSuchProjectException e =
- easyMock.createNiceMock(NoSuchProjectException.class);
- expect(
- pcFactoryMock.controlFor(EasyMock.eq(mockEvent.getProjectNameKey()),
- EasyMock.anyObject(CurrentUser.class))).andReturn(pc).once();
- expect(
- pcFactoryMock.controlFor(EasyMock.eq(mockEvent2.getProjectNameKey()),
- EasyMock.anyObject(CurrentUser.class))).andReturn(pc).once();
- expect(pc.isVisible()).andReturn(true).times(2);
- expect(
- pcFactoryMock.controlFor(EasyMock.eq(mockEvent3.getProjectNameKey()),
- EasyMock.anyObject(CurrentUser.class))).andThrow(e);
- easyMock.replayAll();
+ ProjectControl pc = mock(ProjectControl.class);
+ NoSuchProjectException e = mock(NoSuchProjectException.class);
+ CurrentUser userMock = mock(CurrentUser.class);
+ when(userProviderMock.get()).thenReturn(userMock);
+ when(pcFactoryMock.controlFor((mockEvent.getProjectNameKey()), userMock))
+ .thenReturn(pc);
+ when(pcFactoryMock.controlFor((mockEvent2.getProjectNameKey()), userMock))
+ .thenReturn(pc);
+ when(pc.isVisible()).thenReturn(true);
+ doThrow(e).when(pcFactoryMock).controlFor((mockEvent3.getProjectNameKey()),
+ userMock);
eventsDb = new SQLClient(TEST_DRIVER, TEST_URL, TEST_OPTIONS);
localEventsDb = new SQLClient(TEST_DRIVER, TEST_LOCAL_URL, TEST_OPTIONS);
- store =
- new SQLStore(pcFactoryMock, userProviderMock, cfgMock, eventsDb,
- localEventsDb, poolMock);
+ store = new SQLStore(pcFactoryMock, userProviderMock, cfgMock, eventsDb,
+ localEventsDb, poolMock);
localEventsDb.createDBIfNotCreated();
localEventsDb.storeEvent(mockEvent);
@@ -328,61 +299,48 @@
String json = gson.toJson(mockEvent);
String json2 = gson.toJson(mockEvent2);
assertThat(events).containsExactly(json, json2);
- easyMock.verifyAll();
tearDown();
}
@Test
public void offlineUponStart() throws Exception {
- setUpClientMock(true);
- eventsDb.createDBIfNotCreated();
- expectLastCall().andThrow(new SQLException(new ConnectException())).once();
- eventsDb.queryOne();
- expectLastCall().andThrow(new SQLException());
- easyMock.replayAll();
- store =
- new SQLStore(pcFactoryMock, userProviderMock, cfgMock, eventsDb,
- localEventsDb, poolMock);
+ setUpClientMock();
+ doThrow(new SQLException(new ConnectException())).when(eventsDb)
+ .createDBIfNotCreated();
+ doThrow(new SQLException()).when(eventsDb).queryOne();
+ store = new SQLStore(pcFactoryMock, userProviderMock, cfgMock, eventsDb,
+ localEventsDb, poolMock);
store.start();
- easyMock.verifyAll();
+ verify(localEventsDb).createDBIfNotCreated();
}
@Test
public void storeLocalOffline() throws Exception {
MockEvent mockEvent = new MockEvent();
- setUpClientMock(true);
- eventsDb.createDBIfNotCreated();
- expectLastCall().andThrow(new SQLException(new ConnectException())).once();
- localEventsDb.storeEvent(mockEvent);
- expectLastCall().once();
- eventsDb.queryOne();
- expectLastCall().andThrow(new SQLException());
- easyMock.replayAll();
- store =
- new SQLStore(pcFactoryMock, userProviderMock, cfgMock, eventsDb,
- localEventsDb, poolMock);
+ setUpClientMock();
+ doThrow(new SQLException(new ConnectException())).when(eventsDb)
+ .createDBIfNotCreated();
+ doThrow(new SQLException()).when(eventsDb).queryOne();
+ store = new SQLStore(pcFactoryMock, userProviderMock, cfgMock, eventsDb,
+ localEventsDb, poolMock);
store.start();
-
store.storeEvent(mockEvent);
- easyMock.verifyAll();
+ verify(localEventsDb).storeEvent(mockEvent);
}
@Test
public void storeLocalOfflineAfterNoRetry() throws Exception {
MockEvent mockEvent = new MockEvent();
- setUpClientMock(false);
- expect(cfgMock.getMaxTries()).andReturn(0).once();
- eventsDb.storeEvent(mockEvent);
- expectLastCall().andThrow(new SQLException(new ConnectException())).once();
- expect(localEventsDb.getAll()).andStubReturn(results);
- easyMock.replayAll();
- store =
- new SQLStore(pcFactoryMock, userProviderMock, cfgMock, eventsDb,
- localEventsDb, poolMock);
+ setUpClientMock();
+ when(cfgMock.getMaxTries()).thenReturn(0);
+ doThrow(new SQLException(new ConnectException())).when(eventsDb)
+ .createDBIfNotCreated();
+ doThrow(new SQLException()).when(eventsDb).queryOne();
+ store = new SQLStore(pcFactoryMock, userProviderMock, cfgMock, eventsDb,
+ localEventsDb, poolMock);
store.start();
-
store.storeEvent(mockEvent);
- easyMock.verifyAll();
+ verify(localEventsDb).storeEvent(mockEvent);
}
/**
@@ -394,17 +352,16 @@
@Test
public void testConnectionTask() throws Exception {
eventsDb = new SQLClient(TEST_DRIVER, TEST_URL, TEST_OPTIONS);
- localEventsDb = easyMock.createMock(SQLClient.class);
- expect(localEventsDb.dbExists()).andReturn(true).once();
- expect(localEventsDb.getAll()).andReturn(new ArrayList<SQLEntry>());
- easyMock.replayAll();
- store =
- new SQLStore(pcFactoryMock, userProviderMock, cfgMock, eventsDb,
- localEventsDb, poolMock);
- eventsDb.createDBIfNotCreated();
+ localEventsDb = mock(SQLClient.class);
+ when(localEventsDb.dbExists()).thenReturn(true);
+ when(localEventsDb.getAll())
+ .thenReturn(ImmutableList.of(mock(SQLEntry.class)));
+ store = new SQLStore(pcFactoryMock, userProviderMock, cfgMock, eventsDb,
+ localEventsDb, poolMock);
+ store.start();
poolMock.scheduleWithFixedDelay(store.new CheckConnectionTask(), 0, 0,
TimeUnit.MILLISECONDS);
- easyMock.verifyAll();
+ verify(localEventsDb, times(2)).removeOldEvents(0);
}
@Test
@@ -419,34 +376,25 @@
private void checkConnectionAndRestore(boolean copy) throws Exception {
MockEvent mockEvent = new MockEvent();
- eventsDb = easyMock.createNiceMock(SQLClient.class);
+ eventsDb = mock(SQLClient.class);
localEventsDb = new SQLClient(TEST_DRIVER, TEST_LOCAL_URL, TEST_OPTIONS);
localEventsDb.createDBIfNotCreated();
localEventsDb.storeEvent(mockEvent);
- eventsDb.createDBIfNotCreated();
- expectLastCall().andThrow(new SQLException(new ConnectException())).once();
- eventsDb.queryOne();
- expectLastCall().once();
- eventsDb.storeEvent(EasyMock.anyString(),
- EasyMock.anyObject(Timestamp.class), EasyMock.anyString());
- expectLastCall().once();
+ doThrow(new SQLException(new ConnectException())).doNothing().when(eventsDb)
+ .createDBIfNotCreated();
if (copy) {
- testCopyLocal();
+ when(cfgMock.getCopyLocal()).thenReturn(true);
}
- easyMock.replayAll();
- store =
- new SQLStore(pcFactoryMock, userProviderMock, cfgMock, eventsDb,
- localEventsDb, poolMock);
+ store = new SQLStore(pcFactoryMock, userProviderMock, cfgMock, eventsDb,
+ localEventsDb, poolMock);
store.start();
+ verify(eventsDb).queryOne();
+ verify(eventsDb).storeEvent(any(String.class), any(Timestamp.class),
+ any(String.class));
List<SQLEntry> entries = localEventsDb.getAll();
assertThat(entries).isEmpty();
- easyMock.verifyAll();
- }
-
- private void testCopyLocal() {
- expect(cfgMock.getCopyLocal()).andReturn(true).once();
}
public class MockEvent extends ProjectEvent {
@@ -468,8 +416,8 @@
}
class PoolMock extends ScheduledThreadPoolExecutor {
- PoolMock(int corePoolSize) {
- super(corePoolSize);
+ PoolMock() {
+ super(1);
}
@Override