/// <summary> /// 测试方法 /// </summary> /// <param name="args"></param> static void Main(string[] args) { BaseEventSender sender = new BaseEventSender(1000); BaseEventSubscriber subscriber = new BaseEventSubscriber(sender); sender.Run(); RabbitMqMessageReceiver receiver = new RabbitMqMessageReceiver(); receiver.ReceiveMessage(); Console.ReadKey(); }
public void CreateModelIsCalledInConstructor() { // Arrange var connectionMock = new Mock <IConnection>(); var contextMock = new Mock <IBusContext <IConnection> >(); contextMock.SetupGet(e => e.Connection).Returns(connectionMock.Object); // Act _ = new RabbitMqMessageReceiver(contextMock.Object, "test.queue", null); // Assert connectionMock.Verify(e => e.CreateModel()); }
public void QueueNameIsProperlySet(string queueName) { // Arrange var connectionMock = new Mock <IConnection>(); var contextMock = new Mock <IBusContext <IConnection> >(); contextMock.SetupGet(e => e.Connection).Returns(connectionMock.Object); // Act var result = new RabbitMqMessageReceiver(contextMock.Object, queueName, null); // Assert Assert.AreEqual(queueName, result.QueueName); }
public void TopicExpressionsIsProperlySet(string topics) { // Arrange var topicNames = topics.Split(','); var connectionMock = new Mock <IConnection>(); var contextMock = new Mock <IBusContext <IConnection> >(); contextMock.SetupGet(e => e.Connection).Returns(connectionMock.Object); // Act var result = new RabbitMqMessageReceiver(contextMock.Object, "test.queue", topicNames); // Assert Assert.AreSame(topicNames, result.TopicFilters); }
public void StartReceivingMessagesDeclaresQueue(string queueName) { // Arrange var connectionMock = new Mock <IConnection>(); var contextMock = new Mock <IBusContext <IConnection> >(); var modelMock = new Mock <IModel>(); contextMock.SetupGet(e => e.Connection).Returns(connectionMock.Object); connectionMock.Setup(e => e.CreateModel()).Returns(modelMock.Object); var receiver = new RabbitMqMessageReceiver(contextMock.Object, queueName, new string[0]); // Act receiver.StartReceivingMessages(); // Assert modelMock.Verify(e => e.QueueDeclare(queueName, true, false, false, null)); }
public void DisposeIsCalledOnModel() { // Arrange var connectionMock = new Mock <IConnection>(); var contextMock = new Mock <IBusContext <IConnection> >(); var modelMock = new Mock <IModel>(); contextMock.SetupGet(e => e.Connection).Returns(connectionMock.Object); connectionMock.Setup(e => e.CreateModel()).Returns(modelMock.Object); var receiver = new RabbitMqMessageReceiver(contextMock.Object, "test.queue", new string[0]); // Act receiver.Dispose(); // Assert modelMock.Verify(e => e.Dispose()); }
public void PauseCallsBasicCancelOnModel() { // Arrange var connectionMock = new Mock <IConnection>(); var contextMock = new Mock <IBusContext <IConnection> >(); var modelMock = new Mock <IModel>(); contextMock.SetupGet(e => e.Connection).Returns(connectionMock.Object); connectionMock.Setup(e => e.CreateModel()).Returns(modelMock.Object); var receiver = new RabbitMqMessageReceiver(contextMock.Object, "queue", new string[0]); receiver.StartReceivingMessages(); // Act receiver.Pause(); // Assert modelMock.Verify(e => e.BasicCancel(It.IsAny <string>())); }
public void ResumeThrowsExceptionWhenNotListening() { // Arrange var connectionMock = new Mock <IConnection>(); var contextMock = new Mock <IBusContext <IConnection> >(); var modelMock = new Mock <IModel>(); contextMock.SetupGet(e => e.Connection).Returns(connectionMock.Object); connectionMock.Setup(e => e.CreateModel()).Returns(modelMock.Object); var receiver = new RabbitMqMessageReceiver(contextMock.Object, "queue", new string[0]); // Act void Act() => receiver.Resume(); // Assert BusConfigurationException exception = Assert.ThrowsException <BusConfigurationException>(Act); Assert.AreEqual("Attempting to resume the MessageReceiver, but it is not even receiving messages.", exception.Message); }
public void StartHandlingMessagesCallsBasicConsume(string queueName) { // Arrange var connectionMock = new Mock <IConnection>(); var contextMock = new Mock <IBusContext <IConnection> >(); var modelMock = new Mock <IModel>(); contextMock.SetupGet(e => e.Connection).Returns(connectionMock.Object); connectionMock.Setup(e => e.CreateModel()).Returns(modelMock.Object); var receiver = new RabbitMqMessageReceiver(contextMock.Object, queueName, new string[0]); receiver.StartReceivingMessages(); // Act receiver.StartHandlingMessages(e => {}); // Assert modelMock.Verify(e => e.BasicConsume(queueName, true, It.IsAny <string>(), false, false, null, It.IsAny <IBasicConsumer>())); }
public void StartHandlingMessagesThrowsExceptionOnNotListening() { // Arrange var connectionMock = new Mock <IConnection>(); var contextMock = new Mock <IBusContext <IConnection> >(); var modelMock = new Mock <IModel>(); contextMock.SetupGet(e => e.Connection).Returns(connectionMock.Object); connectionMock.Setup(e => e.CreateModel()).Returns(modelMock.Object); var receiver = new RabbitMqMessageReceiver(contextMock.Object, "test.queue", null); // Act void Act() => receiver.StartHandlingMessages(e => {}); // Assert var exception = Assert.ThrowsException <BusConfigurationException>(Act); Assert.AreEqual("Receiver is not listening to events", exception.Message); }
public void CallbackIsCalledWithProperMessage(string exchangeName, string topic, string eventType) { // Arrange var connectionMock = new Mock <IConnection>(); var contextMock = new Mock <IBusContext <IConnection> >(); var modelMock = new Mock <IModel>(); contextMock.SetupGet(e => e.Connection).Returns(connectionMock.Object); connectionMock.Setup(e => e.CreateModel()).Returns(modelMock.Object); IBasicConsumer consumer = null; // Retrieve consumer from callback var receiver = new RabbitMqMessageReceiver(contextMock.Object, "test.queue", new string[0]); modelMock.Setup( e => e.BasicConsume("test.queue", true, It.IsAny <string>(), false, false, null, It.IsAny <IBasicConsumer>())) .Callback <string, bool, string, bool, bool, IDictionary <string, object>, IBasicConsumer>( (a, b, c, d, e, f, givenConsumer) => consumer = givenConsumer); EventMessage eventMessage = null; receiver.StartReceivingMessages(); receiver.StartHandlingMessages(e => eventMessage = e); Guid guid = Guid.NewGuid(); IBasicProperties properties = new BasicProperties { CorrelationId = guid.ToString(), Type = eventType }; // Act Thread.Sleep(WaitTime); consumer.HandleBasicDeliver(It.IsAny <string>(), 0, false, exchangeName, topic, properties, new byte[0]); // Assert Assert.AreEqual(topic, eventMessage.Topic); Assert.AreEqual(eventType, eventMessage.EventType); Assert.AreEqual(guid, eventMessage.CorrelationId); }
static void Main(string[] args) { IMessageSender ms = new RabbitMqMessageSender("TestQ"); Console.WriteLine("Connected to TestQ..."); var o = new Wibbler("Hello Matey"); ms.PublishObjectAsMessage(o); RabbitMqMessageReceiver mr = new RabbitMqMessageReceiver("TestQ"); mr.Consumer.Received += (sender, e) => { var body = e.Body; var message = Encoding.UTF8.GetString(body); Wibbler w = JsonConvert.DeserializeObject <Wibbler>(message); Console.SetCursorPosition(0, Console.CursorTop - 2); Console.WriteLine($" [x] Received {w.Id} on {mr.QueueName}, containing the comment {w.Comment}"); Console.WriteLine(" "); Console.WriteLine("Press [enter] to exit..."); }; mr.ConsumeMessage(); Console.WriteLine("Press [enter] to exit..."); var t = new System.Timers.Timer(5000); t.Elapsed += (sender, e) => { ms.PublishObjectAsMessage(o); }; t.Start(); Console.ReadLine(); ms.Dispose(); mr.Dispose(); }
public void StartReceivingMessagesCanOnlyBeCalledOnce() { // Arrange var connectionMock = new Mock <IConnection>(); var contextMock = new Mock <IBusContext <IConnection> >(); var modelMock = new Mock <IModel>(); contextMock.SetupGet(e => e.Connection).Returns(connectionMock.Object); connectionMock.Setup(e => e.CreateModel()).Returns(modelMock.Object); var receiver = new RabbitMqMessageReceiver(contextMock.Object, "test.queue", new string[0]); receiver.StartReceivingMessages(); // Act void Act() => receiver.StartReceivingMessages(); // Assert var exception = Assert.ThrowsException <BusConfigurationException>(Act); Assert.AreEqual("Receiver is already listening to events!", exception.Message); }
public void PauseThrowsExceptionIfAlreadyPaused() { // Arrange var connectionMock = new Mock <IConnection>(); var contextMock = new Mock <IBusContext <IConnection> >(); var modelMock = new Mock <IModel>(); contextMock.SetupGet(e => e.Connection).Returns(connectionMock.Object); connectionMock.Setup(e => e.CreateModel()).Returns(modelMock.Object); var receiver = new RabbitMqMessageReceiver(contextMock.Object, "queue", new string[0]); receiver.StartReceivingMessages(); receiver.Pause(); // Act void Act() => receiver.Pause(); // Assert BusConfigurationException exception = Assert.ThrowsException <BusConfigurationException>(Act); Assert.AreEqual("Attempting to pause the MessageReceiver, but it was already paused.", exception.Message); }
public void StartReceivingMessagesBindsQueueToTopics(string exchangeName, string queueName, string topics) { // Arrange var topicNames = topics.Split(','); var connectionMock = new Mock <IConnection>(); var contextMock = new Mock <IBusContext <IConnection> >(); var modelMock = new Mock <IModel>(); contextMock.SetupGet(e => e.Connection).Returns(connectionMock.Object); contextMock.Setup(e => e.ExchangeName).Returns(exchangeName); connectionMock.Setup(e => e.CreateModel()).Returns(modelMock.Object); var receiver = new RabbitMqMessageReceiver(contextMock.Object, queueName, topicNames); // Act receiver.StartReceivingMessages(); // Assert foreach (string topic in topicNames) { modelMock.Verify(e => e.QueueBind(queueName, exchangeName, topic, null)); } }