public void TimeWindowingCountKeySerdesUnknow() { var config = new StreamConfig <StringSerDes, StringSerDes>(); config.ApplicationId = "test-window-stream"; var builder = new StreamBuilder(); builder .Stream <string, string>("topic") .GroupByKey() .WindowedBy(TumblingWindowOptions.Of(TimeSpan.FromSeconds(10))) .Count(Materialized <string, long, WindowStore <Bytes, byte[]> > .Create("count-store")) .ToStream() .To("output"); var topology = builder.Build(); Assert.Throws <StreamsException>(() => { using (var driver = new TopologyTestDriver(topology, config)) { var input = driver.CreateInputTopic <string, string>("topic"); input.PipeInput("test", "1"); } }); }
public void WorkflowWithInvalidConfiguration() { var config = new StreamConfig(); config.ApplicationId = "test-workflow-avroserdes"; config.DefaultKeySerDes = new StringSerDes(); config.DefaultValueSerDes = new SchemaProtobufSerDes <Helpers.Proto.Person>(); var builder = new StreamBuilder(); builder .Stream <string, Helpers.Proto.Person>("person") .Filter((k, v) => v.Age >= 18) .To("person-major"); var topo = builder.Build(); Assert.Throws <System.ArgumentException>(() => { using (var driver = new TopologyTestDriver(topo, config)) { var input = driver.CreateInputTopic <string, Helpers.Proto.Person>("person"); input.PipeInput("test1", new Helpers.Proto.Person { Age = 23, FirstName = "f", LastName = "l" }); } }); }
public void TestMockSchemaRegistryInputOutput() { var config = new StreamConfig <StringSerDes, SchemaProtobufSerDes <Order> >(); config.ApplicationId = "test-mock-registry"; config.SchemaRegistryUrl = "mock://test"; StreamBuilder builder = new StreamBuilder(); builder.Stream <string, Order>("test") .Filter((k, v) => k.Contains("test")) .To("test-output"); Topology t = builder.Build(); using (var driver = new TopologyTestDriver(t, config)) { var inputTopic = driver.CreateInputTopic <string, Order>("test"); var outputTopic = driver.CreateOuputTopic <string, Order>("test-output", TimeSpan.FromSeconds(5)); inputTopic.PipeInput("test", new Order { OrderId = 12, Price = 150, ProductId = 1 }); var r = outputTopic.ReadKeyValue(); Assert.IsNotNull(r); Assert.AreEqual("test", r.Message.Key); Assert.AreEqual(12, r.Message.Value.OrderId); } MockSchemaRegistry.DropScope("test"); }
public void ShouldObserveStreamElements() { var builder = new StreamBuilder(); var peekObserved = new List <KeyValuePair <string, string> >(); var streamObserved = new List <KeyValuePair <string, string> >(); builder.Stream <string, string>("topic") .Peek((k, v) => peekObserved.Add(KeyValuePair.Create(k, v))) .Foreach((k, v) => streamObserved.Add(KeyValuePair.Create(k, v))); var config = new StreamConfig <StringSerDes, StringSerDes>(); config.ApplicationId = "test-peek"; Topology t = builder.Build(); using (var driver = new TopologyTestDriver(t, config)) { var inputTopic = driver.CreateInputTopic <string, string>("topic"); var expected = new List <KeyValuePair <string, string> >(); for (int i = 0; i < 32; i++) { string key = i.ToString(); string value = $"V{i}"; inputTopic.PipeInput(key, value); expected.Add(KeyValuePair.Create(key, value)); } Assert.AreEqual(expected, peekObserved); Assert.AreEqual(expected, streamObserved); } }
public void ShouldMatchIfTombstoneIsAfterKStreamEvent() { var topo = SimpleJoinTopology(new FailOnInvalidTimestamp()); using var driver = new TopologyTestDriver(topo, BuildStreamConfig()); var topic = driver.CreateMultiInputTopic <string, string>(userClicksTopic, userRegionsTopic); var output = driver.CreateOuputTopic <string, string>(outputTopic); // publish event in ktable topic.PipeInputs(userRegionsTopic, ("alice", "100|asia")); //publish event in kstream topic.PipeInputs(userClicksTopic, ("alice", "200|click")); topic.PipeInputs(userRegionsTopic, ("alice", null)); topic.Flush(); var items = output.ReadKeyValueList().ToList(); Assert.AreEqual(1, items.Count); AssertExtensions.MessageEqual(("alice", "200|click --- 100|asia"), items[0]); }
public void WithNullMaterialize() { // CERTIFIED THAT SAME IF Materialize is null, a state store exist for count processor with a generated namestore var config = new StreamConfig <StringSerDes, StringSerDes>(); var serdes = new StringSerDes(); config.ApplicationId = "test-reduce"; var builder = new StreamBuilder(); Materialized <string, int, IKeyValueStore <Bytes, byte[]> > m = null; builder .Table <string, string>("topic") .MapValues((v) => v.Length) .GroupBy((k, v) => KeyValuePair.Create(k.ToUpper(), v)) .Reduce((v1, v2) => Math.Max(v1, v2), (v1, v2) => v2, m); var topology = builder.Build(); Assert.Throws <StreamsException>(() => { using (var driver = new TopologyTestDriver(topology, config)) { var input = driver.CreateInputTopic <string, string>("topic"); input.PipeInput("test", "1"); } }); }
public void ForeachAction() { var builder = new StreamBuilder(); var foreachObserved = new List <KeyValuePair <string, string> >(); var data = new List <KeyValuePair <string, string> >(); data.Add(KeyValuePair.Create("key1", "123456")); builder.Stream <string, string>("topic") .Foreach((k, v) => foreachObserved.Add(KeyValuePair.Create(k, v))); var config = new StreamConfig <StringSerDes, StringSerDes>(); config.ApplicationId = "test-foreach"; Topology t = builder.Build(); using (var driver = new TopologyTestDriver(t, config)) { var inputTopic = driver.CreateInputTopic <string, string>("topic"); inputTopic.PipeInputs(data); Assert.AreEqual(data, foreachObserved); } }
public void TimeWindowingAggNothing() { var config = new StreamConfig <StringSerDes, StringSerDes>(); config.ApplicationId = "test-window-stream"; var builder = new StreamBuilder(); builder .Stream <string, string>("topic") .GroupByKey() .WindowedBy(TumblingWindowOptions.Of(2000)) .Aggregate( () => 0, (k, v, agg) => Math.Max(v.Length, agg), InMemoryWindows <string, int> .As("store").WithValueSerdes <Int32SerDes>()) .ToStream() .To <StringTimeWindowedSerDes, Int32SerDes>("output"); var topology = builder.Build(); using (var driver = new TopologyTestDriver(topology, config)) { var input = driver.CreateInputTopic <string, string>("topic"); var output = driver.CreateOuputTopic("output", TimeSpan.FromSeconds(1), new StringTimeWindowedSerDes(), new Int64SerDes()); var elements = output.ReadKeyValueList().ToList(); Assert.AreEqual(0, elements.Count); } }
public void TimeWindowingQueryStoreAll() { var config = new StreamConfig <StringSerDes, StringSerDes>(); config.ApplicationId = "test-window-stream"; var builder = new StreamBuilder(); builder .Stream <string, string>("topic") .GroupByKey() .WindowedBy(TumblingWindowOptions.Of(2000)) .Aggregate( () => 0, (k, v, agg) => Math.Max(v.Length, agg), InMemoryWindows <string, int> .As("store").WithValueSerdes <Int32SerDes>()); var topology = builder.Build(); using (var driver = new TopologyTestDriver(topology, config)) { var input = driver.CreateInputTopic <string, string>("topic"); input.PipeInput("test", "1"); input.PipeInput("test", "2567"); input.PipeInput("test", "32"); var store = driver.GetWindowStore <string, int>("store"); var elements = store.All().ToList(); Assert.AreEqual(1, elements.Count); Assert.AreEqual("test", elements[0].Key.Key); Assert.AreEqual((long)TimeSpan.FromSeconds(2).TotalMilliseconds, elements[0].Key.Window.EndMs - elements[0].Key.Window.StartMs); Assert.AreEqual(4, elements[0].Value); } }
public void CountWithName() { var config = new StreamConfig <StringSerDes, StringSerDes>(); config.ApplicationId = "test-count"; var builder = new StreamBuilder(); builder .Stream <string, string>("topic") .GroupByKey() .Count("count-01") .ToStream() .To("output"); var topology = builder.Build(); using (var driver = new TopologyTestDriver(topology, config)) { var input = driver.CreateInputTopic <string, string>("topic"); var output = driver.CreateOuputTopic <string, long, StringSerDes, Int64SerDes>("output"); input.PipeInput("test", "1"); var r = output.ReadKeyValue(); Assert.AreEqual("test", r.Message.Key); Assert.AreEqual(1, r.Message.Value); } }
public void TimeWindowingAggKeySerdesUnknow() { var config = new StreamConfig <StringSerDes, StringSerDes>(); config.ApplicationId = "test-window-stream"; var builder = new StreamBuilder(); builder .Stream <string, string>("topic") .GroupByKey() .WindowedBy(TumblingWindowOptions.Of(2000)) .Aggregate( () => 0, (k, v, agg) => Math.Max(v.Length, agg), InMemoryWindows <string, int> .As("store").WithValueSerdes <Int32SerDes>()) .ToStream() .To("output"); var topology = builder.Build(); Assert.Throws <StreamsException>(() => { using (var driver = new TopologyTestDriver(topology, config)) { var input = driver.CreateInputTopic <string, string>("topic"); input.PipeInput("test", "1"); } }); }
public void CountWithNullValue() { var config = new StreamConfig <StringSerDes, StringSerDes>(); config.ApplicationId = "test-count"; var builder = new StreamBuilder(); builder .Stream <string, string>("topic") .GroupBy((k, v) => k.ToCharArray()[0]) .Count(InMemory <char, long> .As("count-store").WithKeySerdes(new CharSerDes())); var topology = builder.Build(); using (var driver = new TopologyTestDriver(topology, config)) { var input = driver.CreateInputTopic <string, string>("topic"); input.PipeInput("test", "1"); input.PipeInput("test", null); input.PipeInput("coucou", "120"); var store = driver.GetKeyValueStore <char, long>("count-store"); Assert.IsNotNull(store); Assert.AreEqual(2, store.ApproximateNumEntries()); Assert.AreEqual(1, store.Get('t')); Assert.AreEqual(1, store.Get('c')); } }
public void KStreamGlobalLeftJoinNull() { var config = new StreamConfig <StringSerDes, StringSerDes> { ApplicationId = "test-stream-table-join" }; StreamBuilder builder = new StreamBuilder(); var global = builder.GlobalTable("global", InMemory <string, string> .As("global-store")); builder .Stream <string, string>("stream") .LeftJoin(global, (k, v) => k, (s, v) => $"{s}-{v}") .To("output"); Topology t = builder.Build(); using (var driver = new TopologyTestDriver(t, config)) { var inputTopic = driver.CreateInputTopic <string, string>("global"); var inputTopic2 = driver.CreateInputTopic <string, string>("stream"); var outputTopic = driver.CreateOuputTopic <string, string>("output"); inputTopic2.PipeInput("test", "coucou"); inputTopic.PipeInput("test", "test"); var record = outputTopic.ReadKeyValue(); Assert.IsNotNull(record); Assert.AreEqual("test", record.Message.Key); Assert.AreEqual("coucou-", record.Message.Value); } }
public void TimeWindowingQueryStore2Window() { var config = new StreamConfig <StringSerDes, StringSerDes>(); config.ApplicationId = "test-window-stream"; var builder = new StreamBuilder(); builder .Stream <string, string>("topic") .GroupByKey() .WindowedBy(TumblingWindowOptions.Of(TimeSpan.FromSeconds(5))) .Count(InMemoryWindows <string, long> .As("count-store")); var topology = builder.Build(); using (var driver = new TopologyTestDriver(topology, config)) { DateTime dt = DateTime.Now; var input = driver.CreateInputTopic <string, string>("topic"); input.PipeInput("test", "1", dt); input.PipeInput("test", "2", dt); input.PipeInput("test", "3", dt.AddMinutes(1)); var store = driver.GetWindowStore <string, long>("count-store"); var elements = store.All().ToList(); Assert.AreEqual(2, elements.Count); Assert.AreEqual("test", elements[0].Key.Key); Assert.AreEqual((long)TimeSpan.FromSeconds(5).TotalMilliseconds, elements[0].Key.Window.EndMs - elements[0].Key.Window.StartMs); Assert.AreEqual(2, elements[0].Value); Assert.AreEqual("test", elements[1].Key.Key); Assert.AreEqual((long)TimeSpan.FromSeconds(5).TotalMilliseconds, elements[1].Key.Window.EndMs - elements[1].Key.Window.StartMs); Assert.AreEqual(1, elements[1].Value); } }
public void Reduce2() { var config = new StreamConfig <StringSerDes, StringSerDes>(); config.ApplicationId = "test-reduce"; var builder = new StreamBuilder(); builder .Table <string, string>("topic") .GroupBy((k, v) => KeyValuePair.Create(k.ToUpper(), v)) .Reduce( (v1, v2) => v2.Length > v1.Length ? v2 : v1, (v1, v2) => v2, InMemory <string, string> .As("reduce-store")); var topology = builder.Build(); using (var driver = new TopologyTestDriver(topology, config)) { var input = driver.CreateInputTopic <string, string>("topic"); input.PipeInput("test", "1"); input.PipeInput("test", "12"); var store = driver.GetKeyValueStore <string, string>("reduce-store"); Assert.IsNotNull(store); Assert.AreEqual(1, store.ApproximateNumEntries()); var el = store.Get("TEST"); Assert.IsNotNull(el); Assert.AreEqual("12", el); } }
public void TableTableJoinValueJoiner() { var config = new StreamConfig <StringSerDes, StringSerDes> { ApplicationId = "test-table-table-join" }; StreamBuilder builder = new StreamBuilder(); var table1 = builder.Table("table1", InMemory <string, string> .As("store1")); var table2 = builder.Table("table2", InMemory <string, string> .As("store2")); var tableJoin = table1.Join(table2, new ValueJoiner()); tableJoin.ToStream().To("topic-output"); Topology t = builder.Build(); using (var driver = new TopologyTestDriver(t, config)) { var inputTopic1 = driver.CreateInputTopic <string, string>("table1"); var inputTopic2 = driver.CreateInputTopic <string, string>("table2"); var outputTopic = driver.CreateOuputTopic <string, string>("topic-output"); inputTopic1.PipeInput("test", "test"); inputTopic2.PipeInput("test", "coucou"); var record = outputTopic.ReadKeyValue(); Assert.IsNotNull(record); Assert.AreEqual("test", record.Message.Key); Assert.AreEqual("test-coucou", record.Message.Value); } }
public void Reduce4() { var config = new StreamConfig <StringSerDes, StringSerDes>(); config.ApplicationId = "test-count"; var builder = new StreamBuilder(); builder .Table <string, string>("topic") .GroupBy((k, v) => KeyValuePair.Create(k.ToUpper(), v)) .Reduce( new MyAddReducer(), new MySubReducer(), InMemory <string, string> .As("reduce-store"), "reduce-processor"); var topology = builder.Build(); using (var driver = new TopologyTestDriver(topology, config)) { var input = driver.CreateInputTopic <string, string>("topic"); input.PipeInput("test", "1"); input.PipeInput("test", null); input.PipeInput("test", "12"); var store = driver.GetKeyValueStore <string, string>("reduce-store"); Assert.IsNotNull(store); // null doesn't matter Assert.AreEqual(1, store.ApproximateNumEntries()); var el = store.Get("TEST"); Assert.IsNotNull(el); Assert.AreEqual("12", el); } }
public void MapValuesSameType() { var builder = new StreamBuilder(); var data = new List <KeyValuePair <string, string> >(); data.Add(KeyValuePair.Create("key1", "abc")); data.Add(KeyValuePair.Create("key2", "test")); builder.Stream <string, string>("topic") .MapValues((k, v) => v.ToUpper()) .To("topic-mapvalues"); var config = new StreamConfig <StringSerDes, StringSerDes>(); config.ApplicationId = "test-mapvalues"; Topology t = builder.Build(); using (var driver = new TopologyTestDriver(t, config)) { var inputTopic = driver.CreateInputTopic <string, string>("topic"); var outputTopic = driver.CreateOuputTopic <string, string>("topic-mapvalues"); inputTopic.PipeInputs(data); var result = outputTopic.ReadKeyValueList().Select(r => KeyValuePair.Create(r.Message.Key, r.Message.Value)).ToList(); var expected = new List <KeyValuePair <string, string> >(); expected.Add(KeyValuePair.Create("key1", "ABC")); expected.Add(KeyValuePair.Create("key2", "TEST")); Assert.IsNotNull(result); Assert.AreEqual(expected, result); } }
public void WithNullSerDes() { // WITH NULL SERDES, in running KeySerdes must be StringSerdes, and ValueSerdes Int64SerDes var config = new StreamConfig <StringSerDes, StringSerDes>(); config.ApplicationId = "test-reduce"; var builder = new StreamBuilder(); Materialized <string, int, IKeyValueStore <Bytes, byte[]> > m = Materialized <string, int, IKeyValueStore <Bytes, byte[]> > .Create("reduce-store") .With(null, null); builder .Table <string, string>("topic") .MapValues((v) => v.Length) .GroupBy((k, v) => KeyValuePair.Create(k.ToUpper(), v)) .Reduce((v1, v2) => Math.Max(v1, v2), (v1, v2) => v2, m) .ToStream() .To("output-topic"); var topology = builder.Build(); Assert.Throws <StreamsException>(() => { using (var driver = new TopologyTestDriver(topology, config)) { var input = driver.CreateInputTopic <string, string>("topic"); input.PipeInput("test", "1"); } }); }
public void MapValuesOtherType() { var builder = new StreamBuilder(); var data = new List <KeyValuePair <string, string> >(); data.Add(KeyValuePair.Create("key1", "123456")); builder.Stream <string, string>("topic") .MapValues((k, v) => v.Length) .To <StringSerDes, Int32SerDes>("topic-mapvalues"); var config = new StreamConfig <StringSerDes, StringSerDes>(); config.ApplicationId = "test-mapvalues"; Topology t = builder.Build(); using (var driver = new TopologyTestDriver(t, config)) { var inputTopic = driver.CreateInputTopic <string, string>("topic"); var outputTopic = driver.CreateOuputTopic <string, int, StringSerDes, Int32SerDes>("topic-mapvalues"); inputTopic.PipeInputs(data); var result = outputTopic.ReadKeyValue(); Assert.IsNotNull(result); Assert.AreEqual(result.Message.Key, "key1"); Assert.AreEqual(result.Message.Value, 6); } }
public void MapSameValueType() { var builder = new StreamBuilder(); var data = new List <KeyValuePair <string, string> >(); data.Add(KeyValuePair.Create("key1", "abc")); builder.Stream <string, string>("topic") .Map((k, v) => KeyValuePair.Create(k, v.ToUpper())) .To <StringSerDes, StringSerDes>("topic-map"); var config = new StreamConfig <StringSerDes, StringSerDes>(); config.ApplicationId = "test-map"; Topology t = builder.Build(); using (var driver = new TopologyTestDriver(t, config)) { var inputTopic = driver.CreateInputTopic <string, string>("topic"); var outputTopic = driver.CreateOuputTopic <string, string, StringSerDes, StringSerDes>("topic-map"); inputTopic.PipeInputs(data); var result = outputTopic.ReadKeyValue(); Assert.IsNotNull(result); Assert.AreEqual(result.Message.Key, "key1"); Assert.AreEqual(result.Message.Value, "ABC"); } }
public void TimeWindowingReduceKeySerdesUnknow() { var config = new StreamConfig <StringSerDes, StringSerDes>(); config.ApplicationId = "test-window-stream"; var builder = new StreamBuilder(); builder .Stream <string, string>("topic") .GroupByKey() .WindowedBy(TumblingWindowOptions.Of(2000)) .Reduce( (v1, v2) => v1.Length > v2.Length ? v1 : v2, InMemoryWindows <string, string> .As("store")) .ToStream() .To("output"); var topology = builder.Build(); Assert.Throws <StreamsException>(() => { using (var driver = new TopologyTestDriver(topology, config)) { var input = driver.CreateInputTopic <string, string>("topic"); input.PipeInput("test", "1"); } }); }
public void MultiEvent() { var topo = SimpleJoinTopology(new MyTimestampExtractor()); using var driver = new TopologyTestDriver(topo, BuildStreamConfig()); var topic = driver.CreateMultiInputTopic <string, string>(userClicksTopic, userRegionsTopic); var output = driver.CreateOuputTopic <string, string>(outputTopic); //publish event in kstream topic.PipeInputs(userClicksTopic, ("alice", "200|user 1 click"), ("bob", "201|click1"), ("joe", "202|user 1 click")); // publish event in ktable topic.PipeInputs(userRegionsTopic, ("alice", "100|asia"), ("bob", "101|france"), ("joe", "300|usa")); topic.Flush(); var items = output.ReadKeyValueList().ToList(); Assert.AreEqual(2, items.Count); AssertExtensions.MessageEqual(("alice", "200|user 1 click --- 100|asia"), items[0]); AssertExtensions.MessageEqual(("bob", "201|click1 --- 101|france"), items[1]); }
public void TimeWindowingReduceNothing() { var config = new StreamConfig <StringSerDes, StringSerDes>(); config.ApplicationId = "test-window-stream"; var builder = new StreamBuilder(); builder .Stream <string, string>("topic") .GroupByKey() .WindowedBy(TumblingWindowOptions.Of(2000)) .Reduce( (v1, v2) => v1.Length > v2.Length ? v1 : v2, InMemoryWindows <string, string> .As("store")) .ToStream() .To <StringTimeWindowedSerDes, StringSerDes>("output"); var topology = builder.Build(); using (var driver = new TopologyTestDriver(topology, config)) { var input = driver.CreateInputTopic <string, string>("topic"); var output = driver.CreateOuputTopic("output", TimeSpan.FromSeconds(1), new StringTimeWindowedSerDes(), new Int64SerDes()); var elements = output.ReadKeyValueList().ToList(); Assert.AreEqual(0, elements.Count); } }
public void TestGetWindowStoreIncorrectType() { var config = new StreamConfig <StringSerDes, StringSerDes>(); config.ApplicationId = "test-window-stream"; var builder = new StreamBuilder(); builder .Stream <string, string>("topic") .GroupByKey() .WindowedBy(TumblingWindowOptions.Of(TimeSpan.FromSeconds(5))) .Count(InMemoryWindows <string, long> .As("count-store")); var topology = builder.Build(); using var driver = new TopologyTestDriver(topology, config); DateTime dt = DateTime.Now; var input = driver.CreateInputTopic <string, string>("topic"); input.PipeInput("test", "1", dt); var store = driver.GetWindowStore <int, long>("count-store"); Assert.IsNull(store); }
public void TimeWindowingQueryStoreAll() { var config = new StreamConfig <StringSerDes, StringSerDes>(); config.ApplicationId = "test-window-stream"; var builder = new StreamBuilder(); builder .Stream <string, string>("topic") .GroupByKey() .WindowedBy(TumblingWindowOptions.Of(2000)) .Reduce( (v1, v2) => v1.Length > v2.Length ? v1 : v2, InMemoryWindows <string, string> .As("store")) .ToStream() .To <StringTimeWindowedSerDes, StringSerDes>("output"); var topology = builder.Build(); using (var driver = new TopologyTestDriver(topology, config)) { var input = driver.CreateInputTopic <string, string>("topic"); input.PipeInput("test", "1"); input.PipeInput("test", "2567"); input.PipeInput("test", "32"); var store = driver.GetWindowStore <string, string>("store"); var elements = store.All().ToList(); Assert.AreEqual(1, elements.Count); Assert.AreEqual("test", elements[0].Key.Key); Assert.AreEqual((long)TimeSpan.FromSeconds(2).TotalMilliseconds, elements[0].Key.Window.EndMs - elements[0].Key.Window.StartMs); Assert.AreEqual("2567", elements[0].Value); } }
public void DefautlValue() { var mockSchemaClient = new MockSchemaRegistryClient(); var config = new StreamConfig(); var serdes = new MockProtoSerDes(mockSchemaClient); config.ApplicationId = "test-workflow-avroserdes"; config.DefaultKeySerDes = new StringSerDes(); config.DefaultValueSerDes = serdes; config.SchemaRegistryMaxCachedSchemas = null; config.SchemaRegistryRequestTimeoutMs = null; var builder = new StreamBuilder(); builder .Stream <string, Helpers.Proto.Person>("person") .Filter((k, v) => v.Age >= 18) .MapValues((v) => v.Age) .To <StringSerDes, Int32SerDes>("person-major"); var topo = builder.Build(); using (var driver = new TopologyTestDriver(topo, config)) { var input = driver.CreateInputTopic <string, Helpers.Proto.Person>("person"); var output = driver.CreateOuputTopic <string, int, StringSerDes, Int32SerDes>("person-major"); input.PipeInput("test1", new Helpers.Proto.Person { Age = 23, FirstName = "f", LastName = "l" }); var record = output.ReadKeyValue(); Assert.IsNotNull(record); Assert.AreEqual("test1", record.Message.Key); Assert.AreEqual(23, record.Message.Value); } }
public void WithNullValueSerDes() { // WITH VALUE NULL SERDES, in running KeySerdes must be StringSerdes, and ValueSerdes Int64SerDes var config = new StreamConfig <StringSerDes, StringSerDes>(); config.ApplicationId = "test-window-count"; var builder = new StreamBuilder(); Materialized <string, string, IWindowStore <Bytes, byte[]> > m = Materialized <string, string, IWindowStore <Bytes, byte[]> > .Create("store") .With(null, null); builder .Stream <string, string>("topic") .GroupByKey() .WindowedBy(TumblingWindowOptions.Of(2000)) .Reduce((v1, v2) => v1.Length > v2.Length ? v1 : v2, m) .ToStream() .To("output-topic"); var topology = builder.Build(); Assert.Throws <StreamsException>(() => { using (var driver = new TopologyTestDriver(topology, config)) { var input = driver.CreateInputTopic <string, string>("topic"); var output = driver.CreateOuputTopic("output-topic", TimeSpan.FromSeconds(1), new StringTimeWindowedSerDes(), new Int64SerDes()); input.PipeInput("test", "1"); } }); }
public void TestMockSchemaRegistryExceptionConfiguration2() { var config = new StreamConfig(); config.ApplicationId = "app-test"; config.SchemaRegistryUrl = "mock://test1,http://localhost:8081"; StreamBuilder builder = new StreamBuilder(); var ss = builder.Stream <string, Order, StringSerDes, SchemaProtobufSerDes <Order> >("test-topic") .Peek((k, v) => { Console.WriteLine($"Order # {v.OrderId }"); }); Topology t = builder.Build(); Assert.Throws <ArgumentException>(() => { using (var driver = new TopologyTestDriver(t, config)) { var inputTopic = driver.CreateInputTopic <string, Order, StringSerDes, SchemaProtobufSerDes <Order> >("test-topic"); inputTopic.PipeInput("test", new Order { OrderId = 12, Price = 150, ProductId = 1 }); } }); }
public void TableTableOuterJoinNullKey() { var config = new StreamConfig <StringSerDes, StringSerDes> { ApplicationId = "test-table-table-outer-join" }; StreamBuilder builder = new StreamBuilder(); var table1 = builder.Table("table1", InMemory <string, string> .As("store1")); var table2 = builder.Table("table2", InMemory <string, string> .As("store2")); var tableJoin = table1.LeftJoin(table2, (v1, v2) => $"{v1}-{v2}"); tableJoin.ToStream().To("topic-output"); Topology t = builder.Build(); using (var driver = new TopologyTestDriver(t, config)) { var inputTopic1 = driver.CreateInputTopic <string, string>("table1"); var inputTopic2 = driver.CreateInputTopic <string, string>("table2"); var outputTopic = driver.CreateOuputTopic <string, string>("topic-output"); inputTopic1.PipeInput("test", "test"); inputTopic1.PipeInput(null, "test"); var records = outputTopic.ReadKeyValuesToMap(); Assert.IsNotNull(records); Assert.AreEqual(1, records.Count); Assert.AreEqual("test-", records["test"]); } }