Avoid mocking Guava caches in tests
Guava caches are annotated with @DoNotMock and
therefore mocking them in tests results in a
errorprone violation.
Some of the mock-intensive tests are not possible
anymore and other tests are adapted to use a real
cache object.
Bug: Issue 13263
Change-Id: I485b0018c81f778d0244ac513432db01e021c295
diff --git a/src/test/java/com/googlesource/gerrit/plugins/websession/broker/BrokerBasedWebSessionCacheCleanerTest.java b/src/test/java/com/googlesource/gerrit/plugins/websession/broker/BrokerBasedWebSessionCacheCleanerTest.java
index dbeed88..489e74e 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/websession/broker/BrokerBasedWebSessionCacheCleanerTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/websession/broker/BrokerBasedWebSessionCacheCleanerTest.java
@@ -18,7 +18,6 @@
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.ArgumentMatchers.isA;
import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -66,17 +65,6 @@
}
@Test
- public void testCleanupTaskRun() {
- BrokerBasedWebSessionCache cacheMock = mock(BrokerBasedWebSessionCache.class);
- CleanupTask task = new CleanupTask(cacheMock, null);
- int numberOfRuns = 5;
- for (int i = 0; i < numberOfRuns; i++) {
- task.run();
- }
- verify(cacheMock, times(numberOfRuns)).cleanUp();
- }
-
- @Test
public void testCleanupTaskIsScheduledOnStart() {
objectUnderTest.start();
verify(executorMock, times(1))
diff --git a/src/test/java/com/googlesource/gerrit/plugins/websession/broker/BrokerBasedWebSessionCacheTest.java b/src/test/java/com/googlesource/gerrit/plugins/websession/broker/BrokerBasedWebSessionCacheTest.java
index e6cb20e..2832405 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/websession/broker/BrokerBasedWebSessionCacheTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/websession/broker/BrokerBasedWebSessionCacheTest.java
@@ -17,20 +17,20 @@
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.anyString;
-import static org.mockito.Mockito.reset;
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.gerritforge.gerrit.eventbroker.BrokerApi;
import com.gerritforge.gerrit.eventbroker.EventMessage;
import com.gerritforge.gerrit.eventbroker.EventMessage.Header;
import com.google.common.cache.Cache;
-import com.google.common.collect.Maps;
+import com.google.common.cache.CacheBuilder;
import com.google.common.util.concurrent.MoreExecutors;
+import com.google.gerrit.entities.Account;
import com.google.gerrit.extensions.registration.DynamicItem;
import com.google.gerrit.httpd.WebSessionManager.Val;
+import com.google.gerrit.server.account.externalids.ExternalId;
import com.google.gerrit.server.config.PluginConfig;
import com.google.gerrit.server.config.PluginConfigFactory;
import com.google.gerrit.server.events.Event;
@@ -40,7 +40,6 @@
import com.googlesource.gerrit.plugins.websession.broker.util.TimeMachine;
import java.time.Instant;
import java.util.UUID;
-import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.ExecutorService;
import org.junit.Before;
import org.junit.Test;
@@ -55,6 +54,8 @@
private static final int DEFAULT_ACCOUNT_ID = 1000000;
private static final String KEY = "aSceprtma6B0qZ0hKxXHvQ5iyfUhCcFXxG";
+ private static Val VAL =
+ new Val(Account.id(1), 0, false, ExternalId.Key.parse("foo:bar"), 0, "", "");
private static final String PLUGIN_NAME = "websession-broker";
private byte[] emptyPayload = new byte[] {-84, -19, 0, 5, 112};
@@ -73,7 +74,7 @@
ExecutorService executorServce = MoreExecutors.newDirectExecutorService();
@Mock BrokerApi brokerApi;
- @Mock Cache<String, Val> cache;
+ Cache<String, Val> cache;
@Mock TimeMachine timeMachine;
@Mock PluginConfigFactory cfg;
@Mock PluginConfig pluginConfig;
@@ -85,6 +86,7 @@
@Before
public void setup() {
+ cache = CacheBuilder.newBuilder().build();
when(pluginConfig.getString("webSessionTopic", "gerrit_web_session"))
.thenReturn("gerrit_web_session");
when(cfg.getFromGerritConfig(PLUGIN_NAME)).thenReturn(pluginConfig);
@@ -133,50 +135,19 @@
objectUnderTest.processMessage(eventMessage);
- verify(cache, times(1)).put(anyString(), valCaptor.capture());
-
- assertThat(valCaptor.getValue()).isNotNull();
- Val val = valCaptor.getValue();
+ Val val = cache.getIfPresent(eventMessageKey(eventMessage));
+ assertThat(val).isNotNull();
assertThat(val.getAccountId().get()).isEqualTo(DEFAULT_ACCOUNT_ID);
}
@Test
public void shouldUpdateCacheWhenLogoutMessageReceived() {
EventMessage eventMessage = createEventMessage(emptyPayload, Operation.REMOVE);
+ cache.put(KEY, VAL);
objectUnderTest.processMessage(eventMessage);
- verify(cache, times(1)).invalidate(KEY);
- }
-
- @Test
- public void shouldSkipCacheUpdateWhenUnknownEventType() {
- Header header =
- new Header(
- UUID.fromString("7cb80dbe-65c4-4f2c-84de-580d98199d4a"),
- UUID.fromString("97711495-1013-414e-bfd2-44776787520d"));
- Event event = new Event("sample-event") {};
- EventMessage eventMessage = new EventMessage(header, event);
- objectUnderTest.processMessage(eventMessage);
-
- verifyZeroInteractions(cache);
- }
-
- @Test
- public void shouldSkipCacheUpdateWhenInvalidPayload() {
- EventMessage eventMessage = createEventMessage(new byte[] {1, 2, 3, 4}, Operation.ADD);
- objectUnderTest.processMessage(eventMessage);
-
- verifyZeroInteractions(cache);
- }
-
- @Test
- public void shouldSkipCacheUpdateWhenSessionExpired() {
- when(timeMachine.now()).thenReturn(Instant.MAX);
- EventMessage eventMessage = createEventMessage();
- objectUnderTest.processMessage(eventMessage);
-
- verifyZeroInteractions(cache);
+ assertThat(cache.getIfPresent(KEY)).isNull();
}
@Test
@@ -186,26 +157,20 @@
EventMessage eventMessage = createEventMessage();
objectUnderTest.processMessage(eventMessage);
- verify(cache, times(1)).put(anyString(), valCaptor.capture());
- assertThat(valCaptor.getValue()).isNotNull();
- ConcurrentMap<String, Val> cacheMap = Maps.newConcurrentMap();
- cacheMap.put(KEY, valCaptor.getValue());
- when(cache.asMap()).thenReturn(cacheMap);
+ Val val = cache.getIfPresent(eventMessageKey(eventMessage));
+ assertThat(val).isNotNull();
objectUnderTest.cleanUp();
- verify(cache, times(1)).invalidate(KEY);
+ assertThat(cache.getIfPresent(eventMessageKey(eventMessage))).isNull();
}
- @SuppressWarnings("unchecked")
private Val createVal(EventMessage message) {
- ArgumentCaptor<Val> valArgumentCaptor = ArgumentCaptor.forClass(Val.class);
+ WebSessionEvent event = (WebSessionEvent) message.getEvent();
objectUnderTest.processMessage(message);
- verify(cache).put(anyString(), valArgumentCaptor.capture());
- reset(cache);
- return valArgumentCaptor.getValue();
+ return cache.getIfPresent(event.key);
}
private EventMessage createEventMessage() {
@@ -213,6 +178,11 @@
return createEventMessage(defaultPayload, Operation.ADD);
}
+ private String eventMessageKey(EventMessage eventMessage) {
+ WebSessionEvent sessionEvent = (WebSessionEvent) eventMessage.getEvent();
+ return sessionEvent.key;
+ }
+
private EventMessage createEventMessage(byte[] payload, Operation operation) {
Header header =