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 =