public void MessageReceiverCallbackGetsCalledMultipleTimesWhenListeningLonger()
        {
            var context = new TestBusContext();

            var receiver = context.CreateMessageReceiver("receiver", new List <string> {
                "#"
            });
            var autoResetEvent = new AutoResetEvent(false);
            var messages       = new List <IEventMessage>();

            receiver.DeclareQueue();

            context.TestQueues["receiver"].Queue.Enqueue(new EventMessage("message", "1"));
            context.TestQueues["receiver"].Queue.Enqueue(new EventMessage("message", "2"));
            context.TestQueues["receiver"].Queue.Enqueue(new EventMessage("message", "3"));

            receiver.StartReceivingMessages((e) =>
            {
                messages.Add(e);
                autoResetEvent.Set();
            });


            autoResetEvent.WaitOne(500);
            autoResetEvent.WaitOne(500);
            autoResetEvent.WaitOne(500);

            Assert.AreEqual(3, messages.Count);
            Assert.IsTrue(messages.Any(m => m.Message == "1"));
            Assert.IsTrue(messages.Any(m => m.Message == "2"));
            Assert.IsTrue(messages.Any(m => m.Message == "3"));
        }
예제 #2
0
        public void ResumingEventListenerReActivatesDeliveryInQueue(string queueName)
        {
            // Arrange
            TestBusContext   context  = new TestBusContext();
            IMessageSender   sender   = context.CreateMessageSender();
            IMessageReceiver receiver = context.CreateMessageReceiver(queueName, new [] { "TestTopic" });

            EventMessage message = new EventMessage {
                Topic = "TestTopic"
            };

            bool callbackCalled = false;

            receiver.StartReceivingMessages();
            receiver.StartHandlingMessages(e => callbackCalled = true);

            receiver.Pause();
            // Act
            sender.SendMessage(message);

            Thread.Sleep(WaitTime);

            receiver.Resume();

            Thread.Sleep(WaitTime);

            // Assert
            Assert.IsTrue(callbackCalled);
        }
        public void MessageReceiverReturnsExceptionWhenNoQueueIsDefined()
        {
            var context = new TestBusContext();

            var receiver = context.CreateMessageReceiver("receiver", new List <string> {
                "#"
            });

            Assert.ThrowsException <KeyNotFoundException>(() => receiver.StartReceivingMessages(null));
        }
예제 #4
0
        public void CreateMessageReceiverReturnsMessageReceiver()
        {
            // Arrange
            var context = new TestBusContext();

            // Act
            var result = context.CreateMessageReceiver("test.queue", new string[0]);

            // Assert
            Assert.IsInstanceOfType(result, typeof(TestMessageReceiver));
        }
        public void MessageReceiverCallingQueueDeclaredTwiceThrowsException()
        {
            var context = new TestBusContext();

            var receiver = context.CreateMessageReceiver("receiver", new List <string> {
                "#"
            });

            receiver.DeclareQueue();

            Assert.ThrowsException <BusConfigurationException>(() => receiver.DeclareQueue());
        }
예제 #6
0
        public void CreateMessageReceiver_ReturnsTestMessageReceiver()
        {
            // Arrange
            TestBusContext context = new TestBusContext();

            // Act
            var receiver = context.CreateMessageReceiver("TestQueue", new List <string> {
                "test.routing.key"
            });

            // Assert
            Assert.IsInstanceOfType(receiver, typeof(TestMessageReceiver));
        }
예제 #7
0
        public void CreateMessageReceiverReturnsInitializedReceiver(string queueName, string topics)
        {
            // Arrange
            var context = new TestBusContext();

            string[] topicList = topics.Split(',');

            // Act
            IMessageReceiver receiver = context.CreateMessageReceiver(queueName, topicList);

            // Assert
            Assert.AreSame(queueName, receiver.QueueName);
            Assert.AreSame(topicList, receiver.TopicFilters);
        }
예제 #8
0
        public void ReceiverCanMessageWithMultipleTopics(string topics, string chosenTopic)
        {
            // Arrange
            var context  = new TestBusContext();
            var sender   = context.CreateMessageSender();
            var receiver = context.CreateMessageReceiver("testQueue", topics.Split(','));

            var message = new EventMessage {
                Topic = chosenTopic
            };

            var callbackCalled = false;

            receiver.StartReceivingMessages();
            receiver.StartHandlingMessages(e => callbackCalled = true);

            // Act
            sender.SendMessage(message);
            Thread.Sleep(WaitTime);

            // Assert
            Assert.IsTrue(callbackCalled);
        }
예제 #9
0
        public void SendingMessageWithTopicsWorks(string topicName)
        {
            // Arrange
            var context  = new TestBusContext();
            var sender   = context.CreateMessageSender();
            var receiver = context.CreateMessageReceiver("testQueue", new [] { topicName });

            var message = new EventMessage {
                Topic = topicName
            };

            var callbackCalled = false;

            receiver.StartReceivingMessages();
            receiver.StartHandlingMessages(e => callbackCalled = true);

            // Act
            sender.SendMessage(message);
            Thread.Sleep(WaitTime);

            // Assert
            Assert.IsTrue(callbackCalled);
        }
예제 #10
0
        public void SendingMessageWithTopicsWorkWithWildcards(string topicPattern, string topicName, bool shouldHaveBeenCalled)
        {
            // Arrange
            var context  = new TestBusContext();
            var sender   = context.CreateMessageSender();
            var receiver = context.CreateMessageReceiver("testQueue", new [] { topicPattern });

            var message = new EventMessage {
                Topic = topicName
            };

            var callbackCalled = false;

            receiver.StartReceivingMessages();
            receiver.StartHandlingMessages(e => callbackCalled = true);

            // Act
            sender.SendMessage(message);
            Thread.Sleep(WaitTime);

            // Assert
            Assert.AreEqual(shouldHaveBeenCalled, callbackCalled);
        }
        public void MessageReceiverCallbackGetsCalledWhenMessageIsAddedOnQueue()
        {
            var context = new TestBusContext();

            var receiver = context.CreateMessageReceiver("receiver", new List <string> {
                "#"
            });
            var           autoResetEvent = new AutoResetEvent(false);
            IEventMessage message        = null;

            receiver.DeclareQueue();
            receiver.StartReceivingMessages((e) =>
            {
                message = e;
                autoResetEvent.Set();
            });

            context.TestQueues["receiver"].Queue.Enqueue(new EventMessage("message", "message sending"));

            autoResetEvent.WaitOne();

            Assert.IsNotNull(message);
            Assert.AreEqual("message sending", message.Message);
        }