public async Task RandomBatches() { const string topic = "test"; const int batchSize = 10; const int batchTime = 500; var consumer = Services.GetRequiredService <IKafkaConsumer>(); var producer = Services.GetRequiredService <IKafkaProducer>(); var sink = Sink <StubMessage> .Create(); consumer.Pipeline <StubMessage>(topic) .Batch(batchSize, TimeSpan.FromMilliseconds(batchTime)) .Action(async messages => { await sink.Batch(messages); Log($"Received Batch = {messages.Count()}"); }) .Subscribe(); var count = await Generator.Run( Logger, () => producer.ProduceAsync(topic, Sink <StubMessage> .NewMessage), TimeSpan.FromSeconds(5), TimeSpan.FromMilliseconds(200)); await Task.Delay(batchTime * 2); Log($"Generated {count} calls"); sink.TotalMessages().Should().Be(count); }
public async Task BatchSeries() { const int batchSize = 5; const int batchCount = 30; const int batchTime = 500; const string topic = "test"; var sink = Sink <StubMessage> .Create(x => Log("Received")); var consumer = Services.GetRequiredService <IKafkaConsumer>(); var producer = Services.GetRequiredService <IKafkaProducer>(); var broker = Services.GetRequiredService <IKafkaMemoryBroker>(); consumer.Pipeline <StubMessage>(topic) .Batch(batchSize, TimeSpan.FromMilliseconds(batchTime)) .Action(async messages => { await sink.Batch(messages); Log($"Received Batch = {messages.Count()}"); }) .Subscribe(); await Task.WhenAll(Enumerable.Range(0, batchCount *batchSize) .Select(_ => producer.ProduceAsync(topic, Sink <StubMessage> .NewMessage))); await producer.ProduceAsync(topic, Sink <StubMessage> .NewMessage); await Task.Delay(batchTime * 2); await sink.Received(batchCount) .Batch(Arg.Is <IMessageEnumerable <StubMessage> >(x => x.Count() == batchSize)); await sink.Received(1).Batch(Arg.Is <IMessageEnumerable <StubMessage> >(x => x.Count() == 1)); await sink.DidNotReceive() .Batch(Arg.Is <IMessageEnumerable <StubMessage> >(x => x.Count() != batchSize && x.Count() != 1)); }