From 0222171f0335cffe12952e012fdafdcf9319f702 Mon Sep 17 00:00:00 2001 From: John Fallows Date: Wed, 3 Jul 2024 16:19:59 -0700 Subject: [PATCH] Add CatalogConfig.builder() methods --- .../internal/ApicurioCatalogFactoryTest.java | 27 +- .../FilesystemCatalogFactoryTest.java | 34 +-- .../inline/InlineCatalogFactoryTest.java | 17 +- .../internal/KarapaceCatalogFactoryTest.java | 25 +- .../runtime/engine/config/CatalogConfig.java | 16 +- .../engine/config/CatalogConfigBuilder.java | 4 +- .../zilla/runtime/engine/factory/Factory.java | 5 + .../runtime/engine/factory/FactorySpi.java | 7 + .../internal/config/CatalogAdapter.java | 16 +- .../catalog/config/TestCatalogConfig.java | 31 +++ .../config/TestCatalogOptionsConfig.java | 2 +- .../model/avro/internal/AvroModelTest.java | 231 ++++++++++------- .../json/internal/JsonConverterTest.java | 189 ++++++++++---- .../json/internal/JsonValidatorTest.java | 157 +++++++++--- .../protobuf/internal/ProtobufModelTest.java | 235 +++++++++--------- .../kafka/grpc/config/remote.server.rpc.yaml | 18 +- 16 files changed, 617 insertions(+), 397 deletions(-) create mode 100644 runtime/engine/src/test/java/io/aklivity/zilla/runtime/engine/test/internal/catalog/config/TestCatalogConfig.java diff --git a/runtime/catalog-apicurio/src/test/java/io/aklivity/zilla/runtime/catalog/apicurio/internal/ApicurioCatalogFactoryTest.java b/runtime/catalog-apicurio/src/test/java/io/aklivity/zilla/runtime/catalog/apicurio/internal/ApicurioCatalogFactoryTest.java index b8bb3bdc97..fa25539b26 100644 --- a/runtime/catalog-apicurio/src/test/java/io/aklivity/zilla/runtime/catalog/apicurio/internal/ApicurioCatalogFactoryTest.java +++ b/runtime/catalog-apicurio/src/test/java/io/aklivity/zilla/runtime/catalog/apicurio/internal/ApicurioCatalogFactoryTest.java @@ -17,20 +17,12 @@ import static org.hamcrest.CoreMatchers.instanceOf; import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.Assert.assertEquals; -import static org.mockito.Mockito.mock; - -import java.time.Duration; import org.junit.Test; -import io.aklivity.zilla.runtime.catalog.apicurio.internal.config.ApicurioOptionsConfig; import io.aklivity.zilla.runtime.engine.Configuration; -import io.aklivity.zilla.runtime.engine.EngineContext; import io.aklivity.zilla.runtime.engine.catalog.Catalog; -import io.aklivity.zilla.runtime.engine.catalog.CatalogContext; import io.aklivity.zilla.runtime.engine.catalog.CatalogFactory; -import io.aklivity.zilla.runtime.engine.catalog.CatalogHandler; -import io.aklivity.zilla.runtime.engine.config.CatalogConfig; public class ApicurioCatalogFactoryTest { @@ -39,24 +31,9 @@ public void shouldLoadAndCreate() { Configuration config = new Configuration(); CatalogFactory factory = CatalogFactory.instantiate(); - Catalog catalog = factory.create("apicurio", config); + Catalog catalog = factory.create(ApicurioCatalog.NAME, config); assertThat(catalog, instanceOf(ApicurioCatalog.class)); - assertEquals("apicurio", catalog.name()); - - CatalogContext context = catalog.supply(mock(EngineContext.class)); - assertThat(context, instanceOf(ApicurioCatalogContext.class)); - - ApicurioOptionsConfig catalogConfig = ApicurioOptionsConfig.builder() - .url("http://localhost:8080") - .groupId("my-group") - .useId("contentId") - .idEncoding("legacy") - .maxAge(Duration.ofSeconds(100)) - .build(); - CatalogConfig options = new CatalogConfig("test", "catalog0", "apicurio", catalogConfig); - CatalogHandler handler = context.attach(options); - - assertThat(handler, instanceOf(ApicurioCatalogHandler.class)); + assertEquals(ApicurioCatalog.NAME, catalog.name()); } } diff --git a/runtime/catalog-filesystem/src/test/java/io/aklivity/zilla/runtime/catalog/filesystem/internal/FilesystemCatalogFactoryTest.java b/runtime/catalog-filesystem/src/test/java/io/aklivity/zilla/runtime/catalog/filesystem/internal/FilesystemCatalogFactoryTest.java index cf3f010b66..ca82c38af3 100644 --- a/runtime/catalog-filesystem/src/test/java/io/aklivity/zilla/runtime/catalog/filesystem/internal/FilesystemCatalogFactoryTest.java +++ b/runtime/catalog-filesystem/src/test/java/io/aklivity/zilla/runtime/catalog/filesystem/internal/FilesystemCatalogFactoryTest.java @@ -14,27 +14,15 @@ */ package io.aklivity.zilla.runtime.catalog.filesystem.internal; -import static java.util.Collections.singletonList; import static org.hamcrest.CoreMatchers.instanceOf; import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.Assert.assertEquals; -import static org.mockito.Mockito.mock; - -import java.net.URL; -import java.nio.file.Path; import org.junit.Test; -import org.mockito.Mockito; -import io.aklivity.zilla.runtime.catalog.filesystem.internal.config.FilesystemOptionsConfig; -import io.aklivity.zilla.runtime.catalog.filesystem.internal.config.FilesystemSchemaConfig; import io.aklivity.zilla.runtime.engine.Configuration; -import io.aklivity.zilla.runtime.engine.EngineContext; import io.aklivity.zilla.runtime.engine.catalog.Catalog; -import io.aklivity.zilla.runtime.engine.catalog.CatalogContext; import io.aklivity.zilla.runtime.engine.catalog.CatalogFactory; -import io.aklivity.zilla.runtime.engine.catalog.CatalogHandler; -import io.aklivity.zilla.runtime.engine.config.CatalogConfig; public class FilesystemCatalogFactoryTest { @@ -43,27 +31,9 @@ public void shouldLoadAndCreate() throws Exception { Configuration config = new Configuration(); CatalogFactory factory = CatalogFactory.instantiate(); - Catalog catalog = factory.create("filesystem", config); + Catalog catalog = factory.create(FilesystemCatalog.NAME, config); assertThat(catalog, instanceOf(FilesystemCatalog.class)); - assertEquals("filesystem", catalog.name()); - - EngineContext engineContext = mock(EngineContext.class); - URL url = FilesystemCatalogFactoryTest.class - .getResource("../../../../specs/catalog/filesystem/config/asyncapi/mqtt.yaml"); - Path path = Path.of(url.toURI()); - Mockito.doReturn(path).when(engineContext).resolvePath("asyncapi/mqtt.yaml"); - - CatalogContext context = catalog.supply(engineContext); - assertThat(context, instanceOf(FilesystemCatalogContext.class)); - - FilesystemOptionsConfig catalogConfig = - new FilesystemOptionsConfig(singletonList( - new FilesystemSchemaConfig("subject1", "asyncapi/mqtt.yaml"))); - - CatalogConfig options = new CatalogConfig("test", "catalog0", "filesystem", catalogConfig); - CatalogHandler handler = context.attach(options); - - assertThat(handler, instanceOf(FilesystemCatalogHandler.class)); + assertEquals(FilesystemCatalog.NAME, catalog.name()); } } diff --git a/runtime/catalog-inline/src/test/java/io/aklivity/zilla/runtime/catalog/inline/InlineCatalogFactoryTest.java b/runtime/catalog-inline/src/test/java/io/aklivity/zilla/runtime/catalog/inline/InlineCatalogFactoryTest.java index 972e5345f6..8c3d6ef256 100644 --- a/runtime/catalog-inline/src/test/java/io/aklivity/zilla/runtime/catalog/inline/InlineCatalogFactoryTest.java +++ b/runtime/catalog-inline/src/test/java/io/aklivity/zilla/runtime/catalog/inline/InlineCatalogFactoryTest.java @@ -14,7 +14,6 @@ */ package io.aklivity.zilla.runtime.catalog.inline; -import static java.util.Collections.singletonList; import static org.hamcrest.CoreMatchers.instanceOf; import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.Assert.assertEquals; @@ -22,18 +21,13 @@ import org.junit.Test; -import io.aklivity.zilla.runtime.catalog.inline.config.InlineOptionsConfig; -import io.aklivity.zilla.runtime.catalog.inline.config.InlineSchemaConfig; import io.aklivity.zilla.runtime.catalog.inline.internal.InlineCatalog; import io.aklivity.zilla.runtime.catalog.inline.internal.InlineCatalogContext; -import io.aklivity.zilla.runtime.catalog.inline.internal.InlineCatalogHandler; import io.aklivity.zilla.runtime.engine.Configuration; import io.aklivity.zilla.runtime.engine.EngineContext; import io.aklivity.zilla.runtime.engine.catalog.Catalog; import io.aklivity.zilla.runtime.engine.catalog.CatalogContext; import io.aklivity.zilla.runtime.engine.catalog.CatalogFactory; -import io.aklivity.zilla.runtime.engine.catalog.CatalogHandler; -import io.aklivity.zilla.runtime.engine.config.CatalogConfig; public class InlineCatalogFactoryTest { @@ -42,19 +36,12 @@ public void shouldLoadAndCreate() { Configuration config = new Configuration(); CatalogFactory factory = CatalogFactory.instantiate(); - Catalog catalog = factory.create("inline", config); + Catalog catalog = factory.create(InlineCatalog.NAME, config); assertThat(catalog, instanceOf(InlineCatalog.class)); - assertEquals("inline", catalog.name()); + assertEquals(InlineCatalog.NAME, catalog.name()); CatalogContext context = catalog.supply(mock(EngineContext.class)); assertThat(context, instanceOf(InlineCatalogContext.class)); - - InlineOptionsConfig catalogConfig = - new InlineOptionsConfig(singletonList( - new InlineSchemaConfig("subject1", "latest", "{\"type\": \"string\"}"))); - CatalogConfig options = new CatalogConfig("test", "catalog0", "inline", catalogConfig); - CatalogHandler handler = context.attach(options); - assertThat(handler, instanceOf(InlineCatalogHandler.class)); } } diff --git a/runtime/catalog-karapace/src/test/java/io/aklivity/zilla/runtime/catalog/karapace/internal/KarapaceCatalogFactoryTest.java b/runtime/catalog-karapace/src/test/java/io/aklivity/zilla/runtime/catalog/karapace/internal/KarapaceCatalogFactoryTest.java index 830cd5408e..64362effa8 100644 --- a/runtime/catalog-karapace/src/test/java/io/aklivity/zilla/runtime/catalog/karapace/internal/KarapaceCatalogFactoryTest.java +++ b/runtime/catalog-karapace/src/test/java/io/aklivity/zilla/runtime/catalog/karapace/internal/KarapaceCatalogFactoryTest.java @@ -17,20 +17,12 @@ import static org.hamcrest.CoreMatchers.instanceOf; import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.Assert.assertEquals; -import static org.mockito.Mockito.mock; - -import java.time.Duration; import org.junit.Test; -import io.aklivity.zilla.runtime.catalog.karapace.internal.config.KarapaceOptionsConfig; import io.aklivity.zilla.runtime.engine.Configuration; -import io.aklivity.zilla.runtime.engine.EngineContext; import io.aklivity.zilla.runtime.engine.catalog.Catalog; -import io.aklivity.zilla.runtime.engine.catalog.CatalogContext; import io.aklivity.zilla.runtime.engine.catalog.CatalogFactory; -import io.aklivity.zilla.runtime.engine.catalog.CatalogHandler; -import io.aklivity.zilla.runtime.engine.config.CatalogConfig; public class KarapaceCatalogFactoryTest { @@ -39,22 +31,9 @@ public void shouldLoadAndCreate() { Configuration config = new Configuration(); CatalogFactory factory = CatalogFactory.instantiate(); - Catalog catalog = factory.create("karapace", config); + Catalog catalog = factory.create(KarapaceCatalog.NAME, config); assertThat(catalog, instanceOf(KarapaceCatalog.class)); - assertEquals("karapace", catalog.name()); - - CatalogContext context = catalog.supply(mock(EngineContext.class)); - assertThat(context, instanceOf(KarapaceCatalogContext.class)); - - KarapaceOptionsConfig catalogConfig = KarapaceOptionsConfig.builder() - .url("http://localhost:8081") - .context("default") - .maxAge(Duration.ofSeconds(100)) - .build(); - CatalogConfig options = new CatalogConfig("test", "catalog0", "karapace", catalogConfig); - CatalogHandler handler = context.attach(options); - - assertThat(handler, instanceOf(KarapaceCatalogHandler.class)); + assertEquals(KarapaceCatalog.NAME, catalog.name()); } } diff --git a/runtime/engine/src/main/java/io/aklivity/zilla/runtime/engine/config/CatalogConfig.java b/runtime/engine/src/main/java/io/aklivity/zilla/runtime/engine/config/CatalogConfig.java index 4cc29bab7a..2cb244f059 100644 --- a/runtime/engine/src/main/java/io/aklivity/zilla/runtime/engine/config/CatalogConfig.java +++ b/runtime/engine/src/main/java/io/aklivity/zilla/runtime/engine/config/CatalogConfig.java @@ -16,6 +16,9 @@ package io.aklivity.zilla.runtime.engine.config; import static java.util.Objects.requireNonNull; +import static java.util.function.Function.identity; + +import java.util.function.Function; public class CatalogConfig { @@ -27,7 +30,18 @@ public class CatalogConfig public final String type; public final OptionsConfig options; - public CatalogConfig( + public static CatalogConfigBuilder builder() + { + return new CatalogConfigBuilder<>(identity()); + } + + public static CatalogConfigBuilder builder( + Function mapper) + { + return new CatalogConfigBuilder<>(mapper); + } + + CatalogConfig( String namespace, String name, String type, diff --git a/runtime/engine/src/main/java/io/aklivity/zilla/runtime/engine/config/CatalogConfigBuilder.java b/runtime/engine/src/main/java/io/aklivity/zilla/runtime/engine/config/CatalogConfigBuilder.java index 6ab40c94ad..b407628c89 100644 --- a/runtime/engine/src/main/java/io/aklivity/zilla/runtime/engine/config/CatalogConfigBuilder.java +++ b/runtime/engine/src/main/java/io/aklivity/zilla/runtime/engine/config/CatalogConfigBuilder.java @@ -63,13 +63,13 @@ public CatalogConfigBuilder type( } public , C>> C options( - Function>, C> options) + Function>, C> options) { return options.apply(this::options); } public CatalogConfigBuilder options( - OptionsConfig options) + OptionsConfig options) { this.options = options; return this; diff --git a/runtime/engine/src/main/java/io/aklivity/zilla/runtime/engine/factory/Factory.java b/runtime/engine/src/main/java/io/aklivity/zilla/runtime/engine/factory/Factory.java index 803f955c08..dc87514367 100644 --- a/runtime/engine/src/main/java/io/aklivity/zilla/runtime/engine/factory/Factory.java +++ b/runtime/engine/src/main/java/io/aklivity/zilla/runtime/engine/factory/Factory.java @@ -32,6 +32,11 @@ protected static F instantiate( for (S factory : filter(factories)) { factoriesByType.put(factory.type(), factory); + + for (String alias : factory.aliases()) + { + factoriesByType.put(alias, factory); + } } return construct.apply(unmodifiableMap(factoriesByType)); diff --git a/runtime/engine/src/main/java/io/aklivity/zilla/runtime/engine/factory/FactorySpi.java b/runtime/engine/src/main/java/io/aklivity/zilla/runtime/engine/factory/FactorySpi.java index 4e8d2a61f3..3c879365e4 100644 --- a/runtime/engine/src/main/java/io/aklivity/zilla/runtime/engine/factory/FactorySpi.java +++ b/runtime/engine/src/main/java/io/aklivity/zilla/runtime/engine/factory/FactorySpi.java @@ -15,7 +15,14 @@ */ package io.aklivity.zilla.runtime.engine.factory; +import java.util.Set; + public interface FactorySpi { String type(); + + default Set aliases() + { + return Set.of(); + } } diff --git a/runtime/engine/src/main/java/io/aklivity/zilla/runtime/engine/internal/config/CatalogAdapter.java b/runtime/engine/src/main/java/io/aklivity/zilla/runtime/engine/internal/config/CatalogAdapter.java index ce2d8e88f7..ddb6cac826 100644 --- a/runtime/engine/src/main/java/io/aklivity/zilla/runtime/engine/internal/config/CatalogAdapter.java +++ b/runtime/engine/src/main/java/io/aklivity/zilla/runtime/engine/internal/config/CatalogAdapter.java @@ -20,8 +20,8 @@ import jakarta.json.JsonObjectBuilder; import io.aklivity.zilla.runtime.engine.config.CatalogConfig; +import io.aklivity.zilla.runtime.engine.config.CatalogConfigBuilder; import io.aklivity.zilla.runtime.engine.config.ConfigAdapterContext; -import io.aklivity.zilla.runtime.engine.config.OptionsConfig; import io.aklivity.zilla.runtime.engine.config.OptionsConfigAdapter; import io.aklivity.zilla.runtime.engine.config.OptionsConfigAdapterSpi; @@ -67,14 +67,20 @@ public CatalogConfig adaptFromJson( String name, JsonObject object) { + CatalogConfigBuilder builder = CatalogConfig.builder() + .namespace(namespace) + .name(name); + String type = object.getString(TYPE_NAME); + builder.type(type); options.adaptType(type); - OptionsConfig opts = object.containsKey(OPTIONS_NAME) ? - options.adaptFromJson(object.getJsonObject(OPTIONS_NAME)) : - null; + if (object.containsKey(OPTIONS_NAME)) + { + builder.options(options.adaptFromJson(object.getJsonObject(OPTIONS_NAME))); + } - return new CatalogConfig(namespace, name, type, opts); + return builder.build(); } } diff --git a/runtime/engine/src/test/java/io/aklivity/zilla/runtime/engine/test/internal/catalog/config/TestCatalogConfig.java b/runtime/engine/src/test/java/io/aklivity/zilla/runtime/engine/test/internal/catalog/config/TestCatalogConfig.java new file mode 100644 index 0000000000..8bea385019 --- /dev/null +++ b/runtime/engine/src/test/java/io/aklivity/zilla/runtime/engine/test/internal/catalog/config/TestCatalogConfig.java @@ -0,0 +1,31 @@ +/* + * Copyright 2021-2023 Aklivity Inc. + * + * Aklivity licenses this file to you 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 io.aklivity.zilla.runtime.engine.test.internal.catalog.config; + +import io.aklivity.zilla.runtime.engine.config.CatalogConfig; + +public class TestCatalogConfig +{ + public final long id; + public final TestCatalogOptionsConfig options; + + public TestCatalogConfig( + CatalogConfig catalog) + { + this.id = catalog.id; + this.options = (TestCatalogOptionsConfig) catalog.options; + } +} diff --git a/runtime/engine/src/test/java/io/aklivity/zilla/runtime/engine/test/internal/catalog/config/TestCatalogOptionsConfig.java b/runtime/engine/src/test/java/io/aklivity/zilla/runtime/engine/test/internal/catalog/config/TestCatalogOptionsConfig.java index 9a7a33b0cb..55ea818fd8 100644 --- a/runtime/engine/src/test/java/io/aklivity/zilla/runtime/engine/test/internal/catalog/config/TestCatalogOptionsConfig.java +++ b/runtime/engine/src/test/java/io/aklivity/zilla/runtime/engine/test/internal/catalog/config/TestCatalogOptionsConfig.java @@ -32,7 +32,7 @@ public static TestCatalogOptionsConfigBuilder builder( } public static TestCatalogOptionsConfigBuilder builder( - Function mapper) + Function mapper) { return new TestCatalogOptionsConfigBuilder<>(mapper); } diff --git a/runtime/model-avro/src/test/java/io/aklivity/zilla/runtime/model/avro/internal/AvroModelTest.java b/runtime/model-avro/src/test/java/io/aklivity/zilla/runtime/model/avro/internal/AvroModelTest.java index cf276a226e..2ef491ecd5 100644 --- a/runtime/model-avro/src/test/java/io/aklivity/zilla/runtime/model/avro/internal/AvroModelTest.java +++ b/runtime/model-avro/src/test/java/io/aklivity/zilla/runtime/model/avro/internal/AvroModelTest.java @@ -31,6 +31,7 @@ import io.aklivity.zilla.runtime.engine.model.ConverterHandler; import io.aklivity.zilla.runtime.engine.model.function.ValueConsumer; import io.aklivity.zilla.runtime.engine.test.internal.catalog.TestCatalogHandler; +import io.aklivity.zilla.runtime.engine.test.internal.catalog.config.TestCatalogConfig; import io.aklivity.zilla.runtime.engine.test.internal.catalog.config.TestCatalogOptionsConfig; import io.aklivity.zilla.runtime.model.avro.config.AvroModelConfig; @@ -60,16 +61,6 @@ public class AvroModelTest "{\"name\":\"state\",\"type\":\"string\"},{\"name\":\"zip\",\"type\":\"string\"}]}}}," + "{\"name\":\"source\",\"type\":[\"null\",\"string\"],\"default\":null}]}"; - private final AvroModelConfig avroConfig = AvroModelConfig.builder() - .catalog() - .name("test0") - .schema() - .strategy("topic") - .version("latest") - .subject("test-value") - .build() - .build() - .build(); private EngineContext context; @Before @@ -81,13 +72,28 @@ public void init() @Test public void shouldVerifyValidAvroEvent() { - TestCatalogOptionsConfig testCatalogOptionsConfig = TestCatalogOptionsConfig.builder() - .id(9) - .schema(SCHEMA) + TestCatalogConfig catalog = CatalogConfig.builder(TestCatalogConfig::new) + .namespace("test") + .name("test0") + .type("test") + .options(TestCatalogOptionsConfig::builder) + .id(9) + .schema(SCHEMA) + .build() + .build(); + AvroModelConfig model = AvroModelConfig.builder() + .catalog() + .name("test0") + .schema() + .strategy("topic") + .version("latest") + .subject("test-value") + .build() + .build() .build(); - CatalogConfig catalogConfig = new CatalogConfig("test", "test0", "test", testCatalogOptionsConfig); - when(context.supplyCatalog(catalogConfig.id)).thenReturn(new TestCatalogHandler(testCatalogOptionsConfig)); - AvroReadConverterHandler converter = new AvroReadConverterHandler(avroConfig, context); + + when(context.supplyCatalog(catalog.id)).thenReturn(new TestCatalogHandler(catalog.options)); + AvroReadConverterHandler converter = new AvroReadConverterHandler(model, context); DirectBuffer data = new UnsafeBuffer(); @@ -100,13 +106,28 @@ public void shouldVerifyValidAvroEvent() @Test public void shouldWriteValidAvroEvent() { - TestCatalogOptionsConfig testCatalogOptionsConfig = TestCatalogOptionsConfig.builder() - .id(1) - .schema(SCHEMA) + TestCatalogConfig catalog = CatalogConfig.builder(TestCatalogConfig::new) + .namespace("test") + .name("test0") + .type("test") + .options(TestCatalogOptionsConfig::builder) + .id(9) + .schema(SCHEMA) + .build() + .build(); + AvroModelConfig model = AvroModelConfig.builder() + .catalog() + .name("test0") + .schema() + .strategy("topic") + .version("latest") + .subject("test-value") + .build() + .build() .build(); - CatalogConfig catalogConfig = new CatalogConfig("test", "test0", "test", testCatalogOptionsConfig); - when(context.supplyCatalog(catalogConfig.id)).thenReturn(new TestCatalogHandler(testCatalogOptionsConfig)); - AvroWriteConverterHandler converter = new AvroWriteConverterHandler(avroConfig, context); + + when(context.supplyCatalog(catalog.id)).thenReturn(new TestCatalogHandler(catalog.options)); + AvroWriteConverterHandler converter = new AvroWriteConverterHandler(model, context); DirectBuffer data = new UnsafeBuffer(); @@ -119,15 +140,30 @@ public void shouldWriteValidAvroEvent() @Test public void shouldVerifyInvalidAvroEvent() { - TestCatalogOptionsConfig testCatalogOptionsConfig = TestCatalogOptionsConfig.builder() - .id(9) - .schema(SCHEMA) + TestCatalogConfig catalog = CatalogConfig.builder(TestCatalogConfig::new) + .namespace("test") + .name("test0") + .type("test") + .options(TestCatalogOptionsConfig::builder) + .id(9) + .schema(SCHEMA) + .build() + .build(); + AvroModelConfig model = AvroModelConfig.builder() + .catalog() + .name("test0") + .schema() + .strategy("topic") + .version("latest") + .subject("test-value") + .build() + .build() .build(); - CatalogConfig catalogConfig = new CatalogConfig("test", "test0", "test", testCatalogOptionsConfig); - when(context.supplyCatalog(catalogConfig.id)).thenReturn(new TestCatalogHandler(testCatalogOptionsConfig)); + + when(context.supplyCatalog(catalog.id)).thenReturn(new TestCatalogHandler(catalog.options)); when(context.clock()).thenReturn(Clock.systemUTC()); when(context.supplyEventWriter()).thenReturn(mock(MessageConsumer.class)); - AvroReadConverterHandler converter = new AvroReadConverterHandler(avroConfig, context); + AvroReadConverterHandler converter = new AvroReadConverterHandler(model, context); DirectBuffer data = new UnsafeBuffer(); @@ -139,24 +175,29 @@ public void shouldVerifyInvalidAvroEvent() @Test public void shouldReadAvroEventExpectJson() { - TestCatalogOptionsConfig testCatalogOptionsConfig = TestCatalogOptionsConfig.builder() - .id(9) - .schema(SCHEMA) + TestCatalogConfig catalog = CatalogConfig.builder(TestCatalogConfig::new) + .namespace("test") + .name("test0") + .type("test") + .options(TestCatalogOptionsConfig::builder) + .id(9) + .schema(SCHEMA) + .build() .build(); - CatalogConfig catalogConfig = new CatalogConfig("test", "test0", "test", testCatalogOptionsConfig); - when(context.supplyCatalog(catalogConfig.id)).thenReturn(new TestCatalogHandler(testCatalogOptionsConfig)); - AvroModelConfig config = AvroModelConfig.builder() - .view("json") - .catalog() - .name("test0") - .schema() - .strategy("topic") - .version("latest") - .subject("test-value") - .build() + AvroModelConfig model = AvroModelConfig.builder() + .view("json") + .catalog() + .name("test0") + .schema() + .strategy("topic") + .version("latest") + .subject("test-value") .build() - .build(); - AvroReadConverterHandler converter = new AvroReadConverterHandler(config, context); + .build() + .build(); + + when(context.supplyCatalog(catalog.id)).thenReturn(new TestCatalogHandler(catalog.options)); + AvroReadConverterHandler converter = new AvroReadConverterHandler(model, context); DirectBuffer data = new UnsafeBuffer(); @@ -182,24 +223,29 @@ public void shouldReadAvroEventExpectJson() @Test public void shouldWriteJsonEventExpectAvro() { - TestCatalogOptionsConfig testCatalogOptionsConfig = TestCatalogOptionsConfig.builder() - .id(9) - .schema(SCHEMA) + TestCatalogConfig catalog = CatalogConfig.builder(TestCatalogConfig::new) + .namespace("test") + .name("test0") + .type("test") + .options(TestCatalogOptionsConfig::builder) + .id(9) + .schema(SCHEMA) + .build() .build(); - CatalogConfig catalogConfig = new CatalogConfig("test", "test0", "test", testCatalogOptionsConfig); - when(context.supplyCatalog(catalogConfig.id)).thenReturn(new TestCatalogHandler(testCatalogOptionsConfig)); - AvroModelConfig config = AvroModelConfig.builder() - .view("json") - .catalog() - .name("test0") - .schema() - .strategy("topic") - .version("latest") - .subject("test-value") - .build() + AvroModelConfig model = AvroModelConfig.builder() + .view("json") + .catalog() + .name("test0") + .schema() + .strategy("topic") + .version("latest") + .subject("test-value") .build() - .build(); - AvroWriteConverterHandler converter = new AvroWriteConverterHandler(config, context); + .build() + .build(); + + when(context.supplyCatalog(catalog.id)).thenReturn(new TestCatalogHandler(catalog.options)); + AvroWriteConverterHandler converter = new AvroWriteConverterHandler(model, context); DirectBuffer expected = new UnsafeBuffer(); @@ -224,24 +270,29 @@ public void shouldWriteJsonEventExpectAvro() @Test public void shouldVerifyPaddingLength() { - TestCatalogOptionsConfig testCatalogOptionsConfig = TestCatalogOptionsConfig.builder() - .id(9) - .schema(COMPLEX_SCHEMA) + TestCatalogConfig catalog = CatalogConfig.builder(TestCatalogConfig::new) + .namespace("test") + .name("test0") + .type("test") + .options(TestCatalogOptionsConfig::builder) + .id(9) + .schema(COMPLEX_SCHEMA) + .build() .build(); - CatalogConfig catalogConfig = new CatalogConfig("test", "test0", "test", testCatalogOptionsConfig); - when(context.supplyCatalog(catalogConfig.id)).thenReturn(new TestCatalogHandler(testCatalogOptionsConfig)); - AvroModelConfig config = AvroModelConfig.builder() - .view("json") - .catalog() - .name("test0") - .schema() - .strategy("topic") - .version("latest") - .subject("test-value") - .build() + AvroModelConfig model = AvroModelConfig.builder() + .view("json") + .catalog() + .name("test0") + .schema() + .strategy("topic") + .version("latest") + .subject("test-value") .build() - .build(); - AvroReadConverterHandler converter = new AvroReadConverterHandler(config, context); + .build() + .build(); + + when(context.supplyCatalog(catalog.id)).thenReturn(new TestCatalogHandler(catalog.options)); + AvroReadConverterHandler converter = new AvroReadConverterHandler(model, context); DirectBuffer data = new UnsafeBuffer(); @@ -250,19 +301,33 @@ public void shouldVerifyPaddingLength() data.wrap(bytes, 0, bytes.length); assertEquals(260, converter.padding(data, 0, data.capacity())); - } @Test public void shouldExtract() { - TestCatalogOptionsConfig testCatalogOptionsConfig = TestCatalogOptionsConfig.builder() - .id(9) - .schema(SCHEMA_OBJECT) + TestCatalogConfig catalog = CatalogConfig.builder(TestCatalogConfig::new) + .namespace("test") + .name("test0") + .type("test") + .options(TestCatalogOptionsConfig::builder) + .id(9) + .schema(SCHEMA_OBJECT) + .build() .build(); - CatalogConfig catalogConfig = new CatalogConfig("test", "test0", "test", testCatalogOptionsConfig); - when(context.supplyCatalog(catalogConfig.id)).thenReturn(new TestCatalogHandler(testCatalogOptionsConfig)); - AvroReadConverterHandler converter = new AvroReadConverterHandler(avroConfig, context); + AvroModelConfig model = AvroModelConfig.builder() + .catalog() + .name("test0") + .schema() + .strategy("topic") + .version("latest") + .subject("test-value") + .build() + .build() + .build(); + + when(context.supplyCatalog(catalog.id)).thenReturn(new TestCatalogHandler(catalog.options)); + AvroReadConverterHandler converter = new AvroReadConverterHandler(model, context); String stringPath = "$.stringField"; converter.extract(stringPath); diff --git a/runtime/model-json/src/test/java/io/aklivity/zilla/runtime/model/json/internal/JsonConverterTest.java b/runtime/model-json/src/test/java/io/aklivity/zilla/runtime/model/json/internal/JsonConverterTest.java index 83fea69d75..e66a963bd1 100644 --- a/runtime/model-json/src/test/java/io/aklivity/zilla/runtime/model/json/internal/JsonConverterTest.java +++ b/runtime/model-json/src/test/java/io/aklivity/zilla/runtime/model/json/internal/JsonConverterTest.java @@ -32,6 +32,7 @@ import io.aklivity.zilla.runtime.engine.model.ConverterHandler; import io.aklivity.zilla.runtime.engine.model.function.ValueConsumer; import io.aklivity.zilla.runtime.engine.test.internal.catalog.TestCatalogHandler; +import io.aklivity.zilla.runtime.engine.test.internal.catalog.config.TestCatalogConfig; import io.aklivity.zilla.runtime.engine.test.internal.catalog.config.TestCatalogOptionsConfig; import io.aklivity.zilla.runtime.model.json.config.JsonModelConfig; @@ -63,17 +64,6 @@ public class JsonConverterTest OBJECT_SCHEMA + "}"; - private final JsonModelConfig config = JsonModelConfig.builder() - .catalog() - .name("test0") - .schema() - .strategy("topic") - .subject(null) - .version("latest") - .id(0) - .build() - .build() - .build(); private EngineContext context; @Before @@ -85,16 +75,32 @@ public void init() @Test public void shouldVerifyValidJsonObject() { - TestCatalogOptionsConfig testCatalogOptionsConfig = TestCatalogOptionsConfig.builder() - .id(9) - .schema(OBJECT_SCHEMA) + TestCatalogConfig catalog = CatalogConfig.builder(TestCatalogConfig::new) + .namespace("test") + .name("test0") + .type("test") + .options(TestCatalogOptionsConfig::builder) + .id(9) + .schema(OBJECT_SCHEMA) + .build() .build(); - CatalogConfig catalogConfig = new CatalogConfig("test", "test0", "test", testCatalogOptionsConfig); - when(context.supplyCatalog(catalogConfig.id)).thenReturn(new TestCatalogHandler(testCatalogOptionsConfig)); - JsonReadConverterHandler converter = new JsonReadConverterHandler(config, context); - DirectBuffer data = new UnsafeBuffer(); + JsonModelConfig model = JsonModelConfig.builder() + .catalog() + .name("test0") + .schema() + .strategy("topic") + .subject(null) + .version("latest") + .id(0) + .build() + .build() + .build(); + when(context.supplyCatalog(catalog.id)).thenReturn(new TestCatalogHandler(catalog.options)); + JsonReadConverterHandler converter = new JsonReadConverterHandler(model, context); + + DirectBuffer data = new UnsafeBuffer(); String payload = "{" + "\"id\": \"123\"," + @@ -102,19 +108,37 @@ public void shouldVerifyValidJsonObject() "}"; byte[] bytes = payload.getBytes(); data.wrap(bytes, 0, bytes.length); + assertEquals(data.capacity(), converter.convert(0L, 0L, data, 0, data.capacity(), ValueConsumer.NOP)); } @Test public void shouldVerifyValidJsonArray() { - TestCatalogOptionsConfig testCatalogOptionsConfig = TestCatalogOptionsConfig.builder() - .id(9) - .schema(ARRAY_SCHEMA) + TestCatalogConfig catalog = CatalogConfig.builder(TestCatalogConfig::new) + .namespace("test") + .name("test0") + .type("test") + .options(TestCatalogOptionsConfig::builder) + .id(9) + .schema(ARRAY_SCHEMA) + .build() + .build(); + + JsonModelConfig model = JsonModelConfig.builder() + .catalog() + .name("test0") + .schema() + .strategy("topic") + .subject(null) + .version("latest") + .id(0) + .build() + .build() .build(); - CatalogConfig catalogConfig = new CatalogConfig("test", "test0", "test", testCatalogOptionsConfig); - when(context.supplyCatalog(catalogConfig.id)).thenReturn(new TestCatalogHandler(testCatalogOptionsConfig)); - JsonWriteConverterHandler converter = new JsonWriteConverterHandler(config, context); + + when(context.supplyCatalog(catalog.id)).thenReturn(new TestCatalogHandler(catalog.options)); + JsonWriteConverterHandler converter = new JsonWriteConverterHandler(model, context); DirectBuffer data = new UnsafeBuffer(); @@ -134,15 +158,32 @@ public void shouldVerifyValidJsonArray() @Test public void shouldVerifyInvalidJsonObject() { - TestCatalogOptionsConfig testCatalogOptionsConfig = TestCatalogOptionsConfig.builder() - .id(9) - .schema(OBJECT_SCHEMA) + TestCatalogConfig catalog = CatalogConfig.builder(TestCatalogConfig::new) + .namespace("test") + .name("test0") + .type("test") + .options(TestCatalogOptionsConfig::builder) + .id(9) + .schema(OBJECT_SCHEMA) + .build() .build(); - CatalogConfig catalogConfig = new CatalogConfig("test", "test0", "test", testCatalogOptionsConfig); - when(context.supplyCatalog(catalogConfig.id)).thenReturn(new TestCatalogHandler(testCatalogOptionsConfig)); + + JsonModelConfig model = JsonModelConfig.builder() + .catalog() + .name("test0") + .schema() + .strategy("topic") + .subject(null) + .version("latest") + .id(0) + .build() + .build() + .build(); + + when(context.supplyCatalog(catalog.id)).thenReturn(new TestCatalogHandler(catalog.options)); when(context.clock()).thenReturn(Clock.systemUTC()); when(context.supplyEventWriter()).thenReturn(mock(MessageConsumer.class)); - JsonReadConverterHandler converter = new JsonReadConverterHandler(config, context); + JsonReadConverterHandler converter = new JsonReadConverterHandler(model, context); DirectBuffer data = new UnsafeBuffer(); @@ -164,13 +205,30 @@ public void shouldVerifyInvalidJsonObject() @Test public void shouldWriteValidJsonData() { - TestCatalogOptionsConfig testCatalogOptionsConfig = TestCatalogOptionsConfig.builder() - .id(9) - .schema(OBJECT_SCHEMA) + TestCatalogConfig catalog = CatalogConfig.builder(TestCatalogConfig::new) + .namespace("test") + .name("test0") + .type("test") + .options(TestCatalogOptionsConfig::builder) + .id(9) + .schema(OBJECT_SCHEMA) + .build() + .build(); + + JsonModelConfig model = JsonModelConfig.builder() + .catalog() + .name("test0") + .schema() + .strategy("topic") + .subject(null) + .version("latest") + .id(0) + .build() + .build() .build(); - CatalogConfig catalogConfig = new CatalogConfig("test", "test0", "test", testCatalogOptionsConfig); - when(context.supplyCatalog(catalogConfig.id)).thenReturn(new TestCatalogHandler(testCatalogOptionsConfig)); - JsonWriteConverterHandler converter = new JsonWriteConverterHandler(config, context); + + when(context.supplyCatalog(catalog.id)).thenReturn(new TestCatalogHandler(catalog.options)); + JsonWriteConverterHandler converter = new JsonWriteConverterHandler(model, context); DirectBuffer data = new UnsafeBuffer(); @@ -188,15 +246,32 @@ public void shouldWriteValidJsonData() @Test public void shouldVerifyInvalidJsonArray() { - TestCatalogOptionsConfig testCatalogOptionsConfig = TestCatalogOptionsConfig.builder() - .id(9) - .schema(ARRAY_SCHEMA) + TestCatalogConfig catalog = CatalogConfig.builder(TestCatalogConfig::new) + .namespace("test") + .name("test0") + .type("test") + .options(TestCatalogOptionsConfig::builder) + .id(9) + .schema(ARRAY_SCHEMA) + .build() + .build(); + + JsonModelConfig model = JsonModelConfig.builder() + .catalog() + .name("test0") + .schema() + .strategy("topic") + .subject(null) + .version("latest") + .id(0) + .build() + .build() .build(); - CatalogConfig catalogConfig = new CatalogConfig("test", "test0", "test", testCatalogOptionsConfig); - when(context.supplyCatalog(catalogConfig.id)).thenReturn(new TestCatalogHandler(testCatalogOptionsConfig)); + + when(context.supplyCatalog(catalog.id)).thenReturn(new TestCatalogHandler(catalog.options)); when(context.clock()).thenReturn(Clock.systemUTC()); when(context.supplyEventWriter()).thenReturn(mock(MessageConsumer.class)); - JsonWriteConverterHandler converter = new JsonWriteConverterHandler(config, context); + JsonWriteConverterHandler converter = new JsonWriteConverterHandler(model, context); DirectBuffer data = new UnsafeBuffer(); @@ -216,13 +291,31 @@ public void shouldVerifyInvalidJsonArray() @Test public void shouldExtract() { - TestCatalogOptionsConfig testCatalogOptionsConfig = TestCatalogOptionsConfig.builder() - .id(9) - .schema(OBJECT_SCHEMA) + TestCatalogConfig catalog = CatalogConfig.builder(TestCatalogConfig::new) + .namespace("test") + .name("test0") + .type("test") + .options(TestCatalogOptionsConfig::builder) + .id(9) + .schema(OBJECT_SCHEMA) + .build() + .build(); + + JsonModelConfig model = JsonModelConfig.builder() + .catalog() + .name("test0") + .schema() + .strategy("topic") + .subject(null) + .version("latest") + .id(0) + .build() + .build() .build(); - CatalogConfig catalogConfig = new CatalogConfig("test", "test0", "test", testCatalogOptionsConfig); - when(context.supplyCatalog(catalogConfig.id)).thenReturn(new TestCatalogHandler(testCatalogOptionsConfig)); - JsonReadConverterHandler converter = new JsonReadConverterHandler(config, context); + + when(context.supplyCatalog(catalog.id)).thenReturn(new TestCatalogHandler(catalog.options)); + when(context.clock()).thenReturn(Clock.systemUTC()); + JsonReadConverterHandler converter = new JsonReadConverterHandler(model, context); String statusPath = "$.status"; converter.extract(statusPath); diff --git a/runtime/model-json/src/test/java/io/aklivity/zilla/runtime/model/json/internal/JsonValidatorTest.java b/runtime/model-json/src/test/java/io/aklivity/zilla/runtime/model/json/internal/JsonValidatorTest.java index e011ee11c3..61aa53430c 100644 --- a/runtime/model-json/src/test/java/io/aklivity/zilla/runtime/model/json/internal/JsonValidatorTest.java +++ b/runtime/model-json/src/test/java/io/aklivity/zilla/runtime/model/json/internal/JsonValidatorTest.java @@ -33,6 +33,7 @@ import io.aklivity.zilla.runtime.engine.config.CatalogConfig; import io.aklivity.zilla.runtime.engine.model.function.ValueConsumer; import io.aklivity.zilla.runtime.engine.test.internal.catalog.TestCatalogHandler; +import io.aklivity.zilla.runtime.engine.test.internal.catalog.config.TestCatalogConfig; import io.aklivity.zilla.runtime.engine.test.internal.catalog.config.TestCatalogOptionsConfig; import io.aklivity.zilla.runtime.model.json.config.JsonModelConfig; @@ -61,17 +62,6 @@ public class JsonValidatorTest OBJECT_SCHEMA + "}"; - private final JsonModelConfig config = JsonModelConfig.builder() - .catalog() - .name("test0") - .schema() - .strategy("topic") - .subject(null) - .version("latest") - .id(1) - .build() - .build() - .build(); private EngineContext context; @Before @@ -83,13 +73,30 @@ public void init() @Test public void shouldVerifyValidCompleteJsonObject() { - TestCatalogOptionsConfig testCatalogOptionsConfig = TestCatalogOptionsConfig.builder() - .id(1) - .schema(OBJECT_SCHEMA) + TestCatalogConfig catalog = CatalogConfig.builder(TestCatalogConfig::new) + .namespace("test") + .name("test0") + .type("test") + .options(TestCatalogOptionsConfig::builder) + .id(1) + .schema(OBJECT_SCHEMA) + .build() + .build(); + + JsonModelConfig model = JsonModelConfig.builder() + .catalog() + .name("test0") + .schema() + .strategy("topic") + .subject(null) + .version("latest") + .id(1) + .build() + .build() .build(); - CatalogConfig catalogConfig = new CatalogConfig("test", "test0", "test", testCatalogOptionsConfig); - when(context.supplyCatalog(catalogConfig.id)).thenReturn(new TestCatalogHandler(testCatalogOptionsConfig)); - JsonValidatorHandler validator = new JsonValidatorHandler(config, context); + + when(context.supplyCatalog(catalog.id)).thenReturn(new TestCatalogHandler(catalog.options)); + JsonValidatorHandler validator = new JsonValidatorHandler(model, context); DirectBuffer data = new UnsafeBuffer(); @@ -107,15 +114,32 @@ public void shouldVerifyValidCompleteJsonObject() @Test public void shouldVerifyInvalidCompleteJsonObject() { - TestCatalogOptionsConfig testCatalogOptionsConfig = TestCatalogOptionsConfig.builder() - .id(1) - .schema(OBJECT_SCHEMA) + TestCatalogConfig catalog = CatalogConfig.builder(TestCatalogConfig::new) + .namespace("test") + .name("test0") + .type("test") + .options(TestCatalogOptionsConfig::builder) + .id(1) + .schema(OBJECT_SCHEMA) + .build() + .build(); + + JsonModelConfig model = JsonModelConfig.builder() + .catalog() + .name("test0") + .schema() + .strategy("topic") + .subject(null) + .version("latest") + .id(1) + .build() + .build() .build(); - CatalogConfig catalogConfig = new CatalogConfig("test", "test0", "test", testCatalogOptionsConfig); - when(context.supplyCatalog(catalogConfig.id)).thenReturn(new TestCatalogHandler(testCatalogOptionsConfig)); + + when(context.supplyCatalog(catalog.id)).thenReturn(new TestCatalogHandler(catalog.options)); when(context.clock()).thenReturn(Clock.systemUTC()); when(context.supplyEventWriter()).thenReturn(mock(MessageConsumer.class)); - JsonValidatorHandler validator = new JsonValidatorHandler(config, context); + JsonValidatorHandler validator = new JsonValidatorHandler(model, context); DirectBuffer data = new UnsafeBuffer(); @@ -133,13 +157,30 @@ public void shouldVerifyInvalidCompleteJsonObject() @Test public void shouldVerifyValidFragmentedJsonObject() { - TestCatalogOptionsConfig testCatalogOptionsConfig = TestCatalogOptionsConfig.builder() - .id(1) - .schema(OBJECT_SCHEMA) + TestCatalogConfig catalog = CatalogConfig.builder(TestCatalogConfig::new) + .namespace("test") + .name("test0") + .type("test") + .options(TestCatalogOptionsConfig::builder) + .id(1) + .schema(OBJECT_SCHEMA) + .build() .build(); - CatalogConfig catalogConfig = new CatalogConfig("test", "test0", "test", testCatalogOptionsConfig); - when(context.supplyCatalog(catalogConfig.id)).thenReturn(new TestCatalogHandler(testCatalogOptionsConfig)); - JsonValidatorHandler validator = new JsonValidatorHandler(config, context); + + JsonModelConfig model = JsonModelConfig.builder() + .catalog() + .name("test0") + .schema() + .strategy("topic") + .subject(null) + .version("latest") + .id(1) + .build() + .build() + .build(); + + when(context.supplyCatalog(catalog.id)).thenReturn(new TestCatalogHandler(catalog.options)); + JsonValidatorHandler validator = new JsonValidatorHandler(model, context); DirectBuffer data = new UnsafeBuffer(); @@ -158,15 +199,32 @@ public void shouldVerifyValidFragmentedJsonObject() @Test public void shouldVerifyInvalidFragmentedJsonObject() { - TestCatalogOptionsConfig testCatalogOptionsConfig = TestCatalogOptionsConfig.builder() - .id(1) - .schema(OBJECT_SCHEMA) + TestCatalogConfig catalog = CatalogConfig.builder(TestCatalogConfig::new) + .namespace("test") + .name("test0") + .type("test") + .options(TestCatalogOptionsConfig::builder) + .id(1) + .schema(OBJECT_SCHEMA) + .build() + .build(); + + JsonModelConfig model = JsonModelConfig.builder() + .catalog() + .name("test0") + .schema() + .strategy("topic") + .subject(null) + .version("latest") + .id(1) + .build() + .build() .build(); - CatalogConfig catalogConfig = new CatalogConfig("test", "test0", "test", testCatalogOptionsConfig); - when(context.supplyCatalog(catalogConfig.id)).thenReturn(new TestCatalogHandler(testCatalogOptionsConfig)); + + when(context.supplyCatalog(catalog.id)).thenReturn(new TestCatalogHandler(catalog.options)); when(context.clock()).thenReturn(Clock.systemUTC()); when(context.supplyEventWriter()).thenReturn(mock(MessageConsumer.class)); - JsonValidatorHandler validator = new JsonValidatorHandler(config, context); + JsonValidatorHandler validator = new JsonValidatorHandler(model, context); DirectBuffer data = new UnsafeBuffer(); @@ -185,13 +243,30 @@ public void shouldVerifyInvalidFragmentedJsonObject() @Test public void shouldVerifyValidJsonArray() { - TestCatalogOptionsConfig testCatalogOptionsConfig = TestCatalogOptionsConfig.builder() - .id(1) - .schema(ARRAY_SCHEMA) + TestCatalogConfig catalog = CatalogConfig.builder(TestCatalogConfig::new) + .namespace("test") + .name("test0") + .type("test") + .options(TestCatalogOptionsConfig::builder) + .id(1) + .schema(ARRAY_SCHEMA) + .build() + .build(); + + JsonModelConfig model = JsonModelConfig.builder() + .catalog() + .name("test0") + .schema() + .strategy("topic") + .subject(null) + .version("latest") + .id(1) + .build() + .build() .build(); - CatalogConfig catalogConfig = new CatalogConfig("test", "test0", "test", testCatalogOptionsConfig); - when(context.supplyCatalog(catalogConfig.id)).thenReturn(new TestCatalogHandler(testCatalogOptionsConfig)); - JsonValidatorHandler validator = new JsonValidatorHandler(config, context); + + when(context.supplyCatalog(catalog.id)).thenReturn(new TestCatalogHandler(catalog.options)); + JsonValidatorHandler validator = new JsonValidatorHandler(model, context); DirectBuffer data = new UnsafeBuffer(); diff --git a/runtime/model-protobuf/src/test/java/io/aklivity/zilla/runtime/model/protobuf/internal/ProtobufModelTest.java b/runtime/model-protobuf/src/test/java/io/aklivity/zilla/runtime/model/protobuf/internal/ProtobufModelTest.java index 7813afc5c1..b48a1f645b 100644 --- a/runtime/model-protobuf/src/test/java/io/aklivity/zilla/runtime/model/protobuf/internal/ProtobufModelTest.java +++ b/runtime/model-protobuf/src/test/java/io/aklivity/zilla/runtime/model/protobuf/internal/ProtobufModelTest.java @@ -32,6 +32,7 @@ import io.aklivity.zilla.runtime.engine.model.ConverterHandler; import io.aklivity.zilla.runtime.engine.model.function.ValueConsumer; import io.aklivity.zilla.runtime.engine.test.internal.catalog.TestCatalogHandler; +import io.aklivity.zilla.runtime.engine.test.internal.catalog.config.TestCatalogConfig; import io.aklivity.zilla.runtime.engine.test.internal.catalog.config.TestCatalogOptionsConfig; import io.aklivity.zilla.runtime.model.protobuf.config.ProtobufModelConfig; @@ -98,29 +99,35 @@ public class ProtobufModelTest public void init() { context = mock(EngineContext.class); - TestCatalogOptionsConfig testCatalogOptionsConfig = TestCatalogOptionsConfig.builder() - .id(1) - .schema(SCHEMA) + + TestCatalogConfig catalog = CatalogConfig.builder(TestCatalogConfig::new) + .namespace("test") + .name("test0") + .type("test") + .options(TestCatalogOptionsConfig::builder) + .id(1) + .schema(SCHEMA) + .build() .build(); - CatalogConfig catalogConfig = new CatalogConfig("test", "test0", "test", testCatalogOptionsConfig); - when(context.supplyCatalog(catalogConfig.id)).thenReturn(new TestCatalogHandler(testCatalogOptionsConfig)); + + when(context.supplyCatalog(catalog.id)).thenReturn(new TestCatalogHandler(catalog.options)); } @Test public void shouldWriteValidProtobufEvent() { - ProtobufModelConfig config = ProtobufModelConfig.builder() - .catalog() - .name("test0") - .schema() - .strategy("topic") - .version("latest") - .subject("test-value") - .record("SimpleMessage") - .build() + ProtobufModelConfig model = ProtobufModelConfig.builder() + .catalog() + .name("test0") + .schema() + .strategy("topic") + .version("latest") + .subject("test-value") + .record("SimpleMessage") .build() - .build(); - ProtobufWriteConverterHandler converter = new ProtobufWriteConverterHandler(config, context); + .build() + .build(); + ProtobufWriteConverterHandler converter = new ProtobufWriteConverterHandler(model, context); DirectBuffer data = new UnsafeBuffer(); @@ -134,18 +141,18 @@ public void shouldWriteValidProtobufEvent() @Test public void shouldWriteValidProtobufEventNestedMessage() { - ProtobufModelConfig config = ProtobufModelConfig.builder() - .catalog() - .name("test0") - .schema() - .strategy("topic") - .version("latest") - .subject("test-value") - .record("DemoMessage.SimpleMessage") - .build() + ProtobufModelConfig model = ProtobufModelConfig.builder() + .catalog() + .name("test0") + .schema() + .strategy("topic") + .version("latest") + .subject("test-value") + .record("DemoMessage.SimpleMessage") .build() - .build(); - ProtobufWriteConverterHandler converter = new ProtobufWriteConverterHandler(config, context); + .build() + .build(); + ProtobufWriteConverterHandler converter = new ProtobufWriteConverterHandler(model, context); DirectBuffer data = new UnsafeBuffer(); @@ -157,18 +164,18 @@ public void shouldWriteValidProtobufEventNestedMessage() @Test public void shouldWriteValidProtobufEventIncorrectRecordName() { - ProtobufModelConfig config = ProtobufModelConfig.builder() - .catalog() - .name("test0") - .schema() - .strategy("topic") - .version("latest") - .subject("test-value") - .record("DemoMessage.IncorrectRecord") - .build() + ProtobufModelConfig model = ProtobufModelConfig.builder() + .catalog() + .name("test0") + .schema() + .strategy("topic") + .version("latest") + .subject("test-value") + .record("DemoMessage.IncorrectRecord") .build() - .build(); - ProtobufWriteConverterHandler converter = new ProtobufWriteConverterHandler(config, context); + .build() + .build(); + ProtobufWriteConverterHandler converter = new ProtobufWriteConverterHandler(model, context); DirectBuffer data = new UnsafeBuffer(); @@ -180,17 +187,17 @@ public void shouldWriteValidProtobufEventIncorrectRecordName() @Test public void shouldReadValidProtobufEvent() { - ProtobufModelConfig config = ProtobufModelConfig.builder() - .catalog() - .name("test0") - .schema() - .strategy("topic") - .version("latest") - .subject("test-value") - .build() + ProtobufModelConfig model = ProtobufModelConfig.builder() + .catalog() + .name("test0") + .schema() + .strategy("topic") + .version("latest") + .subject("test-value") .build() - .build(); - ProtobufReadConverterHandler converter = new ProtobufReadConverterHandler(config, context); + .build() + .build(); + ProtobufReadConverterHandler converter = new ProtobufReadConverterHandler(model, context); DirectBuffer data = new UnsafeBuffer(); @@ -204,17 +211,17 @@ public void shouldReadValidProtobufEvent() @Test public void shouldReadValidProtobufEventNestedMessage() { - ProtobufModelConfig config = ProtobufModelConfig.builder() - .catalog() - .name("test0") - .schema() - .strategy("topic") - .version("latest") - .subject("test-value") - .build() + ProtobufModelConfig model = ProtobufModelConfig.builder() + .catalog() + .name("test0") + .schema() + .strategy("topic") + .version("latest") + .subject("test-value") .build() - .build(); - ProtobufReadConverterHandler converter = new ProtobufReadConverterHandler(config, context); + .build() + .build(); + ProtobufReadConverterHandler converter = new ProtobufReadConverterHandler(model, context); DirectBuffer data = new UnsafeBuffer(); @@ -226,19 +233,19 @@ public void shouldReadValidProtobufEventNestedMessage() @Test public void shouldReadValidProtobufEventFormatJson() { - ProtobufModelConfig config = ProtobufModelConfig.builder() - .view("json") - .catalog() - .name("test0") - .schema() - .strategy("topic") - .version("latest") - .subject("test-value") - .build() + ProtobufModelConfig model = ProtobufModelConfig.builder() + .view("json") + .catalog() + .name("test0") + .schema() + .strategy("topic") + .version("latest") + .subject("test-value") .build() - .build(); + .build() + .build(); - ProtobufReadConverterHandler converter = new ProtobufReadConverterHandler(config, context); + ProtobufReadConverterHandler converter = new ProtobufReadConverterHandler(model, context); DirectBuffer data = new UnsafeBuffer(); @@ -265,20 +272,20 @@ public void shouldReadValidProtobufEventFormatJson() @Test public void shouldWriteValidProtobufEventFormatJson() { - ProtobufModelConfig config = ProtobufModelConfig.builder() - .view("json") - .catalog() - .name("test0") - .schema() - .strategy("topic") - .version("latest") - .subject("test-value") - .record("SimpleMessage") - .build() + ProtobufModelConfig model = ProtobufModelConfig.builder() + .view("json") + .catalog() + .name("test0") + .schema() + .strategy("topic") + .version("latest") + .subject("test-value") + .record("SimpleMessage") .build() - .build(); + .build() + .build(); - ProtobufWriteConverterHandler converter = new ProtobufWriteConverterHandler(config, context); + ProtobufWriteConverterHandler converter = new ProtobufWriteConverterHandler(model, context); DirectBuffer data = new UnsafeBuffer(); @@ -301,7 +308,7 @@ public void shouldWriteValidProtobufEventFormatJson() @Test public void shouldWriteInvalidProtobufEventFormatJson() { - ProtobufModelConfig config = ProtobufModelConfig.builder() + ProtobufModelConfig model = ProtobufModelConfig.builder() .view("json") .catalog() .name("test0") @@ -317,7 +324,7 @@ public void shouldWriteInvalidProtobufEventFormatJson() when(context.clock()).thenReturn(Clock.systemUTC()); when(context.supplyEventWriter()).thenReturn(mock(MessageConsumer.class)); - ProtobufWriteConverterHandler converter = new ProtobufWriteConverterHandler(config, context); + ProtobufWriteConverterHandler converter = new ProtobufWriteConverterHandler(model, context); DirectBuffer data = new UnsafeBuffer(); @@ -336,18 +343,18 @@ public void shouldWriteInvalidProtobufEventFormatJson() @Test public void shouldVerifyJsonFormatPaddingLength() { - ProtobufModelConfig config = ProtobufModelConfig.builder() - .view("json") - .catalog() - .name("test0") - .schema() - .strategy("topic") - .version("latest") - .subject("test-value") - .build() + ProtobufModelConfig model = ProtobufModelConfig.builder() + .view("json") + .catalog() + .name("test0") + .schema() + .strategy("topic") + .version("latest") + .subject("test-value") .build() - .build(); - ProtobufReadConverterHandler converter = new ProtobufReadConverterHandler(config, context); + .build() + .build(); + ProtobufReadConverterHandler converter = new ProtobufReadConverterHandler(model, context); DirectBuffer data = new UnsafeBuffer(); @@ -357,18 +364,18 @@ public void shouldVerifyJsonFormatPaddingLength() @Test public void shouldVerifyIndexPaddingLength() { - ProtobufModelConfig config = ProtobufModelConfig.builder() - .catalog() - .name("test0") - .schema() - .strategy("topic") - .version("latest") - .subject("test-value") - .record("DemoMessage.SimpleMessage") - .build() + ProtobufModelConfig model = ProtobufModelConfig.builder() + .catalog() + .name("test0") + .schema() + .strategy("topic") + .version("latest") + .subject("test-value") + .record("DemoMessage.SimpleMessage") .build() - .build(); - ProtobufWriteConverterHandler converter = new ProtobufWriteConverterHandler(config, context); + .build() + .build(); + ProtobufWriteConverterHandler converter = new ProtobufWriteConverterHandler(model, context); DirectBuffer data = new UnsafeBuffer(); @@ -379,14 +386,18 @@ public void shouldVerifyIndexPaddingLength() @Test public void shouldExtract() { - TestCatalogOptionsConfig testCatalogOptionsConfig = TestCatalogOptionsConfig.builder() - .id(9) - .schema(COMPLEX_SCHEMA) + TestCatalogConfig catalog = CatalogConfig.builder(TestCatalogConfig::new) + .namespace("test") + .name("test0") + .type("test") + .options(TestCatalogOptionsConfig::builder) + .id(9) + .schema(COMPLEX_SCHEMA) + .build() .build(); - CatalogConfig catalogConfig = new CatalogConfig("test", "test0", "test", testCatalogOptionsConfig); - when(context.supplyCatalog(catalogConfig.id)).thenReturn(new TestCatalogHandler(testCatalogOptionsConfig)); + when(context.supplyCatalog(catalog.id)).thenReturn(new TestCatalogHandler(catalog.options)); - ProtobufModelConfig config = ProtobufModelConfig.builder() + ProtobufModelConfig model = ProtobufModelConfig.builder() .catalog() .name("test0") .schema() @@ -396,7 +407,7 @@ public void shouldExtract() .build() .build() .build(); - ProtobufReadConverterHandler converter = new ProtobufReadConverterHandler(config, context); + ProtobufReadConverterHandler converter = new ProtobufReadConverterHandler(model, context); String stringPath = "$.field_string"; converter.extract(stringPath); diff --git a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/config/remote.server.rpc.yaml b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/config/remote.server.rpc.yaml index a4b5ab50e7..72ef4f8c8b 100644 --- a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/config/remote.server.rpc.yaml +++ b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/config/remote.server.rpc.yaml @@ -23,12 +23,12 @@ bindings: options: acks: leader_only routes: - - exit: grpc0 - when: - - topic: requests - reply-to: responses - key: 59410e57-3e0f-4b61-9328-f645a7968ac8-d41d8cd98f00b204e9800998ecf8427e - method: example.EchoService/* - with: - scheme: http - authority: localhost:8080 + - exit: grpc0 + when: + - topic: requests + reply-to: responses + key: 59410e57-3e0f-4b61-9328-f645a7968ac8-d41d8cd98f00b204e9800998ecf8427e + method: example.EchoService/* + with: + scheme: http + authority: localhost:8080