From 49da4e997804789aa4e7160a128a8e73bf79091c Mon Sep 17 00:00:00 2001 From: Henrique Mota Date: Wed, 26 Aug 2020 10:23:07 -0300 Subject: [PATCH] #224 correcting ordering and adding tests units --- .../kafka/serde/CompositeSerdeRegistry.java | 2 +- .../serde/CompositeSerdeRegistrySpec.groovy | 51 +++++++++++++++++++ .../kafka/serde/serderegistry/Pojo1.groovy | 4 ++ ...Pojo1SerdeRegistryDefaultPrecedence.groovy | 26 ++++++++++ .../Pojo1SerdeRegistryHighPrededence.groovy | 29 +++++++++++ .../Pojo1SerdeRegistryLowestPrecedence.groovy | 29 +++++++++++ .../kafka/serde/serderegistry/Pojo2.groovy | 4 ++ ...Pojo2SerdeRegistryDefaultPrecedence.groovy | 25 +++++++++ 8 files changed, 169 insertions(+), 1 deletion(-) create mode 100644 kafka/src/test/groovy/io/micronaut/configuration/kafka/serde/CompositeSerdeRegistrySpec.groovy create mode 100644 kafka/src/test/groovy/io/micronaut/configuration/kafka/serde/serderegistry/Pojo1.groovy create mode 100644 kafka/src/test/groovy/io/micronaut/configuration/kafka/serde/serderegistry/Pojo1SerdeRegistryDefaultPrecedence.groovy create mode 100644 kafka/src/test/groovy/io/micronaut/configuration/kafka/serde/serderegistry/Pojo1SerdeRegistryHighPrededence.groovy create mode 100644 kafka/src/test/groovy/io/micronaut/configuration/kafka/serde/serderegistry/Pojo1SerdeRegistryLowestPrecedence.groovy create mode 100644 kafka/src/test/groovy/io/micronaut/configuration/kafka/serde/serderegistry/Pojo2.groovy create mode 100644 kafka/src/test/groovy/io/micronaut/configuration/kafka/serde/serderegistry/Pojo2SerdeRegistryDefaultPrecedence.groovy diff --git a/kafka/src/main/java/io/micronaut/configuration/kafka/serde/CompositeSerdeRegistry.java b/kafka/src/main/java/io/micronaut/configuration/kafka/serde/CompositeSerdeRegistry.java index 9bcc9f71e..0869f8a7a 100644 --- a/kafka/src/main/java/io/micronaut/configuration/kafka/serde/CompositeSerdeRegistry.java +++ b/kafka/src/main/java/io/micronaut/configuration/kafka/serde/CompositeSerdeRegistry.java @@ -49,7 +49,7 @@ public CompositeSerdeRegistry(SerdeRegistry... registries) { registries != null ? Arrays.asList(registries) : Collections.emptyList() ); - OrderUtil.sort(registries); + OrderUtil.sort(this.registries); } @SuppressWarnings("unchecked") diff --git a/kafka/src/test/groovy/io/micronaut/configuration/kafka/serde/CompositeSerdeRegistrySpec.groovy b/kafka/src/test/groovy/io/micronaut/configuration/kafka/serde/CompositeSerdeRegistrySpec.groovy new file mode 100644 index 000000000..5dd4c5eac --- /dev/null +++ b/kafka/src/test/groovy/io/micronaut/configuration/kafka/serde/CompositeSerdeRegistrySpec.groovy @@ -0,0 +1,51 @@ +package io.micronaut.configuration.kafka.serde + +import io.micronaut.configuration.kafka.serde.serderegistry.Pojo2SerdeRegistryDefaultPrecedence +import io.micronaut.configuration.kafka.serde.serderegistry.Pojo1 +import io.micronaut.configuration.kafka.serde.serderegistry.Pojo1SerdeRegistryDefaultPrecedence +import io.micronaut.configuration.kafka.serde.serderegistry.Pojo1SerdeRegistryHighPrededence +import io.micronaut.configuration.kafka.serde.serderegistry.Pojo1SerdeRegistryLowestPrecedence +import org.apache.kafka.common.serialization.Serde +import spock.lang.Specification + +class CompositeSerdeRegistrySpec extends Specification { + + void "test highest precedence serde"() { + setup: + CompositeSerdeRegistry registry = new CompositeSerdeRegistry( + new Pojo2SerdeRegistryDefaultPrecedence(), + new Pojo1SerdeRegistryDefaultPrecedence(), + new Pojo1SerdeRegistryLowestPrecedence(), + new Pojo1SerdeRegistryHighPrededence() + ) + when: + Serde serde = registry.getSerde(Pojo1) + then: + serde.class == Pojo1SerdeRegistryHighPrededence.StringSerde + } + + void "test default precedence serde"() { + setup: + CompositeSerdeRegistry registry = new CompositeSerdeRegistry( + new Pojo2SerdeRegistryDefaultPrecedence(), + new Pojo1SerdeRegistryDefaultPrecedence(), + new Pojo1SerdeRegistryLowestPrecedence() + ) + when: + Serde serde = registry.getSerde(Pojo1) + then: + serde.class == Pojo1SerdeRegistryDefaultPrecedence.StringSerde + } + + void "test lowest precedence serde"() { + setup: + CompositeSerdeRegistry registry = new CompositeSerdeRegistry( + new Pojo2SerdeRegistryDefaultPrecedence(), + new Pojo1SerdeRegistryLowestPrecedence() + ) + when: + Serde serde = registry.getSerde(Pojo1) + then: + serde.class == Pojo1SerdeRegistryLowestPrecedence.StringSerde + } +} diff --git a/kafka/src/test/groovy/io/micronaut/configuration/kafka/serde/serderegistry/Pojo1.groovy b/kafka/src/test/groovy/io/micronaut/configuration/kafka/serde/serderegistry/Pojo1.groovy new file mode 100644 index 000000000..07019c504 --- /dev/null +++ b/kafka/src/test/groovy/io/micronaut/configuration/kafka/serde/serderegistry/Pojo1.groovy @@ -0,0 +1,4 @@ +package io.micronaut.configuration.kafka.serde.serderegistry + +class Pojo1 { +} diff --git a/kafka/src/test/groovy/io/micronaut/configuration/kafka/serde/serderegistry/Pojo1SerdeRegistryDefaultPrecedence.groovy b/kafka/src/test/groovy/io/micronaut/configuration/kafka/serde/serderegistry/Pojo1SerdeRegistryDefaultPrecedence.groovy new file mode 100644 index 000000000..b1a2ccbb6 --- /dev/null +++ b/kafka/src/test/groovy/io/micronaut/configuration/kafka/serde/serderegistry/Pojo1SerdeRegistryDefaultPrecedence.groovy @@ -0,0 +1,26 @@ +package io.micronaut.configuration.kafka.serde.serderegistry + +import groovy.transform.CompileStatic +import io.micronaut.configuration.kafka.serde.SerdeRegistry +import org.apache.kafka.common.serialization.Serde +import org.apache.kafka.common.serialization.Serdes +import org.apache.kafka.common.serialization.StringDeserializer +import org.apache.kafka.common.serialization.StringSerializer + +@CompileStatic +class Pojo1SerdeRegistryDefaultPrecedence implements SerdeRegistry { + + static class StringSerde extends Serdes.WrapperSerde { + StringSerde() { + super(new StringSerializer(), new StringDeserializer()) + } + } + + @Override + Serde getSerde(Class type) { + if (type == Pojo1) { + return new StringSerde() as Serde + } + return null + } +} diff --git a/kafka/src/test/groovy/io/micronaut/configuration/kafka/serde/serderegistry/Pojo1SerdeRegistryHighPrededence.groovy b/kafka/src/test/groovy/io/micronaut/configuration/kafka/serde/serderegistry/Pojo1SerdeRegistryHighPrededence.groovy new file mode 100644 index 000000000..373c4d960 --- /dev/null +++ b/kafka/src/test/groovy/io/micronaut/configuration/kafka/serde/serderegistry/Pojo1SerdeRegistryHighPrededence.groovy @@ -0,0 +1,29 @@ +package io.micronaut.configuration.kafka.serde.serderegistry + +import groovy.transform.CompileStatic +import io.micronaut.configuration.kafka.serde.SerdeRegistry +import io.micronaut.core.order.Ordered +import org.apache.kafka.common.serialization.Serde +import org.apache.kafka.common.serialization.Serdes +import org.apache.kafka.common.serialization.StringDeserializer +import org.apache.kafka.common.serialization.StringSerializer + +@CompileStatic +class Pojo1SerdeRegistryHighPrededence implements SerdeRegistry, Ordered { + + int order = HIGHEST_PRECEDENCE + + static class StringSerde extends Serdes.WrapperSerde { + StringSerde() { + super(new StringSerializer(), new StringDeserializer()) + } + } + + @Override + Serde getSerde(Class type) { + if (type == Pojo1) { + return new StringSerde() as Serde + } + return null + } +} diff --git a/kafka/src/test/groovy/io/micronaut/configuration/kafka/serde/serderegistry/Pojo1SerdeRegistryLowestPrecedence.groovy b/kafka/src/test/groovy/io/micronaut/configuration/kafka/serde/serderegistry/Pojo1SerdeRegistryLowestPrecedence.groovy new file mode 100644 index 000000000..0f83a7f46 --- /dev/null +++ b/kafka/src/test/groovy/io/micronaut/configuration/kafka/serde/serderegistry/Pojo1SerdeRegistryLowestPrecedence.groovy @@ -0,0 +1,29 @@ +package io.micronaut.configuration.kafka.serde.serderegistry + +import groovy.transform.CompileStatic +import io.micronaut.configuration.kafka.serde.SerdeRegistry +import io.micronaut.core.order.Ordered +import org.apache.kafka.common.serialization.Serde +import org.apache.kafka.common.serialization.Serdes +import org.apache.kafka.common.serialization.StringDeserializer +import org.apache.kafka.common.serialization.StringSerializer + +@CompileStatic +class Pojo1SerdeRegistryLowestPrecedence implements SerdeRegistry, Ordered { + + int order = LOWEST_PRECEDENCE + + static class StringSerde extends Serdes.WrapperSerde { + StringSerde() { + super(new StringSerializer(), new StringDeserializer()) + } + } + + @Override + Serde getSerde(Class type) { + if (type == Pojo1) { + return new StringSerde() as Serde + } + return null + } +} diff --git a/kafka/src/test/groovy/io/micronaut/configuration/kafka/serde/serderegistry/Pojo2.groovy b/kafka/src/test/groovy/io/micronaut/configuration/kafka/serde/serderegistry/Pojo2.groovy new file mode 100644 index 000000000..9dc0a8a13 --- /dev/null +++ b/kafka/src/test/groovy/io/micronaut/configuration/kafka/serde/serderegistry/Pojo2.groovy @@ -0,0 +1,4 @@ +package io.micronaut.configuration.kafka.serde.serderegistry + +class Pojo2 { +} diff --git a/kafka/src/test/groovy/io/micronaut/configuration/kafka/serde/serderegistry/Pojo2SerdeRegistryDefaultPrecedence.groovy b/kafka/src/test/groovy/io/micronaut/configuration/kafka/serde/serderegistry/Pojo2SerdeRegistryDefaultPrecedence.groovy new file mode 100644 index 000000000..5bc134715 --- /dev/null +++ b/kafka/src/test/groovy/io/micronaut/configuration/kafka/serde/serderegistry/Pojo2SerdeRegistryDefaultPrecedence.groovy @@ -0,0 +1,25 @@ +package io.micronaut.configuration.kafka.serde.serderegistry + +import groovy.transform.CompileStatic +import io.micronaut.configuration.kafka.serde.SerdeRegistry +import org.apache.kafka.common.serialization.IntegerDeserializer +import org.apache.kafka.common.serialization.IntegerSerializer +import org.apache.kafka.common.serialization.Serde +import org.apache.kafka.common.serialization.Serdes + +@CompileStatic +class Pojo2SerdeRegistryDefaultPrecedence implements SerdeRegistry { + + static class IntegerSerde extends Serdes.WrapperSerde { + IntegerSerde() { + super(new IntegerSerializer(), new IntegerDeserializer()) + } + } + @Override + Serde getSerde(Class type) { + if (type == Pojo2) { + return new IntegerSerde() as Serde + } + return null + } +}