Fix deserialization of the projects cache keys and eviction

The key of the projects cache was changed from String to Project.NameKey
in Gerrit core. Therefore, evicting from the "projects" cache using a
String as a key was basically a no-op, so I believe that the entries in
that cache were not evicted.

Fix GsonParser accordingly and add a test.

Bug: Issue 14254
Change-Id: Ie7145814d77e44792ea4bb51fa6f13eeef5235b1
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/GsonParser.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/GsonParser.java
index de02912..3b1c4b9 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/GsonParser.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/GsonParser.java
@@ -18,6 +18,7 @@
 import com.google.common.base.Strings;
 import com.google.gerrit.entities.Account;
 import com.google.gerrit.entities.AccountGroup;
+import com.google.gerrit.entities.Project;
 import com.google.gerrit.server.events.EventGson;
 import com.google.gson.Gson;
 import com.google.gson.JsonElement;
@@ -39,6 +40,9 @@
     Object key;
     // Need to add a case for 'adv_bases'
     if (!json.isJsonObject()) {
+      if (Constants.PROJECTS.equals(cacheName)) {
+        return Project.nameKey(json.getAsString());
+      }
       return json.getAsString();
     }
     JsonObject asJsonObject = json.getAsJsonObject();
diff --git a/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/GsonParserTest.java b/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/GsonParserTest.java
index 5b76598..b3b1271 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/GsonParserTest.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/GsonParserTest.java
@@ -19,6 +19,7 @@
 import com.ericsson.gerrit.plugins.highavailability.cache.Constants;
 import com.google.gerrit.entities.Account;
 import com.google.gerrit.entities.AccountGroup;
+import com.google.gerrit.entities.Project;
 import com.google.gerrit.server.events.EventGsonProvider;
 import com.google.gson.Gson;
 import org.junit.Test;
@@ -51,10 +52,17 @@
   }
 
   @Test
+  public void projectNameKeyParse() {
+    Project.NameKey name = Project.nameKey("foo");
+    String json = gson.toJson(name);
+    assertThat(name).isEqualTo(objectUnderTest.fromJson(Constants.PROJECTS, json));
+  }
+
+  @Test
   public void stringParse() {
     String key = "key";
     String json = gson.toJson(key);
-    assertThat(key).isEqualTo(objectUnderTest.fromJson(Constants.PROJECTS, json));
+    assertThat(key).isEqualTo(objectUnderTest.fromJson("string-keyed-cache", json));
   }
 
   @Test