Merge branch 'stable-2.14' into stable-2.15
* stable-2.14:
Update bazlets to latest stable-2.14 to use 2.14.7 release API
Upgrade Mockito to 2.15.0
Format all Java files with google-java-format
SQLStoreTest: Fix Spotbugs warning about return value ignored
SQLEntryTest: Suppress 'unlikely argument type' warning
SQLStoreTest: Reduce visibility of tearDown method
Update bazlets to latest revision on stable-2.14
Change-Id: Id96f3c13f3e2fae4a3cd132e5c114d7a201d6bb0
diff --git a/WORKSPACE b/WORKSPACE
index 02c313d..2bf92ce 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -3,7 +3,7 @@
load("//:bazlets.bzl", "load_bazlets")
load_bazlets(
- commit = "4b46526533b52ef771ac9af6c29f542e7e875cf3",
+ commit = "92943361811e20b96f4c979992a0b384711c6456",
# local_path = "/home/<user>/projects/bazlets",
)
diff --git a/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventHandler.java b/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventHandler.java
index 85d3683..eab6f2f 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventHandler.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventHandler.java
@@ -18,15 +18,15 @@
import com.google.gerrit.server.events.Event;
import com.google.gerrit.server.events.ProjectEvent;
import com.google.inject.Inject;
-import java.util.concurrent.ScheduledThreadPoolExecutor;
+import java.util.concurrent.ScheduledExecutorService;
/** Listen to Events and store them into the EventStore */
class EventHandler implements EventListener {
private final EventStore store;
- private final ScheduledThreadPoolExecutor pool;
+ private final ScheduledExecutorService pool;
@Inject
- EventHandler(EventStore store, @EventPool ScheduledThreadPoolExecutor pool) {
+ EventHandler(EventStore store, @EventPool ScheduledExecutorService pool) {
this.store = store;
this.pool = pool;
}
diff --git a/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventModule.java b/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventModule.java
index 1c3ca27..c58d4ec 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventModule.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventModule.java
@@ -21,7 +21,7 @@
import com.google.inject.Provides;
import com.google.inject.Scopes;
import com.google.inject.internal.UniqueAnnotations;
-import java.util.concurrent.ScheduledThreadPoolExecutor;
+import java.util.concurrent.ScheduledExecutorService;
/** Configures handling for an event queue while providing its pool. */
public class EventModule extends AbstractModule {
@@ -36,7 +36,7 @@
@Provides
@EventPool
- ScheduledThreadPoolExecutor provideEventPool(EventQueue queue) {
+ ScheduledExecutorService provideEventPool(EventQueue queue) {
return queue.getPool();
}
}
diff --git a/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventPool.java b/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventPool.java
index daa50a1..2c7e962 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventPool.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventPool.java
@@ -19,7 +19,7 @@
import com.google.inject.BindingAnnotation;
import java.lang.annotation.Retention;
-/** Annotation applied to a ScheduledThreadPoolExecutor. */
+/** Annotation applied to a ScheduledExecutorService. */
@Retention(RUNTIME)
@BindingAnnotation
public @interface EventPool {}
diff --git a/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventQueue.java b/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventQueue.java
index c3f66c3..334976f 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventQueue.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventQueue.java
@@ -17,12 +17,12 @@
import com.google.gerrit.extensions.events.LifecycleListener;
import com.google.gerrit.server.git.WorkQueue;
import com.google.inject.Inject;
-import java.util.concurrent.ScheduledThreadPoolExecutor;
+import java.util.concurrent.ScheduledExecutorService;
/** A queue for events to store. */
public class EventQueue implements LifecycleListener {
private final WorkQueue workQueue;
- private WorkQueue.Executor pool;
+ private ScheduledExecutorService pool;
@Inject
EventQueue(WorkQueue workQueue) {
@@ -38,12 +38,11 @@
@Override
public void stop() {
if (pool != null) {
- pool.unregisterWorkQueue();
pool = null;
}
}
- ScheduledThreadPoolExecutor getPool() {
+ ScheduledExecutorService getPool() {
return this.pool;
}
}
diff --git a/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLStore.java b/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLStore.java
index 5735cb1..79745a5 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLStore.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLStore.java
@@ -24,11 +24,13 @@
import com.google.common.io.Files;
import com.google.gerrit.common.TimeUtil;
import com.google.gerrit.extensions.events.LifecycleListener;
+import com.google.gerrit.extensions.restapi.AuthException;
import com.google.gerrit.reviewdb.client.Project;
import com.google.gerrit.server.CurrentUser;
import com.google.gerrit.server.events.ProjectEvent;
-import com.google.gerrit.server.project.NoSuchProjectException;
-import com.google.gerrit.server.project.ProjectControl;
+import com.google.gerrit.server.permissions.PermissionBackend;
+import com.google.gerrit.server.permissions.PermissionBackendException;
+import com.google.gerrit.server.permissions.ProjectPermission;
import com.google.inject.Inject;
import com.google.inject.Provider;
import com.google.inject.Singleton;
@@ -42,8 +44,8 @@
import java.util.Collections;
import java.util.List;
import java.util.Map.Entry;
+import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
-import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -53,7 +55,6 @@
private static final Logger log = LoggerFactory.getLogger(SQLStore.class);
private static final String H2_DB_SUFFIX = ".h2.db";
- private final ProjectControl.GenericFactory projectControlFactory;
private final Provider<CurrentUser> userProvider;
private SQLClient eventsDb;
private SQLClient localEventsDb;
@@ -63,28 +64,29 @@
private final int connectTime;
private boolean online = true;
private boolean copyLocal;
- private final ScheduledThreadPoolExecutor pool;
+ private final ScheduledExecutorService pool;
+ private final PermissionBackend permissionBackend;
private ScheduledFuture<?> checkConnTask;
private Path localPath;
@Inject
SQLStore(
- ProjectControl.GenericFactory projectControlFactory,
Provider<CurrentUser> userProvider,
EventsLogConfig cfg,
@EventsDb SQLClient eventsDb,
@LocalEventsDb SQLClient localEventsDb,
- @EventPool ScheduledThreadPoolExecutor pool) {
+ @EventPool ScheduledExecutorService pool,
+ PermissionBackend permissionBackend) {
this.maxAge = cfg.getMaxAge();
this.maxTries = cfg.getMaxTries();
this.waitTime = cfg.getWaitTime();
this.connectTime = cfg.getConnectTime();
this.copyLocal = cfg.getCopyLocal();
- this.projectControlFactory = projectControlFactory;
this.userProvider = userProvider;
this.eventsDb = eventsDb;
this.localEventsDb = localEventsDb;
this.pool = pool;
+ this.permissionBackend = permissionBackend;
this.localPath = cfg.getLocalStorePath();
}
@@ -115,19 +117,15 @@
for (Entry<String, Collection<SQLEntry>> entry : eventsDb.getEvents(query).asMap().entrySet()) {
String projectName = entry.getKey();
try {
- if (projectControlFactory
- .controlFor(new Project.NameKey(projectName), userProvider.get())
- .isVisible()) {
- entries.addAll(entry.getValue());
- }
- } catch (NoSuchProjectException e) {
- log.warn(
- "Database contains a non-existing project, "
- + projectName
- + ", removing project from database");
- eventsDb.removeProjectEvents(projectName);
- } catch (IOException e) {
- log.warn("Cannot get project visibility info for " + projectName + " from cache", e);
+ permissionBackend
+ .user(userProvider)
+ .project(new Project.NameKey(projectName))
+ .check(ProjectPermission.ACCESS);
+ entries.addAll(entry.getValue());
+ } catch (AuthException e) {
+ // Ignore
+ } catch (PermissionBackendException e) {
+ log.warn("Cannot check project access permission", e);
}
}
return sortedEventsFromEntries(entries);
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 ca6325c..bdebed8 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/eventslog/EventHandlerTest.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/eventslog/EventHandlerTest.java
@@ -21,6 +21,7 @@
import com.google.gerrit.server.events.ChangeEvent;
import com.google.gerrit.server.events.Event;
+import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import org.junit.Before;
import org.junit.Test;
@@ -35,7 +36,7 @@
@Before
public void setUp() {
- ScheduledThreadPoolExecutor poolMock = new PoolMock();
+ ScheduledExecutorService poolMock = new PoolMock();
eventHandler = new EventHandler(storeMock, poolMock);
}
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 d62f95f..bb300f7 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
@@ -17,6 +17,7 @@
import static com.ericsson.gerrit.plugins.eventslog.sql.SQLTable.TABLE_NAME;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
@@ -28,14 +29,13 @@
import com.ericsson.gerrit.plugins.eventslog.ServiceUnavailableException;
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;
-import com.google.gerrit.server.project.ProjectControl;
+import com.google.gerrit.server.permissions.PermissionBackend;
+import com.google.gerrit.server.permissions.PermissionBackendException;
+import com.google.gerrit.server.permissions.ProjectPermission;
import com.google.gson.Gson;
import com.google.inject.Provider;
-import java.io.IOException;
import java.net.ConnectException;
import java.sql.Connection;
import java.sql.DriverManager;
@@ -44,9 +44,11 @@
import java.sql.Timestamp;
import java.util.Arrays;
import java.util.List;
+import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
+import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
@@ -67,77 +69,61 @@
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;
- @Mock private ProjectControl.GenericFactory pcFactoryMock;
@Mock private Provider<CurrentUser> userProviderMock;
@Mock private EventsLogConfig cfgMock;
+ @Mock private PermissionBackend permissionBackendMock;
+ @Mock private PermissionBackend.ForProject forProjectMock;
+ @Mock private PermissionBackend.WithUser withUserMock;
+
private SQLClient eventsDb;
private SQLClient localEventsDb;
private SQLStore store;
- private ScheduledThreadPoolExecutor poolMock;
-
+ private ScheduledExecutorService poolMock;
private Statement stat;
+ private MockEvent mockEvent;
@Rule public TemporaryFolder testFolder = new TemporaryFolder();
@Before
public void setUp() throws SQLException {
Connection conn = DriverManager.getConnection(TEST_URL + ";" + TEST_OPTIONS);
+ mockEvent = new MockEvent();
stat = conn.createStatement();
poolMock = new PoolMock();
when(cfgMock.getMaxAge()).thenReturn(5);
when(cfgMock.getLocalStorePath()).thenReturn(testFolder.getRoot().toPath());
}
- private void tearDown() throws Exception {
- stat.execute("DROP TABLE " + TABLE_NAME);
+ @After
+ public void tearDown() throws Exception {
+ stat.execute("DROP TABLE IF EXISTS " + TABLE_NAME);
store.stop();
}
- 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.start();
- }
-
- 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 = setUpMocks(PROJECT_VISIBLE_TO_USER);
+ when(permissionBackendMock.user(userProviderMock)).thenReturn(withUserMock);
+ when(withUserMock.project(any(Project.NameKey.class))).thenReturn(forProjectMock);
+ doNothing().when(forProjectMock).check(ProjectPermission.ACCESS);
+ setUpClient();
store.storeEvent(mockEvent);
List<String> events = store.queryChangeEvents(GENERIC_QUERY);
String json = new Gson().toJson(mockEvent);
assertThat(events).containsExactly(json).inOrder();
- tearDown();
}
@Test
public void storeThenQueryNotVisible() throws Exception {
- MockEvent mockEvent = setUpMocks(PROJECT_NOT_VISIBLE_TO_USER);
+ when(permissionBackendMock.user(userProviderMock)).thenReturn(withUserMock);
+ when(withUserMock.project(any(Project.NameKey.class))).thenReturn(forProjectMock);
+ doThrow(new PermissionBackendException(""))
+ .when(forProjectMock)
+ .check(ProjectPermission.ACCESS);
+ setUpClient();
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)
@@ -148,39 +134,20 @@
}
@Test
- public void notReturnEventOfNonExistingProject() throws Exception {
- MockEvent mockEvent = new MockEvent();
- 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);
- assertThat(events).isEmpty();
- tearDown();
- }
-
- @Test
public void notReturnEventWithNoVisibilityInfo() throws Exception {
- MockEvent mockEvent = new MockEvent();
- CurrentUser userMock = mock(CurrentUser.class);
- when(userProviderMock.get()).thenReturn(userMock);
- NameKey projectNameKey = mockEvent.getProjectNameKey();
- doThrow(new IOException()).when(pcFactoryMock).controlFor(projectNameKey, userMock);
+ when(permissionBackendMock.user(userProviderMock)).thenReturn(withUserMock);
+ when(withUserMock.project(any(Project.NameKey.class))).thenReturn(forProjectMock);
+ doThrow(new PermissionBackendException(""))
+ .when(forProjectMock)
+ .check(ProjectPermission.ACCESS);
setUpClient();
store.storeEvent(mockEvent);
List<String> events = store.queryChangeEvents(GENERIC_QUERY);
assertThat(events).isEmpty();
- tearDown();
}
@Test
public void retryOnConnectException() throws Exception {
- MockEvent mockEvent = new MockEvent();
when(cfgMock.getMaxTries()).thenReturn(3);
Throwable[] exceptions = new Throwable[3];
Arrays.fill(exceptions, new SQLException(new ConnectException()));
@@ -188,7 +155,8 @@
doThrow(exceptions).doNothing().when(eventsDb).storeEvent(mockEvent);
doThrow(exceptions).doNothing().when(eventsDb).queryOne();
store =
- new SQLStore(pcFactoryMock, userProviderMock, cfgMock, eventsDb, localEventsDb, poolMock);
+ new SQLStore(
+ userProviderMock, cfgMock, eventsDb, localEventsDb, poolMock, permissionBackendMock);
store.start();
store.storeEvent(mockEvent);
verify(eventsDb, times(3)).storeEvent(mockEvent);
@@ -197,7 +165,6 @@
@Test
public void retryOnMessage() throws Exception {
- MockEvent mockEvent = new MockEvent();
when(cfgMock.getMaxTries()).thenReturn(3);
Throwable[] exceptions = new Throwable[3];
Arrays.fill(exceptions, new SQLException(TERM_CONN_MSG));
@@ -205,7 +172,8 @@
doThrow(exceptions).doNothing().when(eventsDb).storeEvent(mockEvent);
doThrow(exceptions).doNothing().when(eventsDb).queryOne();
store =
- new SQLStore(pcFactoryMock, userProviderMock, cfgMock, eventsDb, localEventsDb, poolMock);
+ new SQLStore(
+ userProviderMock, cfgMock, eventsDb, localEventsDb, poolMock, permissionBackendMock);
store.start();
store.storeEvent(mockEvent);
verify(eventsDb, times(3)).storeEvent(mockEvent);
@@ -214,12 +182,12 @@
@Test
public void noRetryOnMessage() throws Exception {
- MockEvent mockEvent = new MockEvent();
when(cfgMock.getMaxTries()).thenReturn(3);
setUpClientMock();
doThrow(new SQLException(MSG)).when(eventsDb).storeEvent(mockEvent);
store =
- new SQLStore(pcFactoryMock, userProviderMock, cfgMock, eventsDb, localEventsDb, poolMock);
+ new SQLStore(
+ userProviderMock, cfgMock, eventsDb, localEventsDb, poolMock, permissionBackendMock);
store.start();
store.storeEvent(mockEvent);
verify(eventsDb, times(1)).storeEvent(mockEvent);
@@ -227,7 +195,6 @@
@Test
public void noRetryOnZeroMaxTries() throws Exception {
- MockEvent mockEvent = new MockEvent();
when(cfgMock.getMaxTries()).thenReturn(0);
Throwable[] exceptions = new Throwable[3];
Arrays.fill(exceptions, new SQLException(new ConnectException()));
@@ -235,7 +202,8 @@
doThrow(exceptions).doNothing().when(eventsDb).storeEvent(mockEvent);
doThrow(exceptions).doNothing().when(eventsDb).queryOne();
store =
- new SQLStore(pcFactoryMock, userProviderMock, cfgMock, eventsDb, localEventsDb, poolMock);
+ new SQLStore(
+ userProviderMock, cfgMock, eventsDb, localEventsDb, poolMock, permissionBackendMock);
store.start();
store.storeEvent(mockEvent);
verify(eventsDb, times(1)).storeEvent(mockEvent);
@@ -243,48 +211,41 @@
@Test(expected = ServiceUnavailableException.class)
public void throwSQLExceptionIfNotOnline() throws Exception {
- MockEvent mockEvent = new MockEvent();
setUpClientMock();
doThrow(new SQLException(new ConnectException())).when(eventsDb).createDBIfNotCreated();
doThrow(new SQLException()).when(eventsDb).queryOne();
store =
- new SQLStore(pcFactoryMock, userProviderMock, cfgMock, eventsDb, localEventsDb, poolMock);
+ new SQLStore(
+ userProviderMock, cfgMock, eventsDb, localEventsDb, poolMock, permissionBackendMock);
store.start();
store.storeEvent(mockEvent);
store.queryChangeEvents(GENERIC_QUERY);
}
@Test
- public void restoreFromLocalAndRemoveUnfoundProjectEvents() throws Exception {
+ public void restoreEventsFromLocalDb() throws Exception {
MockEvent mockEvent = new MockEvent();
MockEvent mockEvent2 = new MockEvent("proj");
- MockEvent mockEvent3 = new MockEvent("unfound");
-
- 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);
+ when(permissionBackendMock.user(userProviderMock)).thenReturn(withUserMock);
+ when(withUserMock.project(any(Project.NameKey.class))).thenReturn(forProjectMock);
+ doNothing().when(forProjectMock).check(ProjectPermission.ACCESS);
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);
+ new SQLStore(
+ userProviderMock, cfgMock, eventsDb, localEventsDb, poolMock, permissionBackendMock);
localEventsDb.createDBIfNotCreated();
localEventsDb.storeEvent(mockEvent);
localEventsDb.storeEvent(mockEvent2);
- localEventsDb.storeEvent(mockEvent3);
store.start();
+
List<String> events = store.queryChangeEvents(GENERIC_QUERY);
Gson gson = new Gson();
String json = gson.toJson(mockEvent);
String json2 = gson.toJson(mockEvent2);
assertThat(events).containsExactly(json, json2).inOrder();
- tearDown();
}
@Test
@@ -293,19 +254,20 @@
doThrow(new SQLException(new ConnectException())).when(eventsDb).createDBIfNotCreated();
doThrow(new SQLException()).when(eventsDb).queryOne();
store =
- new SQLStore(pcFactoryMock, userProviderMock, cfgMock, eventsDb, localEventsDb, poolMock);
+ new SQLStore(
+ userProviderMock, cfgMock, eventsDb, localEventsDb, poolMock, permissionBackendMock);
store.start();
verify(localEventsDb).createDBIfNotCreated();
}
@Test
public void storeLocalOffline() throws Exception {
- MockEvent mockEvent = new MockEvent();
setUpClientMock();
doThrow(new SQLException(new ConnectException())).when(eventsDb).createDBIfNotCreated();
doThrow(new SQLException()).when(eventsDb).queryOne();
store =
- new SQLStore(pcFactoryMock, userProviderMock, cfgMock, eventsDb, localEventsDb, poolMock);
+ new SQLStore(
+ userProviderMock, cfgMock, eventsDb, localEventsDb, poolMock, permissionBackendMock);
store.start();
store.storeEvent(mockEvent);
verify(localEventsDb).storeEvent(mockEvent);
@@ -313,18 +275,33 @@
@Test
public void storeLocalOfflineAfterNoRetry() throws Exception {
- MockEvent mockEvent = new MockEvent();
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);
+ new SQLStore(
+ userProviderMock, cfgMock, eventsDb, localEventsDb, poolMock, permissionBackendMock);
store.start();
store.storeEvent(mockEvent);
verify(localEventsDb).storeEvent(mockEvent);
}
+ 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(
+ userProviderMock, cfgMock, eventsDb, localEventsDb, poolMock, permissionBackendMock);
+ store.start();
+ }
+
+ private void setUpClientMock() throws SQLException {
+ eventsDb = mock(SQLClient.class);
+ localEventsDb = mock(SQLClient.class);
+ when(localEventsDb.dbExists()).thenReturn(true);
+ }
+
/**
* For this test we expect that if we can connect to main database, then we should come back
* online and try setting up again. We just want to make sure that restoreEventsFromLocal gets
@@ -337,7 +314,8 @@
when(localEventsDb.dbExists()).thenReturn(true);
when(localEventsDb.getAll()).thenReturn(ImmutableList.of(mock(SQLEntry.class)));
store =
- new SQLStore(pcFactoryMock, userProviderMock, cfgMock, eventsDb, localEventsDb, poolMock);
+ new SQLStore(
+ userProviderMock, cfgMock, eventsDb, localEventsDb, poolMock, permissionBackendMock);
store.start();
poolMock.scheduleWithFixedDelay(store.new CheckConnectionTask(), 0, 0, TimeUnit.MILLISECONDS);
verify(localEventsDb, times(2)).removeOldEvents(0);
@@ -354,7 +332,6 @@
}
private void checkConnectionAndRestore(boolean copy) throws Exception {
- MockEvent mockEvent = new MockEvent();
eventsDb = mock(SQLClient.class);
localEventsDb = new SQLClient(TEST_DRIVER, TEST_LOCAL_URL, TEST_OPTIONS);
localEventsDb.createDBIfNotCreated();
@@ -369,7 +346,8 @@
}
store =
- new SQLStore(pcFactoryMock, userProviderMock, cfgMock, eventsDb, localEventsDb, poolMock);
+ new SQLStore(
+ userProviderMock, cfgMock, eventsDb, localEventsDb, poolMock, permissionBackendMock);
store.start();
verify(eventsDb).queryOne();
verify(eventsDb).storeEvent(any(String.class), any(Timestamp.class), any(String.class));