Exemplo n.º 1
0
        public static void CallAddStatisticsEmittedHandlerForSenderWithNull()
        {
            using var sender = new KafkaSender("NAME", "TOPIC", 1, "SERVERS");
            Action action = () => sender.AddStatisticsEmittedHandler(null !);

            action.Should().Throw <ArgumentNullException>();
        }
Exemplo n.º 2
0
        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()));
        }
Exemplo n.º 3
0
 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;
 }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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>();
        }
Exemplo n.º 7
0
        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);
        }
Exemplo n.º 8
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);
        }
Exemplo n.º 9
0
        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>()));
        }
Exemplo n.º 10
0
        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");
        }
Exemplo n.º 11
0
        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();
        }
Exemplo n.º 12
0
        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);
        }
Exemplo n.º 13
0
 public ProducerWorker(ILogger <ProducerWorker> logger, KafkaSender <TransactionRequest> sender)
 {
     this.logger = logger;
     this.sender = sender;
 }