diff options
author | Antonio Barone <syntonyze@gmail.com> | 2021-06-02 14:31:34 +0300 |
---|---|---|
committer | Antonio Barone <syntonyze@gmail.com> | 2021-06-07 11:31:12 +0300 |
commit | 7d9ba0d543e8212b73d8cf8e2e2d5764b63b7678 (patch) | |
tree | 65964c503f3f9c23088fcabff02f7fb938fba398 | |
parent | 93e61dc64debe42eab454e6c268f9c4ee22a78bc (diff) |
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
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); + } + } } |