public void can_send_and_receive_async_message() { var trigger = new AutoResetEvent(false); IMessageBus bus = new MessageBus(); TestMessage receivedMessage = null; int currentThreadId = Thread.CurrentThread.ManagedThreadId; int handlerThreadId = 0; bus.Subscribe<TestMessage>(MessageHandlerType.Asynchronous, message => { handlerThreadId = Thread.CurrentThread. ManagedThreadId; receivedMessage = message; trigger.Set(); }, false); var sentMessage = new TestMessage { Text = "Hello bus" }; bus.Send(sentMessage); trigger.WaitOne(1000); //ensure we got the message Assert.AreSame(sentMessage, receivedMessage); //ensure we didn't handle it in the main thread Assert.AreNotEqual(currentThreadId, handlerThreadId); }
public void can_send_and_receive_sync_message() { IMessageBus bus = new MessageBus(); TestMessage receivedMessage = null; bus.Subscribe<TestMessage>(MessageHandlerType.Synchronous, message => receivedMessage = message, false); var sentMessage = new TestMessage { Text = "Hello bus" }; bus.Send(sentMessage); Assert.AreSame(sentMessage, receivedMessage); }
public void can_register_multiple_handlers_for_message_type() { IMessageBus bus = new MessageBus(); TestMessage receivedMessage1 = null; TestMessage receivedMessage2 = null; bus.Subscribe<TestMessage>(MessageHandlerType.Synchronous, message => receivedMessage1 = message, false); bus.Subscribe<TestMessage>(MessageHandlerType.Synchronous, message => receivedMessage2 = message, false); var sentMessage = new TestMessage { Text = "Hello bus" }; bus.Send(sentMessage); Assert.AreSame(sentMessage, receivedMessage1); Assert.AreSame(sentMessage, receivedMessage2); }
public void can_send_FailedMessage_when_messagehandler_throws() { IMessageBus bus = new MessageBus(); FailedMessage receivedFailedMessage = null; bus.Subscribe<TestMessage>(MessageHandlerType.Synchronous, message => { throw new Exception("This should throw"); }, true); bus.Subscribe<FailedMessage>(MessageHandlerType.Synchronous, message => receivedFailedMessage = message, false); var sentMessage = new TestMessage { Text = "Hello bus" }; bus.Send(sentMessage); Assert.IsNotNull(receivedFailedMessage); }
public void can_process_messages_via_RX() { var trigger = new AutoResetEvent(false); IMessageBus bus = new MessageBus(); string receivedMessage = null; IObservable<string> query = bus.MessageSubject .Delay(new TimeSpan(0, 0, 1)) .Select(m => m as TestMessage) .Where(m => m != null) .Select(m => m.Text) .Where(s => s == "Hello bus"); query.Subscribe(m => { receivedMessage = m; trigger.Set(); }); var sentMessage1 = new TestMessage { Text = "First message" }; var sentMessage2 = new TestMessage { Text = "Hello bus" }; bus.Send(sentMessage1); bus.Send(sentMessage2); trigger.WaitOne(3000); Assert.AreEqual(sentMessage2.Text, receivedMessage); }