public static void CallAddStatisticsEmittedHandlerForSenderWithNull() { using var sender = new KafkaSender("NAME", "TOPIC", 1, "SERVERS"); Action action = () => sender.AddStatisticsEmittedHandler(null !); action.Should().Throw <ArgumentNullException>(); }
public static async Task KafkaSenderSendAsyncAddsSchemaIdToPayload() { var message = "This is a message"; var schemaId = 100; var producerMock = new Mock <IProducer <string, byte[]> >(); Message <string, byte[]>?sentMessage = null; producerMock .Setup(pm => pm.ProduceAsync(It.IsAny <string>(), It.IsAny <Message <string, byte[]> >(), It.IsAny <CancellationToken>())) .Callback <string, Message <string, byte[]>, CancellationToken>((str, msg, ct) => sentMessage = msg) .ReturnsAsync((DeliveryResult <string, byte[]>)null !); using var sender = new KafkaSender("name", "topic", schemaId, "servers"); sender.Unlock()._producer = new Lazy <IProducer <string, byte[]> >(() => producerMock.Object); await sender.SendAsync(new SenderMessage(message)).ConfigureAwait(false); Assert.Equal(0, BitConverter.ToInt32(sentMessage !.Value, 0)); Assert.Equal(schemaId, IPAddress.NetworkToHostOrder(BitConverter.ToInt32(sentMessage.Value, 1))); var memory = new Memory <byte>(sentMessage.Value, 5, sentMessage.Value.Length - 5); Assert.Equal(message, Encoding.UTF8.GetString(memory.ToArray())); Assert.Equal("Kafka", Encoding.UTF8.GetString(sentMessage.Headers[1].GetValueBytes())); }
public ConsumerWorker(ILogger <ConsumerWorker> logger, KafkaSender <TransactionReply> replySender, KafkaSender <TransactionCreated> createdSender, KafkaConsumer <TransactionRequest> requestConsumer) { this.logger = logger; this.replySender = replySender; this.createdSender = createdSender; this.requestConsumer = requestConsumer; }
public void KafkaSenderConstructor2HappyPath() { var name = "name"; var topic = "topic"; var producer = new Mock <IProducer <string, byte[]> >().Object; var sender = new KafkaSender(name, topic, producer); sender.Name.Should().Be(name); sender.Topic.Should().Be(topic); sender.Producer.Should().BeSameAs(producer); }
public void KafkaSenderConstructor1HappyPath() { var name = "name"; var topic = "topic"; var servers = "bootstrapServers"; var timeout = 100; var sender = new KafkaSender(name, topic, servers, timeout); sender.Name.Should().Be(name); sender.Topic.Should().Be(topic); sender.Producer.Should().NotBeNull(); }
public RequestReplyImplementation(KafkaSender <TRequest> sender, ILogger <RequestReplyImplementation <TRequest, TReply> > logger, KafkaRequestReplyGroup replyGroup, ITracer tracer) { this.sender = sender; this.logger = logger; this.replyGroup = replyGroup; this.tracer = tracer; // Note: we could leak memory over time here. Not a problem for this demo pendingRequests = new ConcurrentDictionary <string, TReply>(); }
public static void Create() { var name = "name"; var topic = "topic"; var servers = "bootstrapServers"; var timeout = 100; using var sender = new KafkaSender(name, topic, servers, timeout); sender.Name.Should().Be(name); sender.Topic.Should().Be(topic); sender.BootstrapServers.Should().Be(servers); sender.MessageTimeoutMs.Should().Be(timeout); sender.Producer.Should().NotBeNull(); sender.SchemaId.Should().Be(0); }
public void KafkaSenderDispose() { var producerMock = new Mock <IProducer <string, byte[]> >(); producerMock.Setup(pm => pm.Flush(It.IsAny <TimeSpan>())); producerMock.Setup(pm => pm.Dispose()); var senderUnlocked = new KafkaSender("name", "topic", "servers").Unlock(); senderUnlocked._producer = new Lazy <IProducer <string, byte[]> >(() => producerMock.Object); _ = senderUnlocked._producer.Value; senderUnlocked.Dispose(); producerMock.Verify(pm => pm.Flush(It.IsAny <TimeSpan>()), Times.Once); producerMock.Verify(pm => pm.Dispose(), Times.Once); }
public static async Task KafkaSenderSendAsyncSettingOriginatingSystemToKafka() { var message = "This is a message"; var producerMock = new Mock <IProducer <string, byte[]> >(); producerMock .Setup(pm => pm.ProduceAsync(It.IsAny <string>(), It.IsAny <Message <string, byte[]> >(), It.IsAny <CancellationToken>())) .ReturnsAsync((DeliveryResult <string, byte[]>)null !); using var sender = new KafkaSender("name", "topic", "servers"); sender.Unlock()._producer = new Lazy <IProducer <string, byte[]> >(() => producerMock.Object); await sender.SendAsync(new SenderMessage(message)).ConfigureAwait(false); producerMock.Verify(pm => pm.ProduceAsync("topic", It.Is <Message <string, byte[]> >(m => Encoding.UTF8.GetString(m.Value) == message && Encoding.UTF8.GetString(m.Headers[1].GetValueBytes()) == "Kafka"), It.IsAny <CancellationToken>())); }
public static void CallAddStatisticsEmittedHandlerForSender() { using var sender = new KafkaSender("NAME", "TOPIC", 1, "SERVERS"); var statsData = "STATS!"; var callCount = 0; void Handler(object?s, string stats) { s.Should().BeSameAs(sender); stats.Should().Be(statsData); callCount++; } sender.AddStatisticsEmittedHandler(Handler); sender.Unlock().OnStatisticsEmitted(null, statsData); callCount.Should().Be(1, "Event handler should have been called"); }
public void KafkaSenderConstructor2HappyPath() { var name = "name"; var topic = "topic"; var servers = "bootstrapServers"; var timeout = 100; var config = new ProducerConfig() { BootstrapServers = servers, MessageTimeoutMs = timeout }; var sender = new KafkaSender(name, topic, config); sender.Name.Should().Be(name); sender.Topic.Should().Be(topic); sender.BootstrapServers.Should().Be(servers); sender.MessageTimeoutMs.Should().Be(timeout); sender.Producer.Should().NotBeNull(); }
public static void CreateWithSchemaIdAndConfig() { var name = "name"; var topic = "topic"; var servers = "bootstrapServers"; var timeout = 100; var schemaId = 10; var config = new ProducerConfig() { BootstrapServers = servers, MessageTimeoutMs = timeout }; using var sender = new KafkaSender(name, topic, schemaId, config); sender.Name.Should().Be(name); sender.Topic.Should().Be(topic); sender.BootstrapServers.Should().Be(servers); sender.MessageTimeoutMs.Should().Be(timeout); sender.Producer.Should().NotBeNull(); sender.SchemaId.Should().Be(schemaId); }
public ProducerWorker(ILogger <ProducerWorker> logger, KafkaSender <TransactionRequest> sender) { this.logger = logger; this.sender = sender; }