public override void Dispose()
 {
     TestChannel.ExchangeDelete("rawrabbit.integrationtests.testmessages");
     TestChannel.QueueDelete("basicmessage");
     TestChannel.QueueDelete("simplemessage");
     base.Dispose();
 }
Exemple #2
0
        public async Task Should_Be_Able_To_Get_BasicGetResult_Message()
        {
            using (var client = ZyRabbitFactory.CreateTestClient())
            {
                /* Setup */
                var message = new BasicMessage {
                    Prop = "Get me, get it?"
                };
                var conventions  = new NamingConventions();
                var exchangeName = conventions.ExchangeNamingConvention(message.GetType());
                var queueName    = conventions.QueueNamingConvention(message.GetType());
                TestChannel.QueueDeclare(queueName, true, false, false, null);
                TestChannel.ExchangeDeclare(exchangeName, ExchangeType.Topic);
                TestChannel.QueueBind(queueName, exchangeName, conventions.RoutingKeyConvention(message.GetType()) + ".#");

                await client.PublishAsync(message, ctx => ctx.UsePublishConfiguration(cfg => cfg.OnExchange(exchangeName)));

                /* Test */
                var ackable = await client.GetAsync(cfg => cfg.FromQueue(queueName));

                /* Assert */
                Assert.NotNull(ackable);
                Assert.NotEmpty(ackable.Content.Body);
                TestChannel.QueueDelete(queueName);
                TestChannel.ExchangeDelete(exchangeName);
            }
        }
Exemple #3
0
 public override void Dispose()
 {
     TestChannel.QueueDelete(_firstBasicQueue);
     TestChannel.QueueDelete(_firstSimpleQueue);
     TestChannel.QueueDelete(_secondBasicQueue);
     base.Dispose();
 }
        public async Task Should_Be_Able_To_Ack_Messages_And_Then_Full_List()
        {
            using (var client = ZyRabbitFactory.CreateTestClient())
            {
                /* Setup */
                var message = new BasicMessage {
                    Prop = "Get me, get it?"
                };
                var conventions  = new NamingConventions();
                var exchangeName = conventions.ExchangeNamingConvention(message.GetType());
                TestChannel.QueueDeclare(conventions.QueueNamingConvention(message.GetType()), true, false, false, null);
                TestChannel.ExchangeDeclare(conventions.ExchangeNamingConvention(message.GetType()), ExchangeType.Topic);
                TestChannel.QueueBind(conventions.QueueNamingConvention(message.GetType()), exchangeName, conventions.RoutingKeyConvention(message.GetType()) + ".#");

                await client.PublishAsync(message, ctx => ctx.UsePublishConfiguration(cfg => cfg.OnExchange(exchangeName)));

                await client.PublishAsync(message, ctx => ctx.UsePublishConfiguration(cfg => cfg.OnExchange(exchangeName)));

                await client.PublishAsync(message, ctx => ctx.UsePublishConfiguration(cfg => cfg.OnExchange(exchangeName)));

                /* Test */
                var ackable = await client.GetManyAsync <BasicMessage>(3);

                ackable.Content[1].Ack();
                ackable.Ack();
                TestChannel.QueueDelete(conventions.QueueNamingConvention(message.GetType()));
                TestChannel.ExchangeDelete(exchangeName);

                /* Assert */
                Assert.True(true);
            }
        }
        public async Task Should_Be_Able_To_Get_Message_When_Batch_Size_Is_Smaller_Than_Queue_Length()
        {
            using (var client = ZyRabbitFactory.CreateTestClient())
            {
                /* Setup */
                var message = new BasicMessage {
                    Prop = "Get me, get it?"
                };
                var conventions  = new NamingConventions();
                var exchangeName = conventions.ExchangeNamingConvention(message.GetType());
                TestChannel.QueueDeclare(conventions.QueueNamingConvention(message.GetType()), true, false, false, null);
                TestChannel.ExchangeDeclare(conventions.ExchangeNamingConvention(message.GetType()), ExchangeType.Topic);
                TestChannel.QueueBind(conventions.QueueNamingConvention(message.GetType()), conventions.ExchangeNamingConvention(message.GetType()), conventions.RoutingKeyConvention(message.GetType()) + ".#");

                await client.PublishAsync(message, ctx => ctx.UsePublishConfiguration(cfg => cfg.OnExchange(exchangeName)));

                await client.PublishAsync(message, ctx => ctx.UsePublishConfiguration(cfg => cfg.OnExchange(exchangeName)));

                await client.PublishAsync(message, ctx => ctx.UsePublishConfiguration(cfg => cfg.OnExchange(exchangeName)));

                /* Test */
                var ackable = await client.GetManyAsync <BasicMessage>(2);

                TestChannel.QueueDelete(conventions.QueueNamingConvention(message.GetType()));
                TestChannel.ExchangeDelete(exchangeName);

                /* Assert */
                Assert.NotNull(ackable);
                Assert.Equal(ackable.Content.Count, 2);
            }
        }
Exemple #6
0
        public async Task Should_Be_Able_To_Nack_On_Subscribe()
        {
            /* Setup */
            var subscriber         = BusClientFactory.CreateDefault <AdvancedMessageContext>();
            var secondSubscriber   = BusClientFactory.CreateDefault <AdvancedMessageContext>();
            var publisher          = BusClientFactory.CreateDefault <AdvancedMessageContext>();
            var callcount          = 0;
            var subscribeTcs       = new TaskCompletionSource <bool>();
            var secondSubscribeTcs = new TaskCompletionSource <bool>();

            subscriber.SubscribeAsync <BasicMessage>((message, context) =>
            {
                Interlocked.Increment(ref callcount);
                context?.Nack();
                subscribeTcs.TrySetResult(true);
                return(Task.FromResult(true));
            });
            secondSubscriber.SubscribeAsync <BasicMessage>((message, context) =>
            {
                secondSubscribeTcs.TrySetResult(true);
                return(Task.FromResult(true));
            });

            Task.WaitAll(
                publisher.PublishAsync <BasicMessage>(),
                subscribeTcs.Task,
                secondSubscribeTcs.Task
                );

            TestChannel.QueueDelete("basicmessage");

            Assert.Equal(expected: 1, actual: callcount);
        }
Exemple #7
0
 public MessageSequenceTests()
 {
     _client = RawRabbitFactory.GetExtendableClient() as ExtendableBusClient <MessageContext>;
     TestChannel.QueueDelete("basicrequest_dnx");
     TestChannel.QueueDelete("firstmessage_dnx");
     TestChannel.QueueDelete("secondmessage_dnx");
     TestChannel.QueueDelete("thirdmessage_dnx");
 }
Exemple #8
0
 public MessageSequenceTests()
 {
     _client = RawRabbitFactory.Create();
     TestChannel.QueueDelete("basicrequest_dnx");
     TestChannel.QueueDelete("firstmessage_dnx");
     TestChannel.QueueDelete("secondmessage_dnx");
     TestChannel.QueueDelete("thirdmessage_dnx");
 }
        public async Task Should_Stop_Subscribe_When_Subscription_Is_Disposed()
        {
            /* Setup */
            using (var publisher = TestClientFactory.CreateNormal())
                using (var subscriber = TestClientFactory.CreateNormal())
                {
                    var firstMessage = new BasicMessage {
                        Prop = "Value"
                    };
                    var secondMessage = new BasicMessage {
                        Prop = "AnotherValue"
                    };
                    var firstRecievedTcs  = new TaskCompletionSource <BasicMessage>();
                    var secondRecievedTcs = new TaskCompletionSource <BasicMessage>();
                    var recievedCount     = 0;

                    var subscription = subscriber.SubscribeAsync <BasicMessage>((message, context) =>
                    {
                        recievedCount++;
                        if (!firstRecievedTcs.Task.IsCompleted)
                        {
                            firstRecievedTcs.SetResult(message);
                        }
                        return(Task.FromResult(true));
                    }, cfg => cfg.WithQueue(q => q.WithAutoDelete(false)));

                    /* Test */
                    publisher.PublishAsync(firstMessage);
                    await firstRecievedTcs.Task;
                    subscription.Dispose();
                    var recievedAfterFirstPublish = recievedCount;
                    publisher.PublishAsync(secondMessage);
                    await Task.Delay(20);

                    publisher.SubscribeAsync <BasicMessage>((message, context) =>
                    {
                        secondRecievedTcs.SetResult(message);
                        return(Task.FromResult(true));
                    }, cfg => cfg.WithQueue(q => q.WithAutoDelete(false)));
                    await secondRecievedTcs.Task;
                    TestChannel.QueueDelete(subscription.QueueName);
                    /* Assert */
                    Assert.Equal(recievedAfterFirstPublish, recievedCount);
                    Assert.Equal(firstRecievedTcs.Task.Result.Prop, firstMessage.Prop);
                    Assert.Equal(secondRecievedTcs.Task.Result.Prop, secondMessage.Prop);
                }
        }
        public async Task Should_Be_Able_To_Nack_One_In_Batch()
        {
            using (var client = ZyRabbitFactory.CreateTestClient())
            {
                /* Setup */
                var message = new BasicMessage {
                    Prop = "Get me, get it?"
                };
                var nacked = new BasicMessage {
                    Prop = "Not me! Plz?"
                };
                var conventions  = new NamingConventions();
                var exchangeName = conventions.ExchangeNamingConvention(message.GetType());
                TestChannel.QueueDeclare(conventions.QueueNamingConvention(message.GetType()), true, false, false, null);
                TestChannel.ExchangeDeclare(exchangeName, ExchangeType.Topic);
                TestChannel.QueueBind(conventions.QueueNamingConvention(message.GetType()), conventions.ExchangeNamingConvention(message.GetType()), conventions.RoutingKeyConvention(message.GetType()) + ".#");

                await client.PublishAsync(message, ctx => ctx.UsePublishConfiguration(cfg => cfg.OnExchange(exchangeName)));

                await client.PublishAsync(message, ctx => ctx.UsePublishConfiguration(cfg => cfg.OnExchange(exchangeName)));

                await client.PublishAsync(nacked, ctx => ctx.UsePublishConfiguration(cfg => cfg.OnExchange(exchangeName)));

                /* Test */
                var ackableList = await client.GetManyAsync <BasicMessage>(3);

                foreach (var ackableMsg in ackableList.Content)
                {
                    if (string.Equals(ackableMsg.Content.Prop, message.Prop))
                    {
                        ackableMsg.Ack();
                    }
                    else
                    {
                        ackableMsg.Nack();
                    }
                }
                var getAgain = await client.GetAsync <BasicMessage>();

                TestChannel.QueueDelete(conventions.QueueNamingConvention(message.GetType()));
                TestChannel.ExchangeDelete(exchangeName);

                /* Assert */
                Assert.NotNull(getAgain);
                Assert.Equal(getAgain.Content.Prop, nacked.Prop);
            }
        }
Exemple #11
0
        public async Task Should_Be_Able_To_Subscribe_Initialized_Queue_And_Exchange()
        {
            using (var client = TestClientFactory.CreateNormal())
            {
                /* Setup */
                const string exchangeName = "initialized.exchange";
                const string queueName    = "initialized.queue";

                try
                {
                    TestChannel.ExchangeDeclare(exchangeName, RabbitMQ.Client.ExchangeType.Fanout);
                    TestChannel.QueueDeclare(queueName, true, false, false);

                    var tcs = new TaskCompletionSource <DynamicMessage>();
                    client.SubscribeAsync <DynamicMessage>((message, context) =>
                    {
                        tcs.TrySetResult(message);
                        return(Task.FromResult(true));
                    }, cfg => cfg
                                                           .WithQueue(q => q
                                                                      .AssumeInitialized()
                                                                      .WithName(queueName))
                                                           .WithSubscriberId(string.Empty)
                                                           .WithExchange(e => e
                                                                         .AssumeInitialized()
                                                                         .WithName(exchangeName)));

                    /* Test */
                    await client.PublishAsync(new DynamicMessage { Body = new { IsDynamic = true } },
                                              configuration : cfg => cfg
                                              .WithExchange(e => e
                                                            .AssumeInitialized()
                                                            .WithName(exchangeName)));

                    await tcs.Task;

                    /* Assert */
                    Assert.True(tcs.Task.Result.Body.IsDynamic);
                }
                finally
                {
                    /* Teardown */
                    TestChannel.QueueDelete(queueName);
                    TestChannel.ExchangeDelete(exchangeName);
                }
            }
        }
Exemple #12
0
        public async Task Should_Be_Able_To_Get_BasicGetResult_When_Queue_IsEmpty()
        {
            using (var client = ZyRabbitFactory.CreateTestClient())
            {
                /* Setup */
                var message     = new BasicMessage();
                var conventions = new NamingConventions();
                var queueName   = conventions.QueueNamingConvention(message.GetType());
                TestChannel.QueueDeclare(queueName, true, false, false, null);

                /* Test */
                var ackable = await client.GetAsync(cfg => cfg.FromQueue(queueName));

                /* Assert */
                Assert.NotNull(ackable);
                Assert.Null(ackable.Content);
                TestChannel.QueueDelete(queueName);
            }
        }
Exemple #13
0
 public override void Dispose()
 {
     TestChannel.QueueDelete("hello");
     base.Dispose();
 }
Exemple #14
0
 public HelloWorldTest()
 {
     TestChannel.QueueDelete("hello");
 }
 public TopicExchangeTests()
 {
     TestChannel.ExchangeDelete("rawrabbit.integrationtests.testmessages");
     TestChannel.QueueDelete("basicmessage");
     TestChannel.QueueDelete("simplemessage");
 }
Exemple #16
0
 public override void Dispose()
 {
     TestChannel.QueueDelete("task_queue");
     base.Dispose();
 }
Exemple #17
0
 public WorkQueueTest()
 {
     TestChannel.QueueDelete("task_queue");
 }
Exemple #18
0
 public NackingTests()
 {
     TestChannel.QueueDelete("basicmessage");
 }