public void Should_Give_Registrations_To_Transport_Layer() { Mock<ITransportProvider> txMock = _mocker.Create<ITransportProvider>(); Mock<IRegistration> regMock = _mocker.Create<IRegistration>(); DefaultEnvelopeBus bus = new DefaultEnvelopeBus(txMock.Object); bus.Register(regMock.Object); txMock.Verify(tx => tx.Register(regMock.Object), Times.Once()); }
public void Should_Dispatch_Envelopes_Even_When_InboundChain_Is_Null() { // create a mostly empty envelope Envelope env = new Envelope() { Payload = Encoding.UTF8.GetBytes("Test") }; // create the mock dispatcher and transport provider Mock<IEnvelopeDispatcher> dispatcherMock = _mocker.Create<IEnvelopeDispatcher>(); Mock<ITransportProvider> txMock = _mocker.Create<ITransportProvider>(); // setup the dispatcher to return the envelope when the getter is called dispatcherMock.Setup(d => d.Envelope).Returns(env); // create the unit under test with the mock transport and null processing chains DefaultEnvelopeBus bus = new DefaultEnvelopeBus(txMock.Object); bus.InboundChain = null; bus.OutboundChain = null; // have the transport mock raise its envelope event txMock.Raise(tx => tx.OnEnvelopeReceived += null, dispatcherMock.Object); // verify that the dispatcher's dispatch method was called // (this implies successful inbound chain processing) dispatcherMock.Verify(d => d.Dispatch(env), Times.Once()); }
public void Should_Send_Incoming_Envelopes_Through_the_Chain() { // create an envelope and context Envelope env = new Envelope() { Payload = Encoding.UTF8.GetBytes("Test") }; EnvelopeContext ctx = new EnvelopeContext(EnvelopeContext.Directions.In, env); // mock a transport provider and envelope processor Mock<ITransportProvider> txMock = _mocker.Create<ITransportProvider>(); Mock<IEnvelopeProcessor> procMock = _mocker.Create<IEnvelopeProcessor>(); Mock<IEnvelopeDispatcher> dispatcherMock = _mocker.Create<IEnvelopeDispatcher>(); dispatcherMock.SetupGet<Envelope>(disp => disp.Envelope).Returns(env); DefaultEnvelopeBus bus = new DefaultEnvelopeBus(txMock.Object); bus.OutboundChain = null; bus.InboundChain = new Dictionary<int, IEnvelopeProcessor>(); bus.InboundChain.Add(0, procMock.Object); txMock.Raise(tx => tx.OnEnvelopeReceived += null, dispatcherMock.Object); procMock.Verify( proc => proc.ProcessEnvelope(It.IsAny<EnvelopeContext>(), It.IsAny<Action>()), Times.Once()); }
public void Should_Send_Outgoing_Envelopes_Through_the_Chain() { // create an envelope Envelope env = new Envelope() { Payload = Encoding.UTF8.GetBytes("Test") }; // mock a transport provider and envelope processor Mock<ITransportProvider> txMock = _mocker.Create<ITransportProvider>(); Mock<IEnvelopeProcessor> procMock = _mocker.Create<IEnvelopeProcessor>(); // setup the processor to call its continuation procMock .Setup( proc => proc.ProcessEnvelope(It.IsAny<EnvelopeContext>(), It.IsAny<Action>())) .Callback<EnvelopeContext, Action>( (newCtx, continuation) => continuation()); // create the unit under test and give it the transport provider and processor chain DefaultEnvelopeBus bus = new DefaultEnvelopeBus(txMock.Object); bus.OutboundChain = new Dictionary<int, IEnvelopeProcessor>(); bus.OutboundChain.Add(0, procMock.Object); // send the envelope bus.Send(env); // verify the expected calls procMock.Verify( proc => proc.ProcessEnvelope(It.IsAny<EnvelopeContext>(), It.IsAny<Action>()), Times.Once()); txMock.Verify(tx => tx.Send(env), Times.Once()); }
public void Should_Send_Envelopes_Even_When_OutboundChain_Is_Null() { Envelope env = new Envelope() { Payload = Encoding.UTF8.GetBytes("Test") }; Mock<ITransportProvider> txMock = _mocker.Create<ITransportProvider>(); DefaultEnvelopeBus bus = new DefaultEnvelopeBus(txMock.Object); bus.InboundChain = null; bus.OutboundChain = null; bus.Send(env); txMock.Verify(tx => tx.Send(env), Times.Once()); }