コード例 #1
0
        public void CanSendMessageWithSentException()
        {
            IAmqpConnectionFactory  connectionFactory = A.Fake <IAmqpConnectionFactory>();
            AmqpMessageBuilder      messageBuilder    = A.Fake <AmqpMessageBuilder>();
            ISourceBlock <IMessage> sourceBlock       = A.Fake <ISourceBlock <IMessage> >();
            IConnection             connection        = A.Fake <IConnection>();
            IAmqpProperties         properties        = A.Fake <IAmqpProperties>();
            IModel channel = A.Fake <IModel>();

            A.CallTo(() => connectionFactory.CreateConnection()).Returns(connection);
            A.CallTo(() => connection.CreateModel()).Returns(channel);
            A.CallTo(() => channel.CreateBasicProperties()).Returns(null);
            A.CallTo(() => channel.BasicPublish(
                         A <string> ._,
                         A <string> ._,
                         A <bool> ._,
                         A <IBasicProperties> ._,
                         A <byte[]> ._))
            .Throws <Exception>()
            .Once();

            A.CallTo(() => messageBuilder.Serialize(A <IMessage> ._))
            .Returns(new AmqpMessage(properties, null, null, null)).Twice();

            var sut = new AmqpSender(connectionFactory, messageBuilder, new LogServiceProvider());

            Result <AmqpMessage, ExceptionDispatchInfo> result =
                new Result <AmqpMessage, ExceptionDispatchInfo>(
                    new AmqpMessage(new AmqpProperties(), string.Empty, string.Empty, new byte[0]));

            Action action = () => sut.Send(result);

            action.Should().NotThrow("because the AmqpSender should catch all exceptions to prevent from destroying of the DataFlow chain.");
        }
コード例 #2
0
        public void CanBuildAmqpMessageWithBasicProperties()
        {
            var propertyBuilder   = A.Fake <IAmqpPropertyBuilder>();
            var router            = A.Fake <IAmqpRouter>();
            var serializerFactory = A.Fake <IAmqpSerializerFactory>();
            var message           = GetMessage();

            var sut = new AmqpMessageBuilder(serializerFactory, propertyBuilder, router);

            AmqpMessage amqpMessage = sut.Serialize(message);

            amqpMessage.Properties.Should().NotBeNull(because: "Source message contains headers");
        }
コード例 #3
0
        public void CanBuildAmqpMessageWithRoutingKey()
        {
            var propertyBuilder = A.Fake <IAmqpPropertyBuilder>();
            var router          = A.Fake <IAmqpRouter>();

            A.CallTo(() => router.GetRoutingKey(A <IMessage> .Ignored)).Returns("nothing");
            var serializerFactory = A.Fake <IAmqpSerializerFactory>();
            var message           = GetMessage();

            var sut = new AmqpMessageBuilder(serializerFactory, propertyBuilder, router);

            AmqpMessage amqpMessage = sut.Serialize(message);

            amqpMessage.RoutingKey.Should().NotBeNull(because: "Router evaluates routing key");
            amqpMessage.RoutingKey.Should().Be("nothing", because: "Router evaluates routing key");
        }
コード例 #4
0
        public void CanLinkTo()
        {
            IAmqpConnectionFactory  connectionFactory = A.Fake <IAmqpConnectionFactory>();
            AmqpMessageBuilder      messageBuilder    = A.Fake <AmqpMessageBuilder>();
            ISourceBlock <IMessage> sourceBlock       = A.Fake <ISourceBlock <IMessage> >();
            IConnection             connection        = A.Fake <IConnection>();
            IModel channel = A.Fake <IModel>();

            A.CallTo(() => connectionFactory.CreateConnection()).Returns(connection);
            A.CallTo(() => connection.CreateModel()).Returns(channel);

            var sut = new AmqpSender(connectionFactory, messageBuilder, new LogServiceProvider());

            ISubscriptionTag tag = sut.SubscribeTo(sourceBlock);

            tag.Id.Should().NotBeNull();
        }
コード例 #5
0
        public void CanBuildAmqpMessageWithExchangeName()
        {
            var          propertyBuilder = A.Fake <IAmqpPropertyBuilder>();
            var          router          = A.Fake <IAmqpRouter>();
            const string Command         = "command.do.something";

            A.CallTo(() => router.GetExchange(A <IMessage> .Ignored)).Returns(Command);
            var serializerFactory = A.Fake <IAmqpSerializerFactory>();
            var message           = GetMessage();

            var sut = new AmqpMessageBuilder(serializerFactory, propertyBuilder, router);

            AmqpMessage amqpMessage = sut.Serialize(message);

            amqpMessage.ExchangeName.Should().NotBeNull(because: "Source message contains the payload type");
            amqpMessage.ExchangeName.Should().Be(Command, because: "The router evaluates exchange name");
        }
コード例 #6
0
        public void CanBuildAmqpMessageWithPayload()
        {
            var payload           = new byte[] { 1, 2, 3 };
            var propertyBuilder   = A.Fake <IAmqpPropertyBuilder>();
            var router            = A.Fake <IAmqpRouter>();
            var serializerFactory = A.Fake <IAmqpSerializerFactory>();
            var serializer        = A.Fake <IAmqpSerializer>();

            A.CallTo(() => serializerFactory.CreateSerializer(A <IMessage> .Ignored)).Returns(serializer);
            A.CallTo(() => serializer.Serialize(A <IMessage> .Ignored)).Returns(payload);
            var message = GetMessage();

            var sut = new AmqpMessageBuilder(serializerFactory, propertyBuilder, router);

            AmqpMessage amqpMessage = sut.Serialize(message);

            amqpMessage.Payload.Should().NotBeNull(because: "Router evaluates payload");
            amqpMessage.Payload.Should().BeEquivalentTo(payload, because: "Router evaluates payload");
        }
コード例 #7
0
        public void CanSendMessageWithSerializationException()
        {
            IAmqpConnectionFactory  connectionFactory = A.Fake <IAmqpConnectionFactory>();
            AmqpMessageBuilder      messageBuilder    = A.Fake <AmqpMessageBuilder>();
            ISourceBlock <IMessage> sourceBlock       = A.Fake <ISourceBlock <IMessage> >();
            IConnection             connection        = A.Fake <IConnection>();
            IAmqpProperties         properties        = A.Fake <IAmqpProperties>();
            IModel channel = A.Fake <IModel>();

            A.CallTo(() => connectionFactory.CreateConnection()).Returns(connection);
            A.CallTo(() => connection.CreateModel()).Returns(channel);

            A.CallTo(() => messageBuilder.Serialize(A <IMessage> ._))
            .Throws <Exception>()
            .Once()
            .Then.
            Returns(new AmqpMessage(properties, null, null, null));

            var      sut     = new AmqpSender(connectionFactory, messageBuilder, new LogServiceProvider());
            IMessage message = new Message <string>("hello", new Dictionary <string, string>());
            Action   action  = () => sut.Transform(message);

            action.Should().NotThrow("because the AmqpSender should catch all exception to prevent from destroying the DataFlow chain.");
        }