Esempio n. 1
0
        public void SendMessage_CallsBasicPublish_WithCorrectExchangeName()
        {
            // Arrange
            var propsMock = new Mock <IBasicProperties>();

            var channelMock = new Mock <IModel>(MockBehavior.Strict);

            channelMock.Setup(c => c.BasicPublish(It.Is <string>(k => k == "Testexchange1"),
                                                  "MyRoutingKey",
                                                  false,
                                                  propsMock.Object,
                                                  It.Is <byte[]>(b => Encoding.UTF8.GetString(b) == "MyMessage")))
            .Verifiable();

            channelMock.Setup(c => c.CreateBasicProperties())
            .Returns(propsMock.Object)
            .Verifiable();

            var connectionMock = new Mock <IConnection>(MockBehavior.Strict);

            connectionMock.Setup(c => c.CreateModel())
            .Returns(channelMock.Object)
            .Verifiable();

            var context = new RabbitMQBusContext(connectionMock.Object, "Testexchange1");

            var sender = new RabbitMQMessageSender(context);

            // Act
            sender.SendMessage(new EventMessage("MyRoutingKey", "MyMessage"));

            // Assert
            channelMock.VerifyAll();
        }
Esempio n. 2
0
        public void TestInitialize()
        {
            _exchangeName = "My.Test.ExchangeName";
            _queueName    = "My.Test.ListenQueue";
            _topicFilters = new string[] { "My.Test.Topic", "My.Test.OtherTopic" };

            _topic        = "My.Test.Topic";
            _body         = Encoding.Unicode.GetBytes("Hello, World");
            _eventMessage = new EventMessage
            {
                Topic = _topic,
                Body  = _body,
            };

            _propMock             = new Mock <IBasicProperties>(MockBehavior.Loose);
            _propsFromChannelMock = new Mock <IBasicProperties>();
            _channelMock          = new Mock <IModel>();
            _channelMock.Setup(c => c.CreateBasicProperties()).Returns(_propsFromChannelMock.Object);
            _channelMock.Setup(c => c.BasicConsume(_queueName, true, It.IsAny <string>(), It.IsAny <bool>(), It.IsAny <bool>(),
                                                   It.IsAny <IDictionary <string, object> >(), It.IsAny <IBasicConsumer>()))
            .Callback((string a, bool b, string c, bool d, bool e, IDictionary <string, object> args,
                       IBasicConsumer consumer) => _consumer = (EventingBasicConsumer)consumer);


            _connectionMock = new Mock <IConnection>(MockBehavior.Strict);
            _connectionMock.Setup(conn => conn.CreateModel()).Returns(_channelMock.Object);

            _busContext = new RabbitMQBusContext(_connectionMock.Object, _exchangeName);
        }
Esempio n. 3
0
        public void StartReceivingMessages_InvokesCallbackWithCorrectEventMessage()
        {
            // Arrange
            var channelMock = new Mock <IModel>();
            AsyncEventingBasicConsumer basicConsumer = null;

            channelMock.Setup(c => c.BasicConsume("TestQueue",
                                                  true,
                                                  "",
                                                  false,
                                                  false,
                                                  null,
                                                  It.IsAny <AsyncEventingBasicConsumer>()))
            .Callback((string queue,
                       bool autoAck,
                       string consumerTag,
                       bool noLocal,
                       bool exclusive,
                       IDictionary <string, object> arguments,
                       IBasicConsumer consumer) =>
            {
                basicConsumer = consumer as AsyncEventingBasicConsumer;
            });

            var connectionMock = new Mock <IConnection>();

            connectionMock.Setup(c => c.CreateModel())
            .Returns(channelMock.Object);

            var context  = new RabbitMQBusContext(connectionMock.Object, "TestExchange");
            var receiver = new RabbitMQMessageReceiver(context, "TestQueue", new List <string> {
                "TestTopic2"
            });

            // Act
            bool          callbackWasInvoked = false;
            IEventMessage eventMessage       = null;

            receiver.StartReceivingMessages((e) =>
            {
                callbackWasInvoked = true;
                eventMessage       = e;
            });
            var properties = new BasicProperties
            {
                Type          = "Test type",
                Timestamp     = new AmqpTimestamp(1542183431),
                CorrelationId = "test id"
            };

            basicConsumer.HandleBasicDeliver("", 0, false, "", "routing.key", properties, Encoding.UTF8.GetBytes("test message")).Wait();

            // Assert
            Assert.IsTrue(callbackWasInvoked);
            Assert.AreEqual("routing.key", eventMessage.RoutingKey);
            Assert.AreEqual("test message", eventMessage.Message);
            Assert.AreEqual("Test type", eventMessage.EventType);
            Assert.AreEqual(1542183431, eventMessage.Timestamp);
            Assert.AreEqual("test id", eventMessage.CorrelationId);
        }
Esempio n. 4
0
        public void DeclareQueue_CallsQueueDeclare()
        {
            // Arrange
            var channelMock = new Mock <IModel>();

            channelMock.Setup(c => c.QueueDeclare("TestQueue",
                                                  true,
                                                  false,
                                                  false,
                                                  null))
            .Returns(new QueueDeclareOk("", 0, 0))
            .Verifiable();

            var connectionMock = new Mock <IConnection>(MockBehavior.Strict);

            connectionMock.Setup(c => c.CreateModel())
            .Returns(channelMock.Object)
            .Verifiable();

            var context  = new RabbitMQBusContext(connectionMock.Object, "TestExchange");
            var receiver = new RabbitMQMessageReceiver(context, "TestQueue", new List <string> {
                "TestTopic"
            });

            // Act
            receiver.DeclareQueue();

            // Assert
            channelMock.VerifyAll();
        }
Esempio n. 5
0
        public void Constructor_SetsPropertiesCorrectly()
        {
            // Arrange
            var channelMock = new Mock <IModel>(MockBehavior.Strict);

            var connectionMock = new Mock <IConnection>(MockBehavior.Strict);

            connectionMock.Setup(c => c.CreateModel())
            .Returns(channelMock.Object);

            var context          = new RabbitMQBusContext(connectionMock.Object, "TestExchange");
            var topicExpressions = new List <string> {
                "TestTopic"
            };

            // Act
            var receiver = new RabbitMQMessageReceiver(context, "TestQueue", topicExpressions);

            // Assert
            Assert.AreEqual("TestExchange", receiver.ExchangeName);
            Assert.AreEqual("TestQueue", receiver.QueueName);
            Assert.AreEqual(topicExpressions, receiver.TopicExpressions);
            IModel channel = TestHelper.GetPrivateProperty <IModel>(receiver, "Channel");

            Assert.AreEqual(channelMock.Object, channel);
        }
        private IBusContext <IConnection> CreateNijnConfig(IServiceCollection serviceCollection)
        {
            //Deprecated method, maar kan even niet anders
            ILoggerFactory loggerFactory = new LoggerFactory();

            loggerFactory.AddProvider(
                new ConsoleLoggerProvider(
                    (text, logLevel) => logLevel >= LogLevel.Debug, true));

            var connectionBuilder = new RabbitMQContextBuilder()
                                    .ReadFromEnvironmentVariables();

            _context = connectionBuilder.CreateContext();

            var builder = new MicroserviceHostBuilder()
                          .SetLoggerFactory(loggerFactory)
                          .RegisterDependencies(serviceCollection)
                          .WithContext(_context)
                          .UseConventions();

            var host = builder.CreateHost();

            host.StartListeningInOtherThread();

            return(_context);
        }
Esempio n. 7
0
        public void SendMessage_CallsBasicPublish_WithCorrectCorrelationIdInBasicProperties()
        {
            // Arrange
            IBasicProperties props = new BasicProperties();

            var channelMock = new Mock <IModel>(MockBehavior.Strict);

            channelMock.Setup(c => c.CreateBasicProperties())
            .Returns(props)
            .Verifiable();

            channelMock.Setup(c => c.BasicPublish("Testxchange1",
                                                  "MyRoutingKey",
                                                  false,
                                                  It.Is <IBasicProperties>(p => p.CorrelationId == "correlationID"),
                                                  It.IsAny <Byte[]>()))
            .Verifiable();

            var connectionMock = new Mock <IConnection>(MockBehavior.Strict);

            connectionMock.Setup(c => c.CreateModel())
            .Returns(channelMock.Object)
            .Verifiable();

            var context = new RabbitMQBusContext(connectionMock.Object, "Testxchange1");

            var sender = new RabbitMQMessageSender(context);

            // Act
            sender.SendMessage(new EventMessage("MyRoutingKey", "MyMessage", "Test", 9, "correlationID"));

            // Assert
            channelMock.VerifyAll();
        }
Esempio n. 8
0
        public void DeclareQueue_CallsQueueBindForEveryTopicExpression()
        {
            // Arrange
            var topicExpressions = new List <string> {
                "TestTopic1", "TestTopic2"
            };
            var channelMock = new Mock <IModel>();

            foreach (string topicExpression in topicExpressions)
            {
                channelMock.Setup(c => c.QueueBind("TestQueue", "TestExchange", topicExpression, null))
                .Verifiable();
            }

            var connectionMock = new Mock <IConnection>(MockBehavior.Strict);

            connectionMock.Setup(c => c.CreateModel())
            .Returns(channelMock.Object)
            .Verifiable();

            var context  = new RabbitMQBusContext(connectionMock.Object, "TestExchange");
            var receiver = new RabbitMQMessageReceiver(context, "TestQueue", topicExpressions);

            // Act
            receiver.DeclareQueue();

            // Assert
            channelMock.VerifyAll();
        }
Esempio n. 9
0
        public void CreateMessageReceiver_ReturnsMessageReceiverWithCorrectProperties()
        {
            // Arrange
            var channelMock    = new Mock <IModel>(MockBehavior.Strict);
            var connectionMock = new Mock <IConnection>(MockBehavior.Strict);

            connectionMock.Setup(c => c.CreateModel())
            .Returns(channelMock.Object);

            var context          = new RabbitMQBusContext(connectionMock.Object, "TestExchange4");
            var topicExpressions = new List <string> {
                "topic.expression.a", "routing.key.b"
            };

            // Act
            RabbitMQMessageReceiver receiver = (RabbitMQMessageReceiver)context.CreateMessageReceiver("TestQueue", topicExpressions);

            // Assert
            Assert.AreEqual("TestExchange4", receiver.ExchangeName);
            Assert.AreEqual("TestQueue", receiver.QueueName);
            Assert.AreEqual(topicExpressions, receiver.TopicExpressions);
            IModel channel = TestHelper.GetPrivateProperty <IModel>(receiver, "Channel");

            Assert.AreEqual(channelMock.Object, channel);
        }
Esempio n. 10
0
        public void RecieveCommandsCalledCorrectly()
        {
            // Arrange
            var queueName = "TestQueue1";

            var channelMock = new Mock <IModel>(MockBehavior.Strict);


            channelMock.Setup(c => c.QueueDeclare(queueName, false, false, true, null)).Returns(new QueueDeclareOk("", 0, 0))
            .Verifiable();

            channelMock.Setup(c => c.BasicQos(0, 1, false)).Verifiable();

            channelMock.Setup(m => m.BasicConsume(queueName, false, "", false, false, null, It.IsAny <AsyncEventingBasicConsumer>())).Returns(queueName);


            var connectionMock = new Mock <IConnection>(MockBehavior.Strict);

            connectionMock.Setup(r => r.CreateModel())
            .Returns(channelMock.Object)
            .Verifiable();

            var context = new RabbitMQBusContext(connectionMock.Object, "");

            var target = new RabbitMQCommandReceiver(context, queueName);

            // Act
            target.DeclareCommandQueue();
            target.StartReceivingCommands(Callback);

            // Assert
            channelMock.VerifyAll();
        }
Esempio n. 11
0
        public void StartReceivingMessages_CallsBasicConsume()
        {
            // Arrange
            var channelMock = new Mock <IModel>();

            channelMock.Setup(c => c.BasicConsume("TestQueue",
                                                  true,
                                                  "",
                                                  false,
                                                  false,
                                                  null,
                                                  It.IsAny <IBasicConsumer>()))
            .Verifiable();

            var connectionMock = new Mock <IConnection>();

            connectionMock.Setup(c => c.CreateModel())
            .Returns(channelMock.Object);

            var context  = new RabbitMQBusContext(connectionMock.Object, "TestExchange");
            var receiver = new RabbitMQMessageReceiver(context, "TestQueue", new List <string> {
                "TestTopic2"
            });

            // Act
            receiver.StartReceivingMessages((e) => { });

            // Assert
            channelMock.VerifyAll();
        }
        public void TestInitialize()
        {
            var contextBuilder = new RabbitMQContextBuilder();

            _context = contextBuilder.WithCredentials("guest", "guest")
                       .WithAddress(_hostname, 5672)
                       .WithExchange("TestExchange1")
                       .CreateContext();
        }
        public void RabbitMQBusContextHasConnectionAndExchange()
        {
            Mock <IConnection> connectionMock = new Mock <IConnection>(MockBehavior.Strict);
            string             exchangeName   = "My.Test.ExchangeName";

            var target = new RabbitMQBusContext(connectionMock.Object, exchangeName);

            Assert.AreEqual(connectionMock.Object, target.Connection);
            Assert.AreEqual("My.Test.ExchangeName", target.ExchangeName);
        }
        public void RabbitMQBusContextDisposesConnection()
        {
            Mock <IConnection> connectionMock = new Mock <IConnection>(MockBehavior.Strict);

            connectionMock.Setup(conn => conn.Dispose());
            var target = new RabbitMQBusContext(connectionMock.Object, "My.Test.ExchangeName");

            target.Dispose();

            connectionMock.Verify(c => c.Dispose());
        }
Esempio n. 15
0
        public void SendCommandCallsBasicPublishWithCorrectMessage()
        {
            // Arrange
            var queueName      = "MyRoutingKey";
            var replyQueueName = "replyQueueName";
            var timeStamp      = new AmqpTimestamp(DateTime.Now.Ticks);

            var propsMock = new Mock <IBasicProperties>();

            propsMock.Setup(x => x.CorrelationId).Returns("test1");
            propsMock.Setup(x => x.ReplyTo).Returns(replyQueueName);
            propsMock.Setup(x => x.Timestamp).Returns(timeStamp);


            var channelMock = new Mock <IModel>(MockBehavior.Strict);

            channelMock.Setup(c => c.BasicPublish("",
                                                  queueName,
                                                  false,
                                                  propsMock.Object,
                                                  It.Is <byte[]>(b => Encoding.UTF8.GetString(b) == "MyMessage")))
            .Verifiable();

            channelMock.Setup(c => c.CreateBasicProperties())
            .Returns(propsMock.Object)
            .Verifiable();

            channelMock.Setup(c => c.QueueDeclare("", false, false, true, null)).Returns(new QueueDeclareOk(replyQueueName, 0, 0))
            .Verifiable();

            channelMock.Setup(m =>
                              m.BasicConsume(replyQueueName, true, "", false, false, null, It.IsAny <AsyncEventingBasicConsumer>())).Returns("");


            var connectionMock = new Mock <IConnection>(MockBehavior.Strict);

            connectionMock.Setup(r => r.CreateModel())
            .Returns(channelMock.Object)
            .Verifiable();

            var context = new RabbitMQBusContext(connectionMock.Object, "");

            var target = new RabbitMQCommandSender(context);

            // Act
            target.SendCommandAsync(new CommandRequestMessage("MyMessage", "test"), queueName);

            // Assert
            channelMock.VerifyAll();
        }
Esempio n. 16
0
        public void CreateMessageSender_WithBusContextDisposed_ThrowsObjectDisposedException()
        {
            // Arrange
            var connectionMock = new Mock <IConnection>();

            var context = new RabbitMQBusContext(connectionMock.Object, "TestExchange3");

            context.Dispose();

            // Act & Assert
            Assert.ThrowsException <ObjectDisposedException>(() =>
            {
                context.CreateMessageSender();
            });
        }
        public void CreateMessageSenderCreatesRabbitMQMessageSender()
        {
            Mock <IModel>      channelMock    = new Mock <IModel>();
            Mock <IConnection> connectionMock = new Mock <IConnection>(MockBehavior.Strict);

            connectionMock.Setup(conn => conn.CreateModel()).Returns(channelMock.Object);

            var target = new RabbitMQBusContext(connectionMock.Object, "My.Test.ExchangeName");

            // Act
            var sender = target.CreateMessageSender();

            // Assert
            Assert.IsInstanceOfType(sender, typeof(RabbitMQMessageSender));
            connectionMock.Verify(conn => conn.CreateModel());
        }
Esempio n. 18
0
        public void CreateMessageReceiver_WithBusContextDisposed_ThrowsObjectDisposedException()
        {
            // Arrange
            var connectionMock = new Mock <IConnection>();

            var context = new RabbitMQBusContext(connectionMock.Object, "TestExchange3");

            context.Dispose();

            // Act & Assert
            Assert.ThrowsException <ObjectDisposedException>(() =>
            {
                context.CreateMessageReceiver("TestQueue", new List <string> {
                    "topic.expression.a", "routing.key.b"
                });
            });
        }
Esempio n. 19
0
        public void TestInitialize()
        {
            _exchangeName = "My.Test.ExchangeName";
            _topic        = "My.Test.Topic";
            _body         = Encoding.Unicode.GetBytes("Hello, World");
            _eventMessage = new EventMessage
            {
                Topic = _topic,
                Body  = _body,
            };

            _propsMock   = new Mock <IBasicProperties>();
            _channelMock = new Mock <IModel>();
            _channelMock.Setup(c => c.CreateBasicProperties()).Returns(_propsMock.Object);
            _connectionMock = new Mock <IConnection>(MockBehavior.Strict);
            _connectionMock.Setup(conn => conn.CreateModel()).Returns(_channelMock.Object);

            _busContext = new RabbitMQBusContext(_connectionMock.Object, _exchangeName);
        }
Esempio n. 20
0
        public void CreateMessageSender_ReturnsMessageSenderWithCorrectProperties()
        {
            // Arrange
            var channelMock    = new Mock <IModel>(MockBehavior.Strict);
            var connectionMock = new Mock <IConnection>(MockBehavior.Strict);

            connectionMock.Setup(c => c.CreateModel())
            .Returns(channelMock.Object);

            var context = new RabbitMQBusContext(connectionMock.Object, "TestExchange3");

            // Act
            RabbitMQMessageSender sender = (RabbitMQMessageSender)context.CreateMessageSender();

            // Assert
            Assert.AreEqual("TestExchange3", sender.ExchangeName);
            IModel channel = TestHelper.GetPrivateProperty <IModel>(sender, "Channel");

            Assert.AreEqual(channelMock.Object, channel);
        }
Esempio n. 21
0
        public void Constructor_SetsPropertiesCorrectly()
        {
            // Arrange
            var channelMock    = new Mock <IModel>(MockBehavior.Strict);
            var connectionMock = new Mock <IConnection>(MockBehavior.Strict);

            connectionMock.Setup(c => c.CreateModel())
            .Returns(channelMock.Object);

            var context = new RabbitMQBusContext(connectionMock.Object, "ExchangeName");

            // Act
            var sender = new RabbitMQMessageSender(context);

            // Assert
            Assert.AreEqual("ExchangeName", sender.ExchangeName);
            IModel channel = TestHelper.GetPrivateProperty <IModel>(sender, "Channel");

            Assert.AreEqual(channelMock.Object, channel);
        }
        public void CreateMessageReceiverCreatesRabbitMQMessageReceiver()
        {
            Mock <IModel>      channelMock    = new Mock <IModel>();
            Mock <IConnection> connectionMock = new Mock <IConnection>(MockBehavior.Strict);

            connectionMock.Setup(conn => conn.CreateModel()).Returns(channelMock.Object);

            var target = new RabbitMQBusContext(connectionMock.Object, "My.Test.ExchangeName");

            // Act
            string queueName = "My.Test.ListenQueue";

            string[] topicFilters = new string[] { "My.Test.Topic", "My.Test.OtherTopic" };
            var      receiver     = target.CreateMessageReceiver(queueName, topicFilters);

            // Assert
            Assert.IsInstanceOfType(receiver, typeof(RabbitMQMessageReceiver));
            connectionMock.Verify(conn => conn.CreateModel());
            Assert.AreEqual("My.Test.ListenQueue", receiver.QueueName);
            CollectionAssert.AreEquivalent(topicFilters, receiver.TopicFilters.ToList());
        }
Esempio n. 23
0
        public void StartReceivingMessages_IfAlreadyStarted_ThrowsBusConfigurationException()
        {
            // Arrange
            var channelMock    = new Mock <IModel>();
            var connectionMock = new Mock <IConnection>();

            connectionMock.Setup(c => c.CreateModel())
            .Returns(channelMock.Object);

            var context  = new RabbitMQBusContext(connectionMock.Object, "TestExchange");
            var receiver = new RabbitMQMessageReceiver(context, "TestQueue", new List <string> {
                "TestTopic2"
            });

            // Act & Assert
            receiver.StartReceivingMessages(m => { });
            Assert.ThrowsException <BusConfigurationException>(() =>
            {
                receiver.StartReceivingMessages(m => { });
            });
        }
Esempio n. 24
0
        public void StartReceivingMessages_WithCallbackNull_ThrowsArgumentNullException()
        {
            // Arrange
            var channelMock    = new Mock <IModel>(MockBehavior.Strict);
            var connectionMock = new Mock <IConnection>(MockBehavior.Strict);

            connectionMock.Setup(c => c.CreateModel())
            .Returns(channelMock.Object);

            var context  = new RabbitMQBusContext(connectionMock.Object, "TestExchange");
            var receiver = new RabbitMQMessageReceiver(context, "TestQueue", new List <string> {
                "TestTopic2"
            });

            // Act & Assert
            var exception = Assert.ThrowsException <ArgumentNullException>(() =>
            {
                receiver.StartReceivingMessages(null);
            });

            Assert.AreEqual("callback", exception.ParamName);
        }
Esempio n. 25
0
        public void SendMessage_WithSenderDisposed_ThrowsObjectDisposedException()
        {
            // Arrange
            var channelMock = new Mock <IModel>();

            var connectionMock = new Mock <IConnection>();

            connectionMock.Setup(c => c.CreateModel())
            .Returns(channelMock.Object);

            var context = new RabbitMQBusContext(connectionMock.Object, "Testexchange1");

            var sender = new RabbitMQMessageSender(context);

            sender.Dispose();

            // Act & Assert
            Assert.ThrowsException <ObjectDisposedException>(() =>
            {
                sender.SendMessage(new EventMessage("MyRoutingKey", "MyMessage"));
            });
        }
Esempio n. 26
0
        public void StartReceivingMessages_WithReceiverDisposed_ThrowsObjectDisposedException()
        {
            // Arrange
            var channelMock    = new Mock <IModel>();
            var connectionMock = new Mock <IConnection>();

            connectionMock.Setup(c => c.CreateModel())
            .Returns(channelMock.Object);

            var context  = new RabbitMQBusContext(connectionMock.Object, "TestExchange3");
            var receiver = new RabbitMQMessageReceiver(context, "TestQueue", new List <string> {
                "TestTopic2"
            });

            receiver.Dispose();

            // Act & Assert
            Assert.ThrowsException <ObjectDisposedException>(() =>
            {
                receiver.StartReceivingMessages((e) => { });
            });
        }
Esempio n. 27
0
 public RabbitMQMessageSender(RabbitMQBusContext buscontext)
 {
     _buscontext = buscontext;
     _channel    = _buscontext.Connection.CreateModel();
     _channel.ExchangeDeclare(_buscontext.ExchangeName, ExchangeType.Topic);
 }