Use event deserialization logic from events broker To avoid code repetition events deserialization was moved to events-broker library. Bug: Issue 14593 Change-Id: I6ef49f7b8c16b774770d3c2137cd210554202ce3
diff --git a/external_plugin_deps.bzl b/external_plugin_deps.bzl index 4b24917..1bed1af 100644 --- a/external_plugin_deps.bzl +++ b/external_plugin_deps.bzl
@@ -1,4 +1,4 @@ -load("//tools/bzl:maven_jar.bzl", "maven_jar") +load("//tools/bzl:maven_jar.bzl", "maven_jar", "MAVEN_LOCAL") def external_plugin_deps(): maven_jar( @@ -15,6 +15,6 @@ maven_jar( name = "events-broker", - artifact = "com.gerritforge:events-broker:3.4.0-rc2", - sha1 = "f72b4166e6d785fd1a41c997a4ffb14461dd7d87", + artifact = "com.gerritforge:events-broker:3.4.0.1", + sha1 = "2d406afa8787621442d855e4b458c97bd24f1198", )
diff --git a/src/main/java/com/googlesource/gerrit/plugins/kafka/subscribe/KafkaEventDeserializer.java b/src/main/java/com/googlesource/gerrit/plugins/kafka/subscribe/KafkaEventDeserializer.java index 4c57a54..98b1cf2 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/kafka/subscribe/KafkaEventDeserializer.java +++ b/src/main/java/com/googlesource/gerrit/plugins/kafka/subscribe/KafkaEventDeserializer.java
@@ -14,16 +14,11 @@ package com.googlesource.gerrit.plugins.kafka.subscribe; -import static java.util.Objects.requireNonNull; - +import com.gerritforge.gerrit.eventbroker.EventDeserializer; import com.gerritforge.gerrit.eventbroker.EventMessage; -import com.gerritforge.gerrit.eventbroker.EventMessage.Header; -import com.google.gerrit.server.events.Event; -import com.google.gson.Gson; import com.google.inject.Inject; import com.google.inject.Singleton; import java.util.Map; -import java.util.UUID; import org.apache.kafka.common.serialization.Deserializer; import org.apache.kafka.common.serialization.StringDeserializer; @@ -31,15 +26,15 @@ public class KafkaEventDeserializer implements Deserializer<EventMessage> { private final StringDeserializer stringDeserializer = new StringDeserializer(); - private Gson gson; + private EventDeserializer eventDeserializer; // To be used when providing this deserializer with class name (then need to add a configuration // entry to set the gson.provider public KafkaEventDeserializer() {} @Inject - public KafkaEventDeserializer(Gson gson) { - this.gson = gson; + public KafkaEventDeserializer(EventDeserializer eventDeserializer) { + this.eventDeserializer = eventDeserializer; } @Override @@ -48,20 +43,7 @@ @Override public EventMessage deserialize(String topic, byte[] data) { String json = stringDeserializer.deserialize(topic, data); - EventMessage result = gson.fromJson(json, EventMessage.class); - if (result.getEvent() == null && result.getHeader() == null) { - Event event = deserialiseEvent(json); - result = new EventMessage(new Header(UUID.randomUUID(), event.instanceId), event); - } - result.validate(); - return result; - } - - private Event deserialiseEvent(String json) { - Event event = gson.fromJson(json, Event.class); - requireNonNull(event.type, "Event type cannot be null"); - requireNonNull(event.instanceId, "Event instance id cannot be null"); - return event; + return eventDeserializer.deserialize(json); } @Override
diff --git a/src/test/java/com/googlesource/gerrit/plugins/kafka/subscribe/KafkaEventDeserializerTest.java b/src/test/java/com/googlesource/gerrit/plugins/kafka/subscribe/KafkaEventDeserializerTest.java deleted file mode 100644 index f5b6861..0000000 --- a/src/test/java/com/googlesource/gerrit/plugins/kafka/subscribe/KafkaEventDeserializerTest.java +++ /dev/null
@@ -1,81 +0,0 @@ -// Copyright (C) 2019 The Android Open Source Project -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package com.googlesource.gerrit.plugins.kafka.subscribe; - -import static com.google.common.truth.Truth.assertThat; -import static java.nio.charset.StandardCharsets.UTF_8; - -import com.gerritforge.gerrit.eventbroker.EventMessage; -import com.google.gerrit.server.events.EventGsonProvider; -import com.google.gson.Gson; -import java.util.UUID; -import org.junit.Before; -import org.junit.Test; - -public class KafkaEventDeserializerTest { - private KafkaEventDeserializer deserializer; - - @Before - public void setUp() { - final Gson gson = new EventGsonProvider().get(); - deserializer = new KafkaEventDeserializer(gson); - } - - @Test - public void kafkaEventDeserializerShouldParseAKafkaEventMessage() { - final UUID eventId = UUID.randomUUID(); - final String eventType = "event-type"; - final String sourceInstanceId = UUID.randomUUID().toString(); - final long eventCreatedOn = 10L; - final String eventJson = - String.format( - "{ " - + "\"header\": { \"eventId\": \"%s\", \"eventType\": \"%s\", \"sourceInstanceId\": \"%s\", \"eventCreatedOn\": %d }," - + "\"body\": { \"type\": \"project-created\" }" - + "}", - eventId, eventType, sourceInstanceId, eventCreatedOn); - final EventMessage event = deserializer.deserialize("ignored", eventJson.getBytes(UTF_8)); - - assertThat(event.getHeader().eventId).isEqualTo(eventId); - assertThat(event.getHeader().sourceInstanceId).isEqualTo(sourceInstanceId); - } - - @Test - public void kafkaEventDeserializerShouldParseKafkaEvent() { - final String eventJson = "{ \"type\": \"project-created\", \"instanceId\":\"instance-id\" }"; - final EventMessage event = deserializer.deserialize("ignored", eventJson.getBytes(UTF_8)); - - assertThat(event.getHeader().sourceInstanceId).isEqualTo("instance-id"); - } - - @Test - public void kafkaEventDeserializerShouldParseKafkaEventWithHeaderAndBodyProjectName() { - final String eventJson = - "{\"projectName\":\"header_body_parser_project\",\"type\":\"project-created\", \"instanceId\":\"instance-id\"}"; - final EventMessage event = deserializer.deserialize("ignored", eventJson.getBytes(UTF_8)); - - assertThat(event.getHeader().sourceInstanceId).isEqualTo("instance-id"); - } - - @Test(expected = RuntimeException.class) - public void kafkaEventDeserializerShouldFailForInvalidJson() { - deserializer.deserialize("ignored", "this is not a JSON string".getBytes(UTF_8)); - } - - @Test(expected = RuntimeException.class) - public void kafkaEventDeserializerShouldFailForInvalidObjectButValidJSON() { - deserializer.deserialize("ignored", "{}".getBytes(UTF_8)); - } -}