public async Task CopyAllMessagesTest_many_messages()
        {
            //ARRANGE
            var messageToEnque = 10000;
            var consumed       = 0;
            var logger         = new LogProviderMock();
            var listener       = new MessageListener1(m => Interlocked.Increment(ref consumed));
            Func <ITransportConfiguration> configuration = () =>
            {
                var config = new TransportConfiguration
                {
                    ConsumerPeriod = Timeout.InfiniteTimeSpan
                };
                config.Listeners.Add(listener);
                return(config);
            };
            var transport = new InMemoryQueueTransport(logger, configuration);

            var message = new byte[] { 0, 1, 2 };
            await transport.Start();

            for (var i = 0; i < messageToEnque; i++)
            {
                transport.Enque(message);
            }
            var destination = new byte[transport.PendingMessages][];
            //ACT
            await transport.CopyMessages(destination);

            //ASSERT
            Assert.AreEqual(messageToEnque, destination.Count());
            Assert.AreEqual(messageToEnque, transport.PendingMessages);
        }
Beispiel #2
0
        public async Task ListnerTest_2_listeners()
        {
            //ARRANGE
            var logger = new LogProviderMock();
            Func <ITransportConfiguration> configuration = () => new TransportConfiguration();
            var transport = new InMemoryQueueTransport(logger, configuration);
            var manager   = new TransportManager(transport, logger);
            var message   = new byte[] { 0, 1, 2 };

            byte[] messageReceived1 = null;
            byte[] messageReceived2 = null;

            var listener1 = new MessageListener1(m => messageReceived1 = m);
            var listener2 = new MessageListener2(m => messageReceived2 = m);
            //ACT
            await listener1.AttachTo(manager);

            await listener2.AttachTo(manager);

            await transport.Start();

            await manager.EnqueueMessage(message);

            Thread.Sleep(500);
            //ASSERT

            Assert.AreEqual(message, messageReceived1);
            Assert.AreEqual(message, messageReceived2);
        }
        public async Task ConsumeMessagesTest_many_messages_async_enque_auto_dequeue()
        {
            //ARRANGE
            var messageToEnque = 1000000;
            var consumed       = 0;
            var logger         = new LogProviderMock();
            var listener       = new MessageListener1(m => Interlocked.Increment(ref consumed));
            Func <ITransportConfiguration> configuration = () =>
            {
                var config = new TransportConfiguration
                {
                    ConsumerPeriod = TimeSpan.FromMilliseconds(1)
                };
                config.Listeners.Add(listener);
                return(config);
            };
            var transport = new InMemoryQueueTransport(logger, configuration);

            var message = new byte[] { 0, 1, 2 };
            await transport.Start();

            var enqueTask = Task.Factory.StartNew(() =>
            {
                for (var i = 0; i < messageToEnque; i++)
                {
                    transport.Enque(message);
                }
            });

            var enqueTask1 = Task.Factory.StartNew(() =>
            {
                for (var i = 0; i < messageToEnque; i++)
                {
                    transport.Enque(message);
                }
            });

            //ACT

            Task.WaitAll(enqueTask, enqueTask1);
            while (!transport.IsEmpty)
            {
                Thread.Sleep(1);
            }

            //ASSERT
            Assert.AreEqual(0, transport.PendingMessages);
            Assert.AreEqual(2 * messageToEnque, consumed);
        }
        public async Task ConsumeMessagesTest_many_messages_two_workers()
        {
            //ARRANGE
            var messageToEnque = 100000;
            var consumed       = 0;
            var logger         = new LogProviderMock();
            var listener       = new MessageListener1(m => Interlocked.Increment(ref consumed));
            Func <ITransportConfiguration> configuration = () =>
            {
                var config = new TransportConfiguration
                {
                    ConsumerPeriod = Timeout.InfiniteTimeSpan
                };
                config.Listeners.Add(listener);
                return(config);
            };
            var transport = new InMemoryQueueTransport(logger, configuration);

            var message = new byte[] { 0, 1, 2 };
            await transport.Start();

            for (var i = 0; i < messageToEnque; i++)
            {
                transport.Enque(message);
            }

            //ACT

            var task = Task.Factory.StartNew(() =>
            {
                transport.Consume(configuration());
            });

            var task1 = Task.Factory.StartNew(() =>
            {
                transport.Consume(configuration());
            });
            await Task.WhenAll(task, task1);

            while (!transport.IsEmpty)
            {
                Thread.Sleep(1);
            }
            //ASSERT
            Assert.AreEqual(messageToEnque, consumed);
            Assert.AreEqual(0, transport.PendingMessages);
        }