Exemplo n.º 1
0
        public void TwoChannelsDifferentWeightManyMessages()
        {
            var       sendToKinesisHasBeenCalled = false;
            const int msgCount = 10000;

            m_proxy.Setup(x => x.WriteAsync(It.IsAny <List <Message> >(), It.IsAny <string>()))
            .ReturnsAsync(new List <Message>());

            m_sut = new QueueMessageSender(m_settings, m_logger.Object);
            m_sut.AddMessageHandler(new ChannelSpecificMessageHandler
            {
                Action = async(messages, streamName)
                         =>
                {
                    sendToKinesisHasBeenCalled = true;
                    await m_proxy.Object.WriteAsync(messages, streamName);
                }
            });

            m_sut.SetChannelWeight(1.5f, "kinesis");
            m_sut.SetChannelWeight(2, "another_kinesis");
            Parallel.For(0, msgCount, (i, state) =>
            {
                // ReSharper disable once AccessToDisposedClosure
                m_sut.Enqueue("a message", "kinesis");
            });
            Parallel.For(0, msgCount, (i, state) =>
            {
                // ReSharper disable once AccessToDisposedClosure
                m_sut.Enqueue("a message", "another_kinesis");
            });

            m_sut.WaitForIdle();
            Assert.True(sendToKinesisHasBeenCalled);
            Assert.Equal(0, m_sut.GetPendingMessageCount());
            Assert.Equal(2 * msgCount, m_sut.EnqueuedMessageCount);
            Assert.Equal(2 * msgCount, m_sut.SentMessageCount);
            m_sut.Dispose();
        }