Exemplo n.º 1
0
        public async Task SetUp()
        {
            await Task.WhenAll(Task.Run(async() =>
            {
                while (await TestObjectCreated1stConsumer.WaitAsync(500))
                {
                    ;
                }
                await TestObjectCreated1stConsumer.ResetAsync();
            }), Task.Run(async() =>
            {
                while (await TestObjectCreated2ndConsumer.WaitAsync(500))
                {
                    ;
                }
                await TestObjectCreated2ndConsumer.ResetAsync();
            }), Task.Run(async() =>
            {
                while (await TestObjectUpdatedConsumer.WaitAsync(500))
                {
                    ;
                }
                await TestObjectUpdatedConsumer.ResetAsync();
            }), Task.Run(async() =>
            {
                while (await TestObjectSharedConsumer.WaitAsync(500))
                {
                    ;
                }
                await TestObjectSharedConsumer.ResetAsync();
            }));

            _watch.Restart();
        }
Exemplo n.º 2
0
        public async Task Publish_Consume_Redelivery()
        {
            var bus = Host.Services.GetRequiredService <IServiceBus>();
            var msg = new TestObjectCreated
            {
                Id = Guid.NewGuid(),
                ExpectedRedeliveries = 1,
                ChainedMessage       = new TestObjectUpdated
                {
                    Id = Guid.NewGuid(),
                    ExpectedRedeliveries = 1
                }
            };
            await bus.Publish(msg);

            //test that the 1st consumer has received the message 3 times, redelivered once, and completed once
            await TestObjectCreated1stConsumer.WaitAsync(5000);

            Assert.AreEqual(3, TestObjectCreated1stConsumer.Consumed);
            Assert.AreEqual(1, TestObjectCreated1stConsumer.Completed);
            Assert.AreEqual(0, TestObjectCreated1stConsumer.Remaining);
            Assert.NotNull(TestObjectCreated1stConsumer.LastContext);
            Assert.AreEqual(0, TestObjectCreated1stConsumer.LastContext.Retries);
            Assert.AreEqual(1, TestObjectCreated1stConsumer.LastContext.Redeliveries);

            //test that the 2nd consumer has received the message 3 times, redelivered once, and completed once
            await TestObjectCreated2ndConsumer.WaitAsync(5000);

            Assert.AreEqual(3, TestObjectCreated2ndConsumer.Consumed);
            Assert.AreEqual(1, TestObjectCreated2ndConsumer.Completed);
            Assert.AreEqual(0, TestObjectCreated2ndConsumer.Remaining);
            Assert.NotNull(TestObjectCreated2ndConsumer.LastContext);
            Assert.AreEqual(0, TestObjectCreated2ndConsumer.LastContext.Retries);
            Assert.AreEqual(1, TestObjectCreated2ndConsumer.LastContext.Redeliveries);

            //test that the consumer has recieved the message 6 times and completed twice
            await TestObjectUpdatedConsumer.WaitAsync(5000); //wait for 1st message

            await TestObjectUpdatedConsumer.WaitAsync(5000); //wait for 2nd message

            Assert.AreEqual(6, TestObjectUpdatedConsumer.Consumed);
            Assert.AreEqual(2, TestObjectUpdatedConsumer.Completed);
            Assert.AreEqual(0, TestObjectUpdatedConsumer.Remaining);
            Assert.NotNull(TestObjectUpdatedConsumer.LastContext);
            Assert.AreEqual(0, TestObjectUpdatedConsumer.LastContext.Retries);
            Assert.AreEqual(1, TestObjectUpdatedConsumer.LastContext.Redeliveries);

            //test that message id has not changed
            Assert.NotNull(TestObjectUpdatedConsumer.LastMessage);
            Assert.AreEqual(msg.ChainedMessage.Id, TestObjectUpdatedConsumer.LastMessage.Id);
        }