Adjust tests to reflect real life situation
For PROJECTS cache CacheEvictionEvent.key is a string representing the
project name. Current tests are serialising Project.NameKey to a Json
string e.g: gson.toJson(project) which encodes project name with extra
quotes. To match real life situation pass project name as string instead
of string encoded as json.
Also add tests to cover issue with cache eviction for projects with '/'
in project name.
Bug: Issue 14564
Change-Id: I23262487222ecb55ce22286fddf2707fb05f8f7b
diff --git a/src/test/java/com/googlesource/gerrit/plugins/multisite/event/CacheEvictionEventRouterTest.java b/src/test/java/com/googlesource/gerrit/plugins/multisite/event/CacheEvictionEventRouterTest.java
index bf5c5d9..76c001f 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/multisite/event/CacheEvictionEventRouterTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/multisite/event/CacheEvictionEventRouterTest.java
@@ -16,7 +16,10 @@
import static org.mockito.Mockito.verify;
+import com.google.gerrit.entities.Project;
+import com.google.gerrit.server.events.EventGsonProvider;
import com.google.gson.Gson;
+import com.googlesource.gerrit.plugins.multisite.cache.Constants;
import com.googlesource.gerrit.plugins.multisite.forwarder.CacheEntry;
import com.googlesource.gerrit.plugins.multisite.forwarder.CacheKeyJsonParser;
import com.googlesource.gerrit.plugins.multisite.forwarder.ForwardedCacheEvictionHandler;
@@ -31,12 +34,13 @@
@RunWith(MockitoJUnitRunner.class)
public class CacheEvictionEventRouterTest {
+ private static Gson gson = new EventGsonProvider().get();
private CacheEvictionEventRouter router;
@Mock private ForwardedCacheEvictionHandler cacheEvictionHandler;
@Before
public void setUp() {
- router = new CacheEvictionEventRouter(cacheEvictionHandler, new CacheKeyJsonParser(new Gson()));
+ router = new CacheEvictionEventRouter(cacheEvictionHandler, new CacheKeyJsonParser(gson));
}
@Test
@@ -48,11 +52,21 @@
}
@Test
- public void routerShouldSendEventsToTheAppropriateHandler_ProjectCacheEvictionWithSlash()
+ public void routerShouldSendEventsToTheAppropriateHandler_CacheEvictionWithSlash()
throws Exception {
- final CacheEvictionEvent event = new CacheEvictionEvent("cache", "some/project");
+ final CacheEvictionEvent event = new CacheEvictionEvent("cache", "some/key");
router.route(event);
verify(cacheEvictionHandler).evict(CacheEntry.from(event.cacheName, event.key));
}
+
+ @Test
+ public void routerShouldSendEventsToTheAppropriateHandler_ProjectCacheEvictionWithSlash()
+ throws Exception {
+ final CacheEvictionEvent event = new CacheEvictionEvent(Constants.PROJECTS, "some/project");
+ router.route(event);
+
+ verify(cacheEvictionHandler)
+ .evict(CacheEntry.from(event.cacheName, Project.nameKey((String) event.key)));
+ }
}
diff --git a/src/test/java/com/googlesource/gerrit/plugins/multisite/forwarder/CacheKeyJsonParserTest.java b/src/test/java/com/googlesource/gerrit/plugins/multisite/forwarder/CacheKeyJsonParserTest.java
index 7efd4dd..e29c8cd 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/multisite/forwarder/CacheKeyJsonParserTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/multisite/forwarder/CacheKeyJsonParserTest.java
@@ -53,9 +53,10 @@
@Test
public void projectNameKeyParse() {
- Project.NameKey name = Project.nameKey("foo");
- String json = gson.toJson(name);
- assertThat(name).isEqualTo(gsonParser.fromJson(Constants.PROJECTS, json));
+ String projectNameString = "foo";
+ Project.NameKey projectNameKey = Project.nameKey(projectNameString);
+ assertThat(projectNameKey)
+ .isEqualTo(gsonParser.fromJson(Constants.PROJECTS, projectNameString));
}
@Test
diff --git a/src/test/java/com/googlesource/gerrit/plugins/multisite/forwarder/ForwardedCacheEvictionHandlerIT.java b/src/test/java/com/googlesource/gerrit/plugins/multisite/forwarder/ForwardedCacheEvictionHandlerIT.java
index fb2a50b..826e154 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/multisite/forwarder/ForwardedCacheEvictionHandlerIT.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/multisite/forwarder/ForwardedCacheEvictionHandlerIT.java
@@ -22,6 +22,8 @@
import com.google.common.collect.Sets;
import com.google.gerrit.acceptance.LightweightPluginDaemonTest;
import com.google.gerrit.acceptance.TestPlugin;
+import com.google.gerrit.entities.Project;
+import com.google.gerrit.extensions.api.projects.ProjectInput;
import com.google.gerrit.extensions.registration.DynamicSet;
import com.google.gerrit.extensions.registration.RegistrationHandle;
import com.google.gerrit.server.cache.CacheRemovalListener;
@@ -122,11 +124,32 @@
@Test
public void shouldEvictProjectCache() throws Exception {
- objectUnderTest.route(
- new CacheEvictionEvent(ProjectCacheImpl.CACHE_NAME, gson.toJson(project)));
+ objectUnderTest.route(new CacheEvictionEvent(ProjectCacheImpl.CACHE_NAME, project.get()));
evictionsCacheTracker.waitForExpectedEvictions();
assertThat(evictionsCacheTracker.trackedEvictionsFor(ProjectCacheImpl.CACHE_NAME))
.contains(project);
}
+
+ @Test
+ public void shouldEvictProjectCacheWithSlash() throws Exception {
+ ProjectInput in = new ProjectInput();
+ in.name = name("my/project");
+ gApi.projects().create(in);
+ Project.NameKey projectNameKey = Project.nameKey(in.name);
+
+ restartCacheEvictionsTracking();
+
+ objectUnderTest.route(
+ new CacheEvictionEvent(ProjectCacheImpl.CACHE_NAME, projectNameKey.get()));
+
+ evictionsCacheTracker.waitForExpectedEvictions();
+ assertThat(evictionsCacheTracker.trackedEvictionsFor(ProjectCacheImpl.CACHE_NAME))
+ .contains(projectNameKey);
+ }
+
+ private void restartCacheEvictionsTracking() {
+ stopTrackingCacheEvictions();
+ startTrackingCacheEvictions();
+ }
}