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."); }
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"); }
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"); }
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"); }
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"); }
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."); }