public void Send_When_Called_With_Several_LogModel_In_Array_Sends_All_Nessessary_Data_To_Publish_Method_Of_Message_Publisher()
        {
            // Arrange
            LogModel[] logs = new LogModel[5];
            for (int i = 0; i < logs.Length; i++)
            {
                logs[i] = new LogModel()
                {
                    Description = $"Log {i}"
                }
            }
            ;

            // RabbitMQ connection mock.
            var modelMock = new Mock <IModel>();
            var rabbitMqConnectionMock = RabbitMqConnectionMockThatReturns(modelMock.Object);
            // Publication address provider mock.
            var publicationAddressProviderMock = PublicationAddressProviderMockThatReturns((LogModel l) => new PublicationAddress("fanout", "exchangeName", l.Description));
            // Log data serializer mock.
            var logSerializerMock = LogSerializerMockThatReturns((LogModel ld) => ld.Description);
            // Message publisher mock.
            var messagePublisherMock = new Mock <IMessagePublisher>();
            // Creating the destination using all above.
            RabbitMqDestination rabbitMqDestination = new RabbitMqDestination(rabbitMqConnectionMock.Object, publicationAddressProviderMock.Object, logSerializerMock.Object, messagePublisherMock.Object);

            //Act
            rabbitMqDestination.Send(logs);

            //Assert
            messagePublisherMock.Verify(x => x.Publish(modelMock.Object, It.IsAny <PublicationAddress>(), It.IsAny <byte[]>()), Times.Exactly(5));
            for (int i = 0; i < logs.Length; i++)
            {
                messagePublisherMock.Verify(x => x.Publish(modelMock.Object, It.Is <PublicationAddress>(p => p.RoutingKey == logs[i].Description), It.Is <byte[]>(b => Encoding.UTF8.GetString(b) == logs[i].Description)), Times.Once);
            }
        }
Exemplo n.º 2
0
        public void RabbitMqDestination_With_Stub_Log_Serializer_Takes_Two_Logs_And_Send_Serialized_Texts_To_RabbitMq(int numberOfLogs)
        {
            // Arrange
            LogModel[] logs = new LogModel[numberOfLogs];
            for (int i = 0; i < numberOfLogs; i++)
            {
                logs[i] = new LogModel()
                {
                    LogId = i.ToString()
                }
            }
            ;

            var logSerializerMock = new Mock <ILogSerializer>();

            logSerializerMock.Setup(x => x.Serialize(It.IsAny <LogModel>())).Returns((LogModel ld) => $"log{ld.LogId}");
            //
            string exchangeName = _rabbitMqTestManager.DeclareExchangeQueuePairAndReturnName();
            RabbitMqDestination rabbitMqDestination = new RabbitMqDestination(_rabbitMqTestManager.Connection, logSerializerMock.Object, exchangeName, "direct");

            // Act
            rabbitMqDestination.Send(logs);
            List <string> messages = _rabbitMqTestManager.GetMessagesFromQueue(exchangeName);

            // Assert
            Assert.AreEqual(numberOfLogs, messages.Count);
            for (int i = 0; i < numberOfLogs; i++)
            {
                Assert.AreEqual($"log{logs[i].LogId}", messages[i]);
            }
        }
        public void Send_When_Called_With_One_LogModel_Sends_All_Nessessary_Data_To_Publish_Method_Of_Message_Publisher()
        {
            //Arrange
            LogModel logModel = new LogModel();
            // RabbitMQ connection mock.
            var modelMock = new Mock <IModel>();
            var rabbitMqConnectionMock = RabbitMqConnectionMockThatReturns(modelMock.Object);
            // Publication address provider mock.
            PublicationAddress publicationAddress = new PublicationAddress("fanout", "exchangeName", "routingKey");
            var publicationAddressProviderMock    = PublicationAddressProviderMockThatTakesAndReturns(logModel, publicationAddress);
            // Log data serializer mock.
            var logSerializerMock = LogSerializerMockThatTakesAndReturns(logModel, "serialized string");

            byte[] expectedMessageBytes = Encoding.UTF8.GetBytes("serialized string");
            // Message publisher mock.
            var messagePublisherMock = new Mock <IMessagePublisher>();
            // Creating the destination using all above.
            RabbitMqDestination rabbitMqDestination = new RabbitMqDestination(rabbitMqConnectionMock.Object, publicationAddressProviderMock.Object, logSerializerMock.Object, messagePublisherMock.Object);

            //Act
            rabbitMqDestination.Send(new LogModel[] { logModel });

            //Assert
            messagePublisherMock.Verify(x => x.Publish(modelMock.Object, publicationAddress, expectedMessageBytes), Times.Once);
        }
Exemplo n.º 4
0
        public void Adding_RabbitMq_With_Custom_Publication_Address_Provider()
        {
            IPublicationAddressProvider customPublicationAddressProvider = new Mock <IPublicationAddressProvider>().Object;
            RabbitMqDestination         rabbitMqDestination = new RabbitMqDestination(connection, customPublicationAddressProvider);

            Logger logger = new Logger();

            logger.AddLogDestinations(rabbitMqDestination);
        }
Exemplo n.º 5
0
        public void Adding_RabbitMq_With_Minimal_Configuration()
        {
            IPublicationAddressProvider publicationAddressProvider = new DirectPublicationAddressProvider("exchangeName", "exchangeType", "routingKey");
            RabbitMqDestination         rabbitMqDestination        = new RabbitMqDestination(connection, publicationAddressProvider);

            Logger logger = new Logger();

            logger.AddLogDestinations(rabbitMqDestination);
        }
Exemplo n.º 6
0
        public void Adding_RabbitMq_With_Json_Log_Serializer()
        {
            IPublicationAddressProvider publicationAddressProvider = new DirectPublicationAddressProvider("exchangeName", "exchangeType", "routingKey");
            ILogSerializer      logSerializer       = new JsonLogSerializer();
            RabbitMqDestination rabbitMqDestination = new RabbitMqDestination(connection, publicationAddressProvider, logSerializer);

            Logger logger = new Logger();

            logger.AddLogDestinations(rabbitMqDestination);
        }
Exemplo n.º 7
0
        public void Adding_RabbitMq_With_Custom_Log_Serializer()
        {
            IPublicationAddressProvider publicationAddressProvider = new DirectPublicationAddressProvider("exchangeName", "exchangeType", "routingKey");
            ILogSerializer      customLogSerializer = new Mock <ILogSerializer>().Object;
            RabbitMqDestination rabbitMqDestination = new RabbitMqDestination(connection, publicationAddressProvider, customLogSerializer);

            Logger logger = new Logger();

            logger.AddLogDestinations(rabbitMqDestination);
        }
        public void Ctor_Taking_RabbitMqConnection_Exchange_Info_When_Called_Without_Routing_Key_Sets_Empty_String_As_Default_Routing_Key()
        {
            //Arrange
            var rabbitMqConnection = new Mock <IConnection>().Object;

            //Act
            RabbitMqDestination rabbitMqDestination = new RabbitMqDestination(rabbitMqConnection, "exchangeName", "exchangeType");

            //Assert
            Assert.AreEqual("", (rabbitMqDestination.PublicationAddressProvider as DirectPublicationAddressProvider).PublicationAddress.RoutingKey);
        }
Exemplo n.º 9
0
        public void Adding_RabbitMq_With_Basic_Message_Publisher()
        {
            IPublicationAddressProvider publicationAddressProvider = new DirectPublicationAddressProvider("exchangeName", "exchangeType", "routingKey");
            ILogSerializer      logSerializer         = new JsonLogSerializer();
            IMessagePublisher   basicMessagePublisher = new BasicMessagePublisher(basicProperties);
            RabbitMqDestination rabbitMqDestination   = new RabbitMqDestination(connection, publicationAddressProvider, logSerializer, basicMessagePublisher);

            Logger logger = new Logger();

            logger.AddLogDestinations(rabbitMqDestination);
        }
        public void Send_When_Model_From_The_Previous_Iteration_Is_In_Closed_State_New_Model_Is_Requested_From_Connection_And_Used()
        {
            // Arrange
            LogModel[] logs = new LogModel[5];
            for (int i = 0; i < logs.Length; i++)
            {
                logs[i] = new LogModel()
                {
                }
            }
            ;

            // RabbitMQ connection mock.
            var modelMock1 = new Mock <IModel>();

            modelMock1.SetupSequence(x => x.IsClosed).Returns(false)
            .Returns(true);
            var modelMock2 = new Mock <IModel>();

            modelMock1.SetupSequence(x => x.IsClosed).Returns(false)
            .Returns(true);
            var modelMock3             = new Mock <IModel>();
            var modelMock4             = new Mock <IModel>();
            var modelMock5             = new Mock <IModel>();
            var rabbitMqConnectionMock = new Mock <IConnection>();

            // The connection mock will return new model on every call (up to 5 times).
            rabbitMqConnectionMock.SetupSequence(x => x.CreateModel()).Returns(modelMock1.Object)
            .Returns(modelMock2.Object)
            .Returns(modelMock3.Object)
            .Returns(modelMock4.Object)
            .Returns(modelMock5.Object);
            // Publication address provider mock.
            var publicationAddressProviderMock = PublicationAddressProviderMockThatReturns(lg => new PublicationAddress("fanout", "exchangeName", "routingKey"));
            // Log data serializer mock.
            var logSerializerMock = LogSerializerMockThatReturns(lg => "Log text");
            // Message publisher mock.
            var messagePublisherMock = new Mock <IMessagePublisher>();
            // Creating the destination using all above.
            RabbitMqDestination rabbitMqDestination = new RabbitMqDestination(rabbitMqConnectionMock.Object, publicationAddressProviderMock.Object, logSerializerMock.Object, messagePublisherMock.Object);

            // Act
            rabbitMqDestination.Send(logs);

            // Assert
            // First and second models were used each once.
            messagePublisherMock.Verify(x => x.Publish(modelMock1.Object, It.IsAny <PublicationAddress>(), It.IsAny <byte[]>()), Times.Exactly(2));
            // Remaining logs were published by the third model.
            messagePublisherMock.Verify(x => x.Publish(modelMock2.Object, It.IsAny <PublicationAddress>(), It.IsAny <byte[]>()), Times.Exactly(3));
            // Remaining models were never requested from the connection.
            messagePublisherMock.Verify(x => x.Publish(modelMock3.Object, It.IsAny <PublicationAddress>(), It.IsAny <byte[]>()), Times.Never);
            messagePublisherMock.Verify(x => x.Publish(modelMock4.Object, It.IsAny <PublicationAddress>(), It.IsAny <byte[]>()), Times.Never);
            messagePublisherMock.Verify(x => x.Publish(modelMock5.Object, It.IsAny <PublicationAddress>(), It.IsAny <byte[]>()), Times.Never);
        }
        public void Ctor_Taking_RabbitMqConnection_PublicationAddressProvider_LogSerializer_MessagePublisher_When_Called_With_Null_Publication_Address_Provider_Throws_ArgumentNullException()
        {
            //Arrange
            var rabbitMqConnection = new Mock <IConnection>().Object;
            var logSerializer      = new Mock <ILogSerializer>().Object;
            var messagePublisher   = new Mock <IMessagePublisher>().Object;

            //Assert
            Assert.Catch <ArgumentNullException>(() =>
            {
                //Act
                RabbitMqDestination rabbitMqDestination = new RabbitMqDestination(rabbitMqConnection, null as IPublicationAddressProvider, logSerializer, messagePublisher);
            });
        }
        public void Ctor_Taking_RabbitMqConnection_PublicationAddressProvider_When_Called_Sets_JsonLogSerializer_And_BasicMessagePublisher_As_Defaults()
        {
            //Arrange
            var rabbitMqConnection         = new Mock <IConnection>().Object;
            var publicationAddressProvider = new Mock <IPublicationAddressProvider>().Object;


            //Act
            RabbitMqDestination rabbitMqDestination = new RabbitMqDestination(rabbitMqConnection, publicationAddressProvider);

            //Assert
            Assert.AreEqual(rabbitMqConnection, rabbitMqDestination.RabbitMqConnection);
            Assert.AreEqual(publicationAddressProvider, rabbitMqDestination.PublicationAddressProvider);
            Assert.IsInstanceOf <JsonLogSerializer>(rabbitMqDestination.LogSerializer);
            Assert.IsInstanceOf <BasicMessagePublisher>(rabbitMqDestination.MessagePublisher);
        }
        public void Send_While_Model_Is_Not_Closed_The_Same_Model_Is_Used_And_New_One_Is_Not_Requested_From_Connection()
        {
            // Arrange
            LogModel[] logs = new LogModel[5];
            for (int i = 0; i < logs.Length; i++)
            {
                logs[i] = new LogModel()
                {
                }
            }
            ;

            // RabbitMQ connection mock.
            var modelMock1             = new Mock <IModel>();
            var modelMock2             = new Mock <IModel>();
            var modelMock3             = new Mock <IModel>();
            var modelMock4             = new Mock <IModel>();
            var modelMock5             = new Mock <IModel>();
            var rabbitMqConnectionMock = new Mock <IConnection>();

            // The connection mock will return new model on every call (up to 5 times).
            rabbitMqConnectionMock.SetupSequence(x => x.CreateModel()).Returns(modelMock1.Object)
            .Returns(modelMock2.Object)
            .Returns(modelMock3.Object)
            .Returns(modelMock4.Object)
            .Returns(modelMock5.Object);
            // Publication address provider mock.
            var publicationAddressProviderMock = PublicationAddressProviderMockThatReturns(lg => new PublicationAddress("fanout", "exchangeName", "routingKey"));
            // Log data serializer mock.
            var logSerializerMock = LogSerializerMockThatReturns(lg => "Log text");
            // Message publisher mock.
            var messagePublisherMock = new Mock <IMessagePublisher>();
            // Creating the destination using all above.
            RabbitMqDestination rabbitMqDestination = new RabbitMqDestination(rabbitMqConnectionMock.Object, publicationAddressProviderMock.Object, logSerializerMock.Object, messagePublisherMock.Object);

            // Act
            rabbitMqDestination.Send(logs);

            // Assert
            // First model was used for all logs in the array (5 times).
            messagePublisherMock.Verify(x => x.Publish(modelMock1.Object, It.IsAny <PublicationAddress>(), It.IsAny <byte[]>()), Times.Exactly(5));
            // Remaining models were never requested from the connection.
            messagePublisherMock.Verify(x => x.Publish(modelMock2.Object, It.IsAny <PublicationAddress>(), It.IsAny <byte[]>()), Times.Never);
            messagePublisherMock.Verify(x => x.Publish(modelMock3.Object, It.IsAny <PublicationAddress>(), It.IsAny <byte[]>()), Times.Never);
            messagePublisherMock.Verify(x => x.Publish(modelMock4.Object, It.IsAny <PublicationAddress>(), It.IsAny <byte[]>()), Times.Never);
            messagePublisherMock.Verify(x => x.Publish(modelMock5.Object, It.IsAny <PublicationAddress>(), It.IsAny <byte[]>()), Times.Never);
        }
Exemplo n.º 14
0
        public void RabbitMqDestination_With_Json_Log_Serializer_Sends_Json_To_RabbitMq()
        {
            // Arrange
            string exchangeName = _rabbitMqTestManager.DeclareExchangeQueuePairAndReturnName();
            RabbitMqDestination rabbitMqDestination = new RabbitMqDestination(_rabbitMqTestManager.Connection, new JsonLogSerializer(), exchangeName, "direct");
            var logModel = Samples.LogModels.Standard();

            // Act
            rabbitMqDestination.Send(new LogModel[] { logModel });
            List <string> messages = _rabbitMqTestManager.GetMessagesFromQueue(exchangeName);

            // Assert
            Assert.AreEqual(1, messages.Count);
            var expectedMessageStr = JsonConvert.SerializeObject(new SerializableLogModel(logModel));

            Assert.AreEqual(expectedMessageStr, messages[0]);
        }
Exemplo n.º 15
0
        public void RabbitMqDestination_Given_That_Exchange_Not_Exists_Does_Not_Creates_It()
        {
            // Arrange
            var logSerializerMock = new Mock <ILogSerializer>();

            logSerializerMock.Setup(x => x.Serialize(It.IsAny <LogModel>())).Returns("serialized text");
            //
            string exchangeName = "not_existing_exchange";
            RabbitMqDestination rabbitMqDestination = new RabbitMqDestination(_rabbitMqTestManager.Connection, logSerializerMock.Object, exchangeName, "direct");

            // Act
            rabbitMqDestination.Send(new LogModel[] { new LogModel() });
            List <string> messages = _rabbitMqTestManager.GetMessagesFromQueue(exchangeName);

            // Assert
            Assert.AreEqual(0, messages.Count);
        }
        public void Ctor_Taking_RabbitMqConnection_Exchange_Info_When_Called_Sets_DirectPublicationAddressProvider_And_BasicMessagePublisher_As_Defaults()
        {
            //Arrange
            var rabbitMqConnection = new Mock <IConnection>().Object;

            //Act
            RabbitMqDestination rabbitMqDestination = new RabbitMqDestination(rabbitMqConnection, "exchangeName", "exchangeType", "routingKey");

            //Assert
            Assert.AreEqual(rabbitMqConnection, rabbitMqDestination.RabbitMqConnection);
            Assert.IsInstanceOf <JsonLogSerializer>(rabbitMqDestination.LogSerializer);
            Assert.IsInstanceOf <BasicMessagePublisher>(rabbitMqDestination.MessagePublisher);
            Assert.IsInstanceOf <DirectPublicationAddressProvider>(rabbitMqDestination.PublicationAddressProvider);
            Assert.AreEqual("exchangeName", (rabbitMqDestination.PublicationAddressProvider as DirectPublicationAddressProvider).PublicationAddress.ExchangeName);
            Assert.AreEqual("exchangeType", (rabbitMqDestination.PublicationAddressProvider as DirectPublicationAddressProvider).PublicationAddress.ExchangeType);
            Assert.AreEqual("routingKey", (rabbitMqDestination.PublicationAddressProvider as DirectPublicationAddressProvider).PublicationAddress.RoutingKey);
        }
        public void Ctor_Taking_RabbitMqConnection_PublicationAddressProvider_LogSerializer_MessagePublisher_When_Called_Sets_All_Dependencies_Correctly()
        {
            //Arrange
            var rabbitMqConnection         = new Mock <IConnection>().Object;
            var publicationAddressProvider = new Mock <IPublicationAddressProvider>().Object;
            var logSerializer    = new Mock <ILogSerializer>().Object;
            var messagePublisher = new Mock <IMessagePublisher>().Object;

            //Act
            RabbitMqDestination rabbitMqDestination = new RabbitMqDestination(rabbitMqConnection, publicationAddressProvider, logSerializer, messagePublisher);

            //Assert
            Assert.AreEqual(rabbitMqConnection, rabbitMqDestination.RabbitMqConnection);
            Assert.AreEqual(publicationAddressProvider, rabbitMqDestination.PublicationAddressProvider);
            Assert.AreEqual(logSerializer, rabbitMqDestination.LogSerializer);
            Assert.AreEqual(messagePublisher, rabbitMqDestination.MessagePublisher);
        }
Exemplo n.º 18
0
        public void RabbitMqDestination_With_Stub_Log_Serializer_Sends_Serialized_Text_To_RabbitMq()
        {
            // Arrange
            var logSerializerMock = new Mock <ILogSerializer>();

            logSerializerMock.Setup(x => x.Serialize(It.IsAny <LogModel>())).Returns("serialized text");
            //
            string exchangeName = _rabbitMqTestManager.DeclareExchangeQueuePairAndReturnName();
            RabbitMqDestination rabbitMqDestination = new RabbitMqDestination(_rabbitMqTestManager.Connection, logSerializerMock.Object, exchangeName, "direct");

            // Act
            rabbitMqDestination.Send(new LogModel[] { new LogModel() });
            List <string> messages = _rabbitMqTestManager.GetMessagesFromQueue(exchangeName);

            // Assert
            Assert.AreEqual(1, messages.Count);
            Assert.AreEqual("serialized text", messages[0]);
        }
Exemplo n.º 19
0
        public void Adding_RabbitMq_With_Publication_Address_Function()
        {
            FactoryMethodPublicationAddressProvider factoryMethodPublicationAddressProvider = new FactoryMethodPublicationAddressProvider((logModel) =>
            {
                if (logModel.LogTypeIsIn(LogType.Error, LogType.Failure, LogType.Critical))
                {
                    return(new PublicationAddress("direct", "ErrorLogs", ""));
                }
                else
                {
                    return(new PublicationAddress("direct", "InfoLogs", ""));
                }
            });
            RabbitMqDestination rabbitMqDestination = new RabbitMqDestination(connection, factoryMethodPublicationAddressProvider);

            Logger logger = new Logger();

            logger.AddLogDestinations(rabbitMqDestination);
        }
        public void Send_When_LogSerializer_Returns_Null_String_Send_Empty_String_Bytes_To_MessagePublisher()
        {
            // Arrange
            // RabbitMQ connection mock.
            var rabbitMqConnectionMock = new Mock <IConnection>();
            // Publication address provider mock.
            var publicationAddressProviderMock = new Mock <IPublicationAddressProvider>();
            // Log data serializer mock.
            var logSerializerMock = LogSerializerMockThatReturns((LogModel ld) => null);
            // Message publisher mock.
            var messagePublisherMock = new Mock <IMessagePublisher>();
            // Creating the destination using all above.
            RabbitMqDestination rabbitMqDestination = new RabbitMqDestination(rabbitMqConnectionMock.Object, publicationAddressProviderMock.Object, logSerializerMock.Object, messagePublisherMock.Object);

            //Act
            rabbitMqDestination.Send(new LogModel[] { new LogModel() });

            //Assert
            messagePublisherMock.Verify(x => x.Publish(It.IsAny <IModel>(), It.IsAny <PublicationAddress>(), It.Is <byte[]>(b => b.Length == 0)), Times.Once);
        }