summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAntonio Barone <syntonyze@gmail.com>2021-06-02 14:31:34 +0300
committerAntonio Barone <syntonyze@gmail.com>2021-06-07 11:31:12 +0300
commit7d9ba0d543e8212b73d8cf8e2e2d5764b63b7678 (patch)
tree65964c503f3f9c23088fcabff02f7fb938fba398
parent93e61dc64debe42eab454e6c268f9c4ee22a78bc (diff)
Register ProjectDeletion events for gson serializationv3.4.2v3.4.1
ProjectDeletion events were not registered event types. This caused failures when EventGson tried to serialize/deserialize objects having those events as field, Throwing the JsonParseException: ``` Unknown event type: project-deletion-replication-scheduled ``` Register ProjectDeletion event types, similarly to what already done for Ref replication events (RefReplicatedEvent, RefReplicationDoneEvent, RefReplicationScheduledEvent). This change cherry-picks change [1] [1]https://gerrit-review.googlesource.com/c/plugins/replication/+/308383 Bug: Issue 14628 Change-Id: I7471e9a0f8ea8ec27d5800f785d1c7006b35055c
-rw-r--r--src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationModule.java14
-rw-r--r--src/main/java/com/googlesource/gerrit/plugins/replication/events/ProjectDeletionReplicationDoneEvent.java15
-rw-r--r--src/main/java/com/googlesource/gerrit/plugins/replication/events/ProjectDeletionReplicationFailedEvent.java15
-rw-r--r--src/main/java/com/googlesource/gerrit/plugins/replication/events/ProjectDeletionReplicationScheduledEvent.java15
-rw-r--r--src/main/java/com/googlesource/gerrit/plugins/replication/events/ProjectDeletionReplicationSucceededEvent.java15
-rw-r--r--src/test/java/com/googlesource/gerrit/plugins/replication/ReplicationEventsIT.java78
6 files changed, 152 insertions, 0 deletions
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationModule.java b/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationModule.java
index 4d2faed..75fa5b3 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationModule.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationModule.java
@@ -32,6 +32,10 @@ import com.google.inject.ProvisionException;
import com.google.inject.Scopes;
import com.google.inject.assistedinject.FactoryModuleBuilder;
import com.google.inject.internal.UniqueAnnotations;
+import com.googlesource.gerrit.plugins.replication.events.ProjectDeletionReplicationDoneEvent;
+import com.googlesource.gerrit.plugins.replication.events.ProjectDeletionReplicationFailedEvent;
+import com.googlesource.gerrit.plugins.replication.events.ProjectDeletionReplicationScheduledEvent;
+import com.googlesource.gerrit.plugins.replication.events.ProjectDeletionReplicationSucceededEvent;
import com.googlesource.gerrit.plugins.replication.events.ProjectDeletionState;
import com.googlesource.gerrit.plugins.replication.events.RefReplicatedEvent;
import com.googlesource.gerrit.plugins.replication.events.RefReplicationDoneEvent;
@@ -105,6 +109,16 @@ class ReplicationModule extends AbstractModule {
EventTypes.register(RefReplicatedEvent.TYPE, RefReplicatedEvent.class);
EventTypes.register(RefReplicationDoneEvent.TYPE, RefReplicationDoneEvent.class);
EventTypes.register(ReplicationScheduledEvent.TYPE, ReplicationScheduledEvent.class);
+ EventTypes.register(
+ ProjectDeletionReplicationScheduledEvent.TYPE,
+ ProjectDeletionReplicationScheduledEvent.class);
+ EventTypes.register(
+ ProjectDeletionReplicationFailedEvent.TYPE, ProjectDeletionReplicationFailedEvent.class);
+ EventTypes.register(
+ ProjectDeletionReplicationSucceededEvent.TYPE,
+ ProjectDeletionReplicationSucceededEvent.class);
+ EventTypes.register(
+ ProjectDeletionReplicationDoneEvent.TYPE, ProjectDeletionReplicationDoneEvent.class);
bind(SshSessionFactory.class).toProvider(ReplicationSshSessionFactoryProvider.class);
bind(TransportFactory.class).to(TransportFactoryImpl.class).in(Scopes.SINGLETON);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/events/ProjectDeletionReplicationDoneEvent.java b/src/main/java/com/googlesource/gerrit/plugins/replication/events/ProjectDeletionReplicationDoneEvent.java
index 4e66743..ebd7202 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/events/ProjectDeletionReplicationDoneEvent.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/events/ProjectDeletionReplicationDoneEvent.java
@@ -14,6 +14,7 @@
package com.googlesource.gerrit.plugins.replication.events;
+import com.google.common.base.Objects;
import com.google.gerrit.entities.Project;
import com.google.gerrit.server.events.ProjectEvent;
@@ -31,4 +32,18 @@ public class ProjectDeletionReplicationDoneEvent extends ProjectEvent {
public Project.NameKey getProjectNameKey() {
return Project.nameKey(project);
}
+
+ @Override
+ public boolean equals(Object o) {
+ if (!(o instanceof ProjectDeletionReplicationDoneEvent)) {
+ return false;
+ }
+ ProjectDeletionReplicationDoneEvent that = (ProjectDeletionReplicationDoneEvent) o;
+ return Objects.equal(project, that.project);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hashCode(project);
+ }
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/events/ProjectDeletionReplicationFailedEvent.java b/src/main/java/com/googlesource/gerrit/plugins/replication/events/ProjectDeletionReplicationFailedEvent.java
index e350716..da75208 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/events/ProjectDeletionReplicationFailedEvent.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/events/ProjectDeletionReplicationFailedEvent.java
@@ -15,6 +15,7 @@
package com.googlesource.gerrit.plugins.replication.events;
import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Objects;
import com.google.gerrit.entities.Project;
import com.google.gerrit.server.events.ProjectEvent;
import org.eclipse.jgit.transport.URIish;
@@ -40,4 +41,18 @@ public class ProjectDeletionReplicationFailedEvent extends ProjectEvent {
public String getTargetUri() {
return targetUri;
}
+
+ @Override
+ public boolean equals(Object o) {
+ if (!(o instanceof ProjectDeletionReplicationFailedEvent)) {
+ return false;
+ }
+ ProjectDeletionReplicationFailedEvent that = (ProjectDeletionReplicationFailedEvent) o;
+ return Objects.equal(project, that.project) && Objects.equal(targetUri, that.targetUri);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hashCode(project, targetUri);
+ }
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/events/ProjectDeletionReplicationScheduledEvent.java b/src/main/java/com/googlesource/gerrit/plugins/replication/events/ProjectDeletionReplicationScheduledEvent.java
index d179106..48e621b 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/events/ProjectDeletionReplicationScheduledEvent.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/events/ProjectDeletionReplicationScheduledEvent.java
@@ -15,6 +15,7 @@
package com.googlesource.gerrit.plugins.replication.events;
import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Objects;
import com.google.gerrit.entities.Project;
import com.google.gerrit.server.events.ProjectEvent;
import org.eclipse.jgit.transport.URIish;
@@ -40,4 +41,18 @@ public class ProjectDeletionReplicationScheduledEvent extends ProjectEvent {
public String getTargetUri() {
return targetUri;
}
+
+ @Override
+ public boolean equals(Object o) {
+ if (!(o instanceof ProjectDeletionReplicationScheduledEvent)) {
+ return false;
+ }
+ ProjectDeletionReplicationScheduledEvent that = (ProjectDeletionReplicationScheduledEvent) o;
+ return Objects.equal(project, that.project) && Objects.equal(targetUri, that.targetUri);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hashCode(project, targetUri);
+ }
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/events/ProjectDeletionReplicationSucceededEvent.java b/src/main/java/com/googlesource/gerrit/plugins/replication/events/ProjectDeletionReplicationSucceededEvent.java
index 852c9fe..6f881cf 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/events/ProjectDeletionReplicationSucceededEvent.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/events/ProjectDeletionReplicationSucceededEvent.java
@@ -15,6 +15,7 @@
package com.googlesource.gerrit.plugins.replication.events;
import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Objects;
import com.google.gerrit.entities.Project;
import com.google.gerrit.server.events.ProjectEvent;
import org.eclipse.jgit.transport.URIish;
@@ -40,4 +41,18 @@ public class ProjectDeletionReplicationSucceededEvent extends ProjectEvent {
public String getTargetUri() {
return targetUri;
}
+
+ @Override
+ public boolean equals(Object o) {
+ if (!(o instanceof ProjectDeletionReplicationSucceededEvent)) {
+ return false;
+ }
+ ProjectDeletionReplicationSucceededEvent that = (ProjectDeletionReplicationSucceededEvent) o;
+ return Objects.equal(project, that.project) && Objects.equal(targetUri, that.targetUri);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hashCode(project, targetUri);
+ }
}
diff --git a/src/test/java/com/googlesource/gerrit/plugins/replication/ReplicationEventsIT.java b/src/test/java/com/googlesource/gerrit/plugins/replication/ReplicationEventsIT.java
index 13afc0d..2d69a47 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/replication/ReplicationEventsIT.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/replication/ReplicationEventsIT.java
@@ -16,6 +16,7 @@ package com.googlesource.gerrit.plugins.replication;
import static com.google.common.truth.Truth.assertThat;
+import com.google.common.base.Objects;
import com.google.gerrit.acceptance.PushOneCommit.Result;
import com.google.gerrit.acceptance.Sandboxed;
import com.google.gerrit.acceptance.TestPlugin;
@@ -27,9 +28,12 @@ import com.google.gerrit.extensions.api.projects.BranchInput;
import com.google.gerrit.extensions.events.ProjectDeletedListener;
import com.google.gerrit.extensions.registration.DynamicItem;
import com.google.gerrit.extensions.registration.DynamicSet;
+import com.google.gerrit.server.events.Event;
import com.google.gerrit.server.events.EventDispatcher;
+import com.google.gerrit.server.events.EventGsonProvider;
import com.google.gerrit.server.events.ProjectEvent;
import com.google.gerrit.server.events.RefEvent;
+import com.google.gson.Gson;
import com.google.inject.Inject;
import com.googlesource.gerrit.plugins.replication.events.ProjectDeletionReplicationDoneEvent;
import com.googlesource.gerrit.plugins.replication.events.ProjectDeletionReplicationFailedEvent;
@@ -43,6 +47,7 @@ import java.util.List;
import java.util.Optional;
import java.util.function.Predicate;
import java.util.function.Supplier;
+import org.eclipse.jgit.transport.URIish;
import org.junit.Before;
import org.junit.Test;
@@ -57,6 +62,7 @@ public class ReplicationEventsIT extends ReplicationDaemon {
@Inject private DynamicSet<ProjectDeletedListener> deletedListeners;
@Inject private DynamicItem<EventDispatcher> eventDispatcher;
private TestDispatcher testDispatcher;
+ private Gson eventGson;
@Before
public void setup() throws Exception {
@@ -68,6 +74,7 @@ public class ReplicationEventsIT extends ReplicationDaemon {
setUpTestPlugin();
testDispatcher = new TestDispatcher();
eventDispatcher.set(testDispatcher, eventDispatcher.getPluginName());
+ eventGson = new EventGsonProvider().get();
}
@Test
@@ -252,6 +259,55 @@ public class ReplicationEventsIT extends ReplicationDaemon {
e -> project.equals(e.getProjectNameKey()));
}
+ @Test
+ public void shouldSerializeObjectsHavingProjectDeletionReplicationScheduledEventAsField()
+ throws Exception {
+ EventWrapper origEvent =
+ new EventWrapper(
+ new ProjectDeletionReplicationScheduledEvent(
+ project.get(), new URIish(String.format("git://someHost/%s.git", project.get()))));
+
+ EventWrapper gotEvent = eventGson.fromJson(eventGson.toJson(origEvent), origEvent.getClass());
+
+ assertThat(origEvent).isEqualTo(gotEvent);
+ }
+
+ @Test
+ public void shouldSerializeObjectsHavingProjectDeletionReplicationSucceededEventAsField()
+ throws Exception {
+ EventWrapper origEvent =
+ new EventWrapper(
+ new ProjectDeletionReplicationSucceededEvent(
+ project.get(), new URIish(String.format("git://someHost/%s.git", project.get()))));
+
+ EventWrapper gotEvent = eventGson.fromJson(eventGson.toJson(origEvent), origEvent.getClass());
+
+ assertThat(origEvent).isEqualTo(gotEvent);
+ }
+
+ @Test
+ public void shouldSerializeObjectsHavingProjectDeletionReplicationFailedEventAsField()
+ throws Exception {
+ EventWrapper origEvent =
+ new EventWrapper(
+ new ProjectDeletionReplicationFailedEvent(
+ project.get(), new URIish(String.format("git://someHost/%s.git", project.get()))));
+
+ EventWrapper gotEvent = eventGson.fromJson(eventGson.toJson(origEvent), origEvent.getClass());
+
+ assertThat(origEvent).isEqualTo(gotEvent);
+ }
+
+ @Test
+ public void shouldSerializeObjectsHavingProjectDeletionReplicationDoneEventAsField() {
+ EventWrapper origEvent =
+ new EventWrapper(new ProjectDeletionReplicationDoneEvent(project.get()));
+
+ EventWrapper gotEvent = eventGson.fromJson(eventGson.toJson(origEvent), origEvent.getClass());
+
+ assertThat(origEvent).isEqualTo(gotEvent);
+ }
+
private <T extends RefEvent> void waitForRefEvent(Supplier<List<T>> events, String refName)
throws InterruptedException {
WaitUtil.waitUntil(
@@ -274,4 +330,26 @@ public class ReplicationEventsIT extends ReplicationDaemon {
private <T extends ProjectEvent> void assertThatAnyMatch(List<T> events, Predicate<T> p) {
assertThat(events.stream().anyMatch(p)).isTrue();
}
+
+ private static class EventWrapper {
+ private final Event event;
+
+ public EventWrapper(Event event) {
+ this.event = event;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (!(o instanceof EventWrapper)) {
+ return false;
+ }
+ EventWrapper eventWrapper = (EventWrapper) o;
+ return Objects.equal(event, eventWrapper.event);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hashCode(event);
+ }
+ }
}