public void CanRegisterConsumer() { var mockRepository = new MockRepository(); var rabbitModel = mockRepository.DynamicMock<IModel>(); var messageSerializer = mockRepository.DynamicMock<IMessageSerializer>(); var registeredConsumer = mockRepository.DynamicMock<IRegisteredConsumer>(); var config = mockRepository.DynamicMock<IBrokerConfiguration>(); using (mockRepository.Record()) { SetupResult.For(registeredConsumer.Queue).Return("q"); Expect.Call(rabbitModel.BasicConsume(null, false, null)) .IgnoreArguments() .WhenCalled(mi => { Assert.Equal("q", mi.Arguments[0] as string); Assert.Equal(false, (bool)mi.Arguments[1]); Assert.IsType(typeof(QueueActivityConsumer), mi.Arguments[2]); }).Return("token"); } using (mockRepository.Playback()) { var callbackConsumer = new GroupedCallbackConsumer(rabbitModel, messageSerializer, config); callbackConsumer.ConsumeQueue(registeredConsumer); Assert.Equal(1, callbackConsumer.QueueConsumers.Count); Assert.Equal(1, callbackConsumer.QueueConsumers.Values.Count); Assert.Equal("token", callbackConsumer.QueueConsumers.Values.First().ConsumeToken.ConsumerTag); callbackConsumer.Close(); callbackConsumer.Dispose(); } }
public void AcksOnDelivery() { var mockRepository = new MockRepository(); var rabbitModel = mockRepository.DynamicMock<IModel>(); var messageSerializer = mockRepository.DynamicMock<IMessageSerializer>(); var registeredConsumer = mockRepository.DynamicMock<IRegisteredConsumer>(); var properties = mockRepository.Stub<IBasicProperties>(); var config = mockRepository.DynamicMock<IBrokerConfiguration>(); using (mockRepository.Record()) { SetupResult.For(registeredConsumer.MessageType).Return(typeof (TestMessage)); SetupResult.For(registeredConsumer.Queue).Return("q"); SetupResult.For(registeredConsumer.ConsumerType).Return(typeof (TestConsumer)); SetupResult.For(messageSerializer.DeserializeMessage(null)).IgnoreArguments().Return( mockRepository.Stub<IMessageEnvelope<TestMessage>>()); SetupResult.For(config.PipelineEvents).Return(new PipelineEvents()); Expect.Call(() => rabbitModel.BasicAck(1, false)); } using (mockRepository.Playback()) { var callbackConsumer = new GroupedCallbackConsumer(rabbitModel, messageSerializer, config); callbackConsumer.ConsumeQueue(registeredConsumer); callbackConsumer.QueueConsumers["q"].Consumer.HandleBasicDeliver("ct1", 1, false, "ex", typeof(TestMessage).ToRoutingKey(), properties, new byte[0]); callbackConsumer.Close(); callbackConsumer.Dispose(); } }
public void ClosesRegisteredConsumerTokensOnClose() { var mockRepository = new MockRepository(); var rabbitModel = mockRepository.DynamicMock<IModel>(); var messageSerializer = mockRepository.DynamicMock<IMessageSerializer>(); var registeredConsumer = mockRepository.DynamicMock<IRegisteredConsumer>(); var config = mockRepository.DynamicMock<IBrokerConfiguration>(); using (mockRepository.Record()) { SetupResult.For(registeredConsumer.Queue).Return("q"); } using (mockRepository.Playback()) { var callbackConsumer = new GroupedCallbackConsumer(rabbitModel, messageSerializer, config); callbackConsumer.ConsumeQueue(registeredConsumer); GroupedCallbackConsumer.QueueConsumer queueConsumer = callbackConsumer.QueueConsumers.Single().Value; Assert.False(queueConsumer.ConsumeToken.IsClosed); callbackConsumer.Close(); Assert.True(queueConsumer.ConsumeToken.IsClosed); } }
public void SetsPrincipalOnDelivery() { var mockRepository = new MockRepository(); var rabbitModel = mockRepository.DynamicMock<IModel>(); var messageSerializer = mockRepository.DynamicMock<IMessageSerializer>(); var registeredConsumer = mockRepository.DynamicMock<IRegisteredConsumer>(); var properties = mockRepository.Stub<IBasicProperties>(); var envelope = mockRepository.DynamicMock<IMessageEnvelope<TestMessage>>(); var message = new TestMessage(); var config = mockRepository.DynamicMock<IBrokerConfiguration>(); var pipelineEvents = new PipelineEvents(); pipelineEvents.ResolvePrincipal += (sender, args) => args.Principal = new GenericPrincipal(new GenericIdentity(args.MessageEnvelope.UserName + "set"), new string[0]); using (mockRepository.Record()) { SetupResult.For(envelope.UserName).Return("user1"); SetupResult.For(registeredConsumer.MessageType).Return(typeof(TestMessage)); SetupResult.For(registeredConsumer.Queue).Return("q"); SetupResult.For(registeredConsumer.ConsumerType).Return(typeof(TestConsumer)); SetupResult.For(envelope.Message).Return(message); SetupResult.For(messageSerializer.DeserializeMessage(null)).IgnoreArguments().Return(envelope); SetupResult.For(config.PipelineEvents).Return(pipelineEvents); Expect.Call(() => registeredConsumer.Invoke(message)).WhenCalled(mi => Assert.Equal("user1set", Thread.CurrentPrincipal.Identity.Name)); } using (mockRepository.Playback()) { var callbackConsumer = new GroupedCallbackConsumer(rabbitModel, messageSerializer, config); callbackConsumer.ConsumeQueue(registeredConsumer); callbackConsumer.QueueConsumers["q"].Consumer.HandleBasicDeliver("ct1", 1, false, "ex", typeof(TestMessage).ToRoutingKey(), properties, new byte[0]); callbackConsumer.Close(); callbackConsumer.Dispose(); } }
public void IsRunningAtCreation() { var mockRepository = new MockRepository(); var rabbitModel = mockRepository.DynamicMock<IModel>(); var messageSerializer = mockRepository.DynamicMock<IMessageSerializer>(); var config = mockRepository.DynamicMock<IBrokerConfiguration>(); var callbackConsumer = new GroupedCallbackConsumer(rabbitModel, messageSerializer, config); Assert.True(callbackConsumer.IsRunning); callbackConsumer.Close(); callbackConsumer.Dispose(); }
public void DeserializesOnDelivery() { var mockRepository = new MockRepository(); var rabbitModel = mockRepository.DynamicMock<IModel>(); var messageSerializer = mockRepository.DynamicMock<IMessageSerializer>(); var registeredConsumer = mockRepository.DynamicMock<IRegisteredConsumer>(); var properties = mockRepository.Stub<IBasicProperties>(); var envelope = mockRepository.DynamicMock<IMessageEnvelope<TestMessage>>(); var config = mockRepository.DynamicMock<IBrokerConfiguration>(); using (mockRepository.Record()) { SetupResult.For(registeredConsumer.MessageType).Return(typeof(TestMessage)); SetupResult.For(registeredConsumer.Queue).Return("q"); Expect.Call(messageSerializer.DeserializeMessage(null)) .IgnoreArguments() .WhenCalled(mi => { var args = mi.Arguments[0] as QueueActivityConsumer.DeliverEventArgs; Assert.Equal(new byte[0], args.Body); Assert.Equal("ct1", args.ConsumerTag); Assert.Equal(1, (long)args.DeliveryTag); Assert.Equal("ex", args.Exchange); Assert.Same(properties, args.Properties); Assert.Equal("q", args.Queue); Assert.Equal(false, args.Redelivered); Assert.Equal(typeof(TestMessage).ToRoutingKey(), args.RoutingKey); }) .Return(envelope); } using (mockRepository.Playback()) { var callbackConsumer = new GroupedCallbackConsumer(rabbitModel, messageSerializer, config); callbackConsumer.ConsumeQueue(registeredConsumer); callbackConsumer.QueueConsumers["q"].Consumer.HandleBasicDeliver("ct1", 1, false, "ex", typeof(TestMessage).ToRoutingKey(), properties, new byte[0]); callbackConsumer.Close(); callbackConsumer.Dispose(); } }