public RabbitQueue(RabbitTunnel tunnel, ushort batchSize, ushort queuePrefetchSize, string subscriptionName) : this(tunnel) { this._batchSize = batchSize; this._queuePrefetchSize = queuePrefetchSize; this._subscriptionName = subscriptionName; }
public void Should_return_0_if_QueueDeclarePassive_return_null() { // Arrange var newChannel = Substitute.For <IModel>(); QueueDeclareOk declareResult = null; newChannel.QueueDeclarePassive(Arg.Any <string>()).Returns(declareResult); newChannel.IsOpen.Returns(true); var routeFinder = Substitute.For <IRouteFinder>(); var durableConnection = Substitute.For <IDurableConnection>(); durableConnection.IsConnected.Returns(true); //durableConnection.ConnectionFactory.Returns(Substitute.For<ConnectionFactory>()); durableConnection.CreateChannel().Returns(newChannel); var tunnel = new RabbitTunnel(routeFinder, durableConnection); // Action var count = tunnel.GetMessageCount(new SubscriptionOption <Customer> { SubscriptionName = "subscriptionName" }); // Assert Assert.AreEqual((uint)0, count); }
public void Should_use_route_finder_to_find_routing_key_then_publish_serialized_msg() { // Arrange var newChannel = Substitute.For <IModel>(); newChannel.IsOpen.Returns(true); var routeFinder = Substitute.For <IRouteFinder>(); var durableConnection = Substitute.For <IDurableConnection>(); durableConnection.ConnectionFactory.Returns(Substitute.For <ConnectionFactory>()); durableConnection.When(x => x.Connect()).Do(callInfo => { durableConnection.Connected += Raise.Event <Action>(); durableConnection.IsConnected.Returns(true); }); durableConnection.CreateChannel().Returns(newChannel); var tunnel = new RabbitTunnel(routeFinder, durableConnection); // Action tunnel.Publish("Muahaha"); // Assert routeFinder.Received().FindRoutingKey <string>(); newChannel.Received().BasicPublish(Arg.Any <string>(), Arg.Any <string>(), Arg.Any <IBasicProperties>(), Arg.Any <byte[]>()); }
public void Should_catch_all_exception_and_return_0() { // Arrange var newChannel = Substitute.For <IModel>(); newChannel.IsOpen.Returns(true); newChannel.When(x => x.QueueDeclarePassive(Arg.Any <string>())) .Do(callInfo => { throw new Exception("Some errors happen"); }); var routeFinder = Substitute.For <IRouteFinder>(); var durableConnection = Substitute.For <IDurableConnection>(); durableConnection.IsConnected.Returns(true); //durableConnection.ConnectionFactory.Returns(Substitute.For<ConnectionFactory>()); durableConnection.CreateChannel().Returns(newChannel); var tunnel = new RabbitTunnel(routeFinder, durableConnection); // Action var count = tunnel.GetMessageCount(new SubscriptionOption <Customer> { SubscriptionName = "subscriptionName" }); // Assert Assert.AreEqual((uint)0, count); newChannel.Received(1).QueueDeclarePassive(Arg.Any <string>()); }
public void Should_be_able_to_publish_with_routingKey() { // Arrange var newChannel = Substitute.For <IModel>(); newChannel.IsOpen.Returns(true); var routeFinder = Substitute.For <IRouteFinder>(); var durableConnection = Substitute.For <IDurableConnection>(); durableConnection.ConnectionFactory.Returns(Substitute.For <ConnectionFactory>()); durableConnection.When(x => x.Connect()).Do(callInfo => { durableConnection.Connected += Raise.Event <Action>(); durableConnection.IsConnected.Returns(true); }); durableConnection.CreateChannel().Returns(newChannel); var tunnel = new RabbitTunnel(routeFinder, durableConnection); // Action tunnel.Publish("Muahaha", "RoutingKey"); // Assert routeFinder.DidNotReceive().FindRoutingKey <string>(); newChannel.Received().BasicPublish(Arg.Any <string>(), "RoutingKey", Arg.Is <IBasicProperties>(p => p.Headers.Count == 0), Arg.Any <byte[]>()); }
public void Should_publish_message_to_header_exchange_with_custom_headers_if_provided() { // Arrange var newChannel = Substitute.For <IModel>(); newChannel.IsOpen.Returns(true); var routeFinder = Substitute.For <IRouteFinder>(); var durableConnection = Substitute.For <IDurableConnection>(); durableConnection.ConnectionFactory.Returns(Substitute.For <ConnectionFactory>()); durableConnection.When(x => x.Connect()).Do(callInfo => { durableConnection.Connected += Raise.Event <Action>(); durableConnection.IsConnected.Returns(true); }); durableConnection.CreateChannel().Returns(newChannel); var tunnel = new RabbitTunnel(routeFinder, durableConnection); // Action tunnel.Publish("Muahaha", new ListDictionary { { "SomeHeaderKey", "somevalue" }, { "AnotherHeaderKey", "somethingelse" } }); // Assert routeFinder.Received(1).FindRoutingKey <string>(); newChannel.Received(1).BasicPublish(Arg.Any <string>(), Arg.Any <string>(), Arg.Is <IBasicProperties>(arg => arg.Headers["SomeHeaderKey"].ToString() == "somevalue" && arg.Headers["AnotherHeaderKey"].ToString() == "somethingelse"), Arg.Any <byte[]>()); }
public void Should_use_topic_route_finder_to_find_routing_key_if_provided() { // Arrange var newChannel = Substitute.For <IModel>(); newChannel.IsOpen.Returns(true); var routeFinder = Substitute.For <ITopicExchangeRouteFinder>(); routeFinder.FindRoutingKey("This.Is.A.Topic").Returns("This.Is.A.Topic"); var durableConnection = Substitute.For <IDurableConnection>(); ////durableConnection.ConnectionFactory.Returns(Substitute.For<ConnectionFactory>()); durableConnection.When(x => x.Connect()).Do(callInfo => { durableConnection.Connected += Raise.Event <Action>(); durableConnection.IsConnected.Returns(true); }); durableConnection.CreateChannel().Returns(newChannel); var tunnel = new RabbitTunnel(routeFinder, durableConnection); // Action tunnel.Publish("This.Is.A.Topic"); tunnel.Publish("This.Is.A.Topic", new Dictionary <string, object>()); // Assert routeFinder.Received(2).FindRoutingKey("This.Is.A.Topic"); newChannel.Received(2).BasicPublish(Arg.Any <string>(), "This.Is.A.Topic", Arg.Any <IBasicProperties>(), Arg.Any <byte[]>()); }
public void Should_catch_all_exception_and_return_0() { // Arrange var newChannel = Substitute.For<IModel>(); newChannel.IsOpen.Returns(true); newChannel.When(x => x.QueueDeclarePassive(Arg.Any<string>())) .Do(callInfo => { throw new Exception("Some errors happen");}); var routeFinder = Substitute.For<IRouteFinder>(); var durableConnection = Substitute.For<IDurableConnection>(); durableConnection.IsConnected.Returns(true); //durableConnection.ConnectionFactory.Returns(Substitute.For<ConnectionFactory>()); durableConnection.CreateChannel().Returns(newChannel); var tunnel = new RabbitTunnel(routeFinder, durableConnection); // Action var count = tunnel.GetMessageCount(new SubscriptionOption<Customer> { SubscriptionName = "subscriptionName" }); // Assert Assert.AreEqual((uint)0, count); newChannel.Received(1).QueueDeclarePassive(Arg.Any<string>()); }
public void Should_use_topic_route_finder_to_find_routing_key_if_provided() { // Arrange var newChannel = Substitute.For<IModel>(); newChannel.IsOpen.Returns(true); var routeFinder = Substitute.For<ITopicExchangeRouteFinder>(); routeFinder.FindRoutingKey("This.Is.A.Topic").Returns("This.Is.A.Topic"); var durableConnection = Substitute.For<IDurableConnection>(); ////durableConnection.ConnectionFactory.Returns(Substitute.For<ConnectionFactory>()); durableConnection.When(x => x.Connect()).Do(callInfo => { durableConnection.Connected += Raise.Event<Action>(); durableConnection.IsConnected.Returns(true); }); durableConnection.CreateChannel().Returns(newChannel); var tunnel = new RabbitTunnel(routeFinder, durableConnection); // Action tunnel.Publish("This.Is.A.Topic"); tunnel.Publish("This.Is.A.Topic", new Dictionary<string, object>()); // Assert routeFinder.Received(2).FindRoutingKey("This.Is.A.Topic"); newChannel.Received(2).BasicPublish(Arg.Any<string>(), "This.Is.A.Topic", Arg.Any<IBasicProperties>(), Arg.Any<byte[]>()); }
public override ITunnel Create(string hostName, string virtualHost, string username, string password, IRabbitWatcher watcher) { var rabbitWatcher = watcher ?? _burrowResolver.Resolve <IRabbitWatcher>() ?? Global.DefaultWatcher; var serializer = _burrowResolver.Resolve <ISerializer>() ?? Global.DefaultSerializer; var connectionFactory = new RabbitMQ.Client.ConnectionFactory { HostName = hostName, VirtualHost = virtualHost, UserName = username, Password = password }; var durableConnection = new DurableConnection(_burrowResolver.Resolve <IRetryPolicy>() ?? new DefaultRetryPolicy(), rabbitWatcher, connectionFactory); var abc = new ObjectObserver <IObserver <ISerializer> >(); Func <IConsumerErrorHandler> errorHandler = () => { var handdler = new ConsumerErrorHandler(connectionFactory, serializer, rabbitWatcher); abc.FireEvent(handdler); return(handdler); }; Func <IMessageHandlerFactory> handlerFactory = () => { var factory = new DefaultMessageHandlerFactory(_burrowResolver.Resolve <IConsumerErrorHandler>() ?? errorHandler(), serializer, rabbitWatcher); abc.FireEvent(factory); return(factory); }; Func <IConsumerManager> consumerManager = () => { var manager = new ConsumerManager(rabbitWatcher, _burrowResolver.Resolve <IMessageHandlerFactory>() ?? handlerFactory(), serializer); abc.FireEvent(manager); return(manager); }; var tunnel = new RabbitTunnel(_burrowResolver.Resolve <IConsumerManager>() ?? consumerManager(), rabbitWatcher, _burrowResolver.Resolve <IRouteFinder>() ?? new DefaultRouteFinder(), durableConnection, serializer, _burrowResolver.Resolve <ICorrelationIdGenerator>() ?? Global.DefaultCorrelationIdGenerator, Global.DefaultPersistentMode); abc.ObjectCreated += tunnel.AddSerializerObserver; return(tunnel); }
public void Can_construct_with_provided_route_finder_and_durable_connection() { // Arrange var routeFinder = Substitute.For <IRouteFinder>(); var durableConnection = Substitute.For <IDurableConnection>(); ////durableConnection.ConnectionFactory.Returns(Substitute.For<ConnectionFactory>()); // Action var tunnel = new RabbitTunnel(routeFinder, durableConnection); // Assert Assert.IsNotNull(tunnel); }
public void Can_construct_with_provided_route_finder_and_durable_connection() { // Arrange var routeFinder = Substitute.For<IRouteFinder>(); var durableConnection = Substitute.For<IDurableConnection>(); ////durableConnection.ConnectionFactory.Returns(Substitute.For<ConnectionFactory>()); // Action var tunnel = new RabbitTunnel(routeFinder, durableConnection); // Assert Assert.IsNotNull(tunnel); }
private ITunnel Create(DurableConnection durableConnection, ISerializer serializer, IRabbitWatcher rabbitWatcher) { var abc = new ObjectObserver <IObserver <ISerializer> >(); Func <IConsumerErrorHandler> errorHandler = () => { var handdler = new ConsumerErrorHandler(durableConnection, serializer, rabbitWatcher); abc.FireEvent(handdler); return(handdler); }; Func <IMessageHandlerFactory> handlerFactory = () => { var factory = new DefaultMessageHandlerFactory(_burrowResolver.Resolve <IConsumerErrorHandler>() ?? errorHandler(), serializer, rabbitWatcher); abc.FireEvent(factory); return(factory); }; Func <IConsumerManager> consumerManager = () => { var manager = new ConsumerManager(rabbitWatcher, _burrowResolver.Resolve <IMessageHandlerFactory>() ?? handlerFactory(), serializer); abc.FireEvent(manager); return(manager); }; var tunnel = new RabbitTunnel(_burrowResolver.Resolve <IConsumerManager>() ?? consumerManager(), rabbitWatcher, _burrowResolver.Resolve <IRouteFinder>() ?? new DefaultRouteFinder(), durableConnection, serializer, _burrowResolver.Resolve <ICorrelationIdGenerator>() ?? Global.DefaultCorrelationIdGenerator, Global.DefaultPersistentMode); abc.ObjectCreated += tunnel.AddSerializerObserver; return(tunnel); }
public void Should_return_the_messagecount() { // Arrange var newChannel = Substitute.For <IModel>(); newChannel.QueueDeclarePassive(Arg.Any <string>()).Returns(new QueueDeclareOk("", 100, 0)); newChannel.IsOpen.Returns(true); var routeFinder = Substitute.For <IRouteFinder>(); var durableConnection = Substitute.For <IDurableConnection>(); durableConnection.IsConnected.Returns(true); durableConnection.ConnectionFactory.Returns(Substitute.For <ConnectionFactory>()); durableConnection.CreateChannel().Returns(newChannel); var tunnel = new RabbitTunnel(routeFinder, durableConnection); // Action var count = tunnel.GetMessageCount <Customer>("subscriptionName"); // Assert Assert.AreEqual((uint)100, count); }
public void Should_throw_exception_if_publish_failed() { // Arrange var newChannel = Substitute.For<IModel>(); newChannel.IsOpen.Returns(true); var routeFinder = Substitute.For<IRouteFinder>(); routeFinder.When(x =>x.FindExchangeName<string>()).Do(callInfo => { throw new Exception("Test message");}); var durableConnection = Substitute.For<IDurableConnection>(); durableConnection.ConnectionFactory.Returns(Substitute.For<ConnectionFactory>()); durableConnection.When(x => x.Connect()).Do(callInfo => { durableConnection.Connected += Raise.Event<Action>(); durableConnection.IsConnected.Returns(true); }); durableConnection.CreateChannel().Returns(newChannel); var tunnel = new RabbitTunnel(routeFinder, durableConnection); // Action tunnel.Publish("Muahaha"); }
public void Should_return_the_messagecount() { // Arrange var newChannel = Substitute.For<IModel>(); newChannel.QueueDeclarePassive(Arg.Any<string>()).Returns(new QueueDeclareOk("", 100, 0)); newChannel.IsOpen.Returns(true); var routeFinder = Substitute.For<IRouteFinder>(); var durableConnection = Substitute.For<IDurableConnection>(); durableConnection.IsConnected.Returns(true); //durableConnection.ConnectionFactory.Returns(Substitute.For<ConnectionFactory>()); durableConnection.CreateChannel().Returns(newChannel); var tunnel = new RabbitTunnel(routeFinder, durableConnection); // Action var count = tunnel.GetMessageCount(new SubscriptionOption<Customer> { SubscriptionName = "subscriptionName" }); // Assert Assert.AreEqual((uint)100, count); }
public void Should_use_route_finder_to_find_routing_key_then_publish_serialized_msg() { // Arrange var newChannel = Substitute.For<IModel>(); newChannel.IsOpen.Returns(true); var routeFinder = Substitute.For<IRouteFinder>(); var durableConnection = Substitute.For<IDurableConnection>(); ////durableConnection.ConnectionFactory.Returns(Substitute.For<ConnectionFactory>()); durableConnection.When(x => x.Connect()).Do(callInfo => { durableConnection.Connected += Raise.Event<Action>(); durableConnection.IsConnected.Returns(true); }); durableConnection.CreateChannel().Returns(newChannel); var tunnel = new RabbitTunnel(routeFinder, durableConnection); // Action tunnel.Publish("Muahaha"); // Assert routeFinder.Received().FindRoutingKey<string>(); newChannel.Received().BasicPublish(Arg.Any<string>(), Arg.Any<string>(), Arg.Any<IBasicProperties>(), Arg.Any<byte[]>()); }
public void Should_create_dedicated_channel_without_reconnect_if_connection_has_been_connected_before() { // Arrange var newChannel = Substitute.For <IModel>(); newChannel.IsOpen.Returns(true); var routeFinder = Substitute.For <IRouteFinder>(); var durableConnection = Substitute.For <IDurableConnection>(); durableConnection.IsConnected.Returns(true); durableConnection.ConnectionFactory.Returns(Substitute.For <ConnectionFactory>()); durableConnection.CreateChannel().Returns(newChannel); var tunnel = new RabbitTunnel(routeFinder, durableConnection); // Action tunnel.Publish("Muahaha"); tunnel.Publish("Hohohoho"); // Assert routeFinder.Received().FindRoutingKey <string>(); durableConnection.Received(1).CreateChannel(); durableConnection.DidNotReceive().Connect(); newChannel.Received(2).BasicPublish(Arg.Any <string>(), Arg.Any <string>(), Arg.Any <IBasicProperties>(), Arg.Any <byte[]>()); }
public void Should_throw_exception_if_publish_failed() { // Arrange var newChannel = Substitute.For <IModel>(); newChannel.IsOpen.Returns(true); var routeFinder = Substitute.For <IRouteFinder>(); routeFinder.When(x => x.FindExchangeName <string>()).Do(callInfo => { throw new Exception("Test message"); }); var durableConnection = Substitute.For <IDurableConnection>(); durableConnection.ConnectionFactory.Returns(Substitute.For <ConnectionFactory>()); durableConnection.When(x => x.Connect()).Do(callInfo => { durableConnection.Connected += Raise.Event <Action>(); durableConnection.IsConnected.Returns(true); }); durableConnection.CreateChannel().Returns(newChannel); var tunnel = new RabbitTunnel(routeFinder, durableConnection); // Action tunnel.Publish("Muahaha"); }
public void Should_be_able_to_publish_with_routingKey() { // Arrange var newChannel = Substitute.For<IModel>(); newChannel.IsOpen.Returns(true); var routeFinder = Substitute.For<IRouteFinder>(); var durableConnection = Substitute.For<IDurableConnection>(); //durableConnection.ConnectionFactory.Returns(Substitute.For<ConnectionFactory>()); durableConnection.When(x => x.Connect()).Do(callInfo => { durableConnection.Connected += Raise.Event<Action>(); durableConnection.IsConnected.Returns(true); }); durableConnection.CreateChannel().Returns(newChannel); var tunnel = new RabbitTunnel(routeFinder, durableConnection); // Action tunnel.Publish("Muahaha", "RoutingKey"); // Assert routeFinder.DidNotReceive().FindRoutingKey<string>(); newChannel.Received().BasicPublish(Arg.Any<string>(), "RoutingKey", Arg.Is<IBasicProperties>(p => p.Headers.Count == 0), Arg.Any<byte[]>()); }
public RabbitQueue(RabbitTunnel tunnel, ushort batchSize, ushort queuePrefetchSize, string subscriptionName, IRouteFinder routeFinder) : this(tunnel, batchSize, queuePrefetchSize, subscriptionName) { this._routeFinder = routeFinder; }
public void Should_create_dedicated_channel_without_reconnect_if_connection_has_been_connected_before() { // Arrange var newChannel = Substitute.For<IModel>(); newChannel.IsOpen.Returns(true); var routeFinder = Substitute.For<IRouteFinder>(); var durableConnection = Substitute.For<IDurableConnection>(); durableConnection.IsConnected.Returns(true); //durableConnection.ConnectionFactory.Returns(Substitute.For<ConnectionFactory>()); durableConnection.CreateChannel().Returns(newChannel); var tunnel = new RabbitTunnel(routeFinder, durableConnection); // Action tunnel.Publish("Muahaha"); tunnel.Publish("Hohohoho"); // Assert routeFinder.Received().FindRoutingKey<string>(); durableConnection.Received(1).CreateChannel(); durableConnection.DidNotReceive().Connect(); newChannel.Received(2).BasicPublish(Arg.Any<string>(), Arg.Any<string>(), Arg.Any<IBasicProperties>(), Arg.Any<byte[]>()); }
private ITunnel Create(IDurableConnection durableConnection, IRabbitWatcher rabbitWatcher) { var errorHandler = new ConsumerErrorHandler(durableConnection, Global.DefaultSerializer, rabbitWatcher); var msgHandlerFactory = new DefaultMessageHandlerFactory(errorHandler, Global.DefaultSerializer, rabbitWatcher); var consumerManager = new ConsumerManager(rabbitWatcher, msgHandlerFactory, Global.DefaultSerializer); var tunnel = new RabbitTunnel(consumerManager, rabbitWatcher, new DefaultRouteFinder(), durableConnection, Global.DefaultSerializer, Global.DefaultCorrelationIdGenerator, Global.DefaultPersistentMode); tunnel.AddSerializerObserver(errorHandler); tunnel.AddSerializerObserver(msgHandlerFactory); tunnel.AddSerializerObserver(consumerManager); return tunnel; }
public virtual ITunnel Create(string hostName, string virtualHost, string username, string password, IRabbitWatcher watcher) { var rabbitWatcher = watcher ?? Global.DefaultWatcher; var connectionFactory = new RabbitMQ.Client.ConnectionFactory { HostName = hostName, VirtualHost = virtualHost, UserName = username, Password = password }; var durableConnection = new DurableConnection(new DefaultRetryPolicy(), rabbitWatcher, connectionFactory); var errorHandler = new ConsumerErrorHandler(connectionFactory, Global.DefaultSerializer, rabbitWatcher); var msgHandlerFactory = new DefaultMessageHandlerFactory(errorHandler, Global.DefaultSerializer, rabbitWatcher); var consumerManager = new ConsumerManager(rabbitWatcher, msgHandlerFactory, Global.DefaultSerializer); var tunnel = new RabbitTunnel(consumerManager, rabbitWatcher, new DefaultRouteFinder(), durableConnection, Global.DefaultSerializer, Global.DefaultCorrelationIdGenerator, Global.DefaultPersistentMode); tunnel.AddSerializerObserver(errorHandler); tunnel.AddSerializerObserver(msgHandlerFactory); tunnel.AddSerializerObserver(consumerManager); return tunnel; }
public void Should_publish_message_to_header_exchange_with_custom_headers_if_provided() { // Arrange var newChannel = Substitute.For<IModel>(); newChannel.IsOpen.Returns(true); var routeFinder = Substitute.For<IRouteFinder>(); var durableConnection = Substitute.For<IDurableConnection>(); //durableConnection.ConnectionFactory.Returns(Substitute.For<ConnectionFactory>()); durableConnection.When(x => x.Connect()).Do(callInfo => { durableConnection.Connected += Raise.Event<Action>(); durableConnection.IsConnected.Returns(true); }); durableConnection.CreateChannel().Returns(newChannel); var tunnel = new RabbitTunnel(routeFinder, durableConnection); // Action tunnel.Publish("Muahaha", new Dictionary<string, object>{ { "SomeHeaderKey", "somevalue" }, { "AnotherHeaderKey", "somethingelse" } }); // Assert routeFinder.Received(1).FindRoutingKey<string>(); newChannel.Received(1).BasicPublish(Arg.Any<string>(), Arg.Any<string>(), Arg.Is<IBasicProperties>(arg => arg.Headers["SomeHeaderKey"].ToString() == "somevalue" && arg.Headers["AnotherHeaderKey"].ToString() == "somethingelse"), Arg.Any<byte[]>()); }
public RabbitQueue(RabbitTunnel tunnel) { this._tunnel = tunnel; }