public void invoking_a_chain_will_execute_completely_with_cascading_immediate_continuations() { FubuTransport.SetupForInMemoryTesting(); using (var runtime = FubuApplication.BootstrapApplication <ChainInvokerApplication>()) { var recorder = runtime.Factory.Get <MessageRecorder>(); var invoker = runtime.Factory.Get <IChainInvoker>(); MessageHistory.WaitForWorkToFinish(() => { invoker.InvokeNow(new TriggerImmediate { Text = "First", ContinueText = "I'm good" }); }); recorder.Messages.Each(x => Debug.WriteLine(x)); // Should process all the cascading messages that bubble up // and their cascaded messages recorder.Messages.ShouldContain("First"); recorder.Messages.ShouldContain("I'm good"); recorder.Messages.ShouldContain("I'm good-2"); recorder.Messages.ShouldContain("I'm good-2-4"); recorder.Messages.ShouldContain("I'm good-2-3"); recorder.Messages.ShouldContain("Traced: I'm good"); } }
public void SetUp() { // Need to do something about this. Little ridiculous FubuTransport.SetupForInMemoryTesting(); TestMessageRecorder.Clear(); MessageHistory.ClearAll(); InMemoryQueueManager.ClearAll(); runtime = FubuTransport.For <DelayedRegistry>().StructureMap(new Container()) .Bootstrap(); theServiceBus = runtime.Factory.Get <IServiceBus>(); theClock = runtime.Factory.Get <ISystemTime>().As <SettableClock>(); message1 = new OneMessage(); message2 = new OneMessage(); message3 = new OneMessage(); message4 = new OneMessage(); theServiceBus.DelaySend(message1, theClock.UtcNow().AddHours(1)); theServiceBus.DelaySend(message2, theClock.UtcNow().AddHours(1)); theServiceBus.DelaySend(message3, theClock.UtcNow().AddHours(2)); theServiceBus.DelaySend(message4, theClock.UtcNow().AddHours(2)); }
public void invoking_a_chain_will_execute_with_failure_does_not_send_off_cascading_messages() { FubuTransport.SetupForInMemoryTesting(); using (var runtime = FubuApplication.BootstrapApplication <ChainInvokerApplication>()) { var recorder = runtime.Factory.Get <MessageRecorder>(); var invoker = runtime.Factory.Get <IChainInvoker>(); MessageHistory.WaitForWorkToFinish(() => { // The handler for WebMessage is rigged to throw exceptions // if it contains the text 'Bad' invoker.InvokeNow(new WebMessage { Text = "Bad message" }); }); recorder.Messages.Each(x => Debug.WriteLine(x)); // NO MESSAGES SHOULD GET OUT WITH THE ORIGINAL 'Bad Message' recorder.Messages.Any(x => x.Contains("Bad message")).ShouldBeFalse(); AssertCascadedMessages(recorder); } }
public void to_in_memory_with_default_settings() { FubuTransport.SetupForInMemoryTesting <DefaultSettings>(); using (var runtime = FubuTransport.For <DefaultRegistry>().StructureMap().Bootstrap()) { var settings = InMemoryTransport.ToInMemory <NodeSettings>(); settings.Inbound.ShouldEqual(new Uri("memory://default/inbound")); settings.Outbound.ShouldEqual(new Uri("memory://node/outbound")); } }
public void the_delayed_processing_polling_job_is_registered() { FubuTransport.SetupForInMemoryTesting(); runtime = FubuTransport.For <DelayedRegistry>().StructureMap(new Container()) .Bootstrap(); runtime.Factory.Get <IPollingJobs>().Any(x => x is PollingJob <DelayedEnvelopeProcessor, TransportSettings>) .ShouldBeTrue(); }
public void the_cleanup_job_is_registered() { FubuTransport.SetupForInMemoryTesting(); using (var runtime = FubuTransport.For <InMemory.DelayedRegistry>().StructureMap(new Container()) .Bootstrap()) { runtime.Factory.Get <IPollingJobs>().Any(x => x is PollingJob <ExpiringListenerCleanup, TransportSettings>) .ShouldBeTrue(); } }
public void SetUp() { FubuTransport.SetupForInMemoryTesting(); theLogger = new SagaLogger(); theContainer = new Container(x => { x.For <SagaSettings>().Use(InMemoryTransport.ToInMemory <SagaSettings>()); x.For <SagaLogger>().Use(theLogger); x.For <IListener>().Add <MessageWatcher>(); }); theRuntime = FubuTransport.For <SagaTestRegistry>().StructureMap(theContainer).Bootstrap(); MessageHistory.StartListening(); }
public SampleSystem() { OnContextCreation <SystemUnderTest.MessageRecorder>(x => x.Messages.Clear()); FubuTransport.SetupForInMemoryTesting <TestSettings>(); }
internal void Execute(IScenarioWriter writer) { TraceListener[] listeners = new TraceListener[Debug.Listeners.Count]; Debug.Listeners.CopyTo(listeners, 0); Debug.Listeners.Clear(); FubuTransport.SetupForInMemoryTesting(); InMemoryQueueManager.ClearAll(); TestMessageRecorder.Clear(); MessageHistory.ClearAll(); _configurations.Each(x => x.SpinUp()); writer.WriteTitle(Title); using (writer.Indent()) { writeArrangement(writer); writer.WriteLine("Actions"); using (writer.Indent()) { _steps.Each(x => { x.PreviewAct(writer); try { x.Act(writer); } catch (Exception e) { writer.Exception(e); } }); } var success = Wait.Until(() => { return(!MessageHistory.Outstanding().Any()); }, timeoutInMilliseconds: 60000); Debug.Listeners.AddRange(listeners); if (success) { writer.WriteLine("Messages are all accounted for"); } else { writer.WriteLine("Messages are outstanding:"); MessageHistory.Outstanding().Each(x => Debug.WriteLine(x)); } writer.BlankLine(); _configurations.Each(x => x.SafeDispose()); writer.WriteLine("Assertions"); using (writer.Indent()) { _steps.Each(x => { x.PreviewAssert(writer); x.Assert(writer); }); } writer.BlankLine(); if (TestMessageRecorder.AllProcessed.Any()) { writer.WriteLine("Messages Received"); TestMessageRecorder.AllProcessed.Each(x => { writer.Bullet("{0} received by {1}", x.Message.GetType().Name, x.Message.Source); }); } else { writer.WriteLine("No messages were received!"); } var unexpectedMessages = TestMessageRecorder.AllProcessed.Where(x => !_steps.Any(step => step.MatchesSentMessage(x.Message))) .ToArray(); if (unexpectedMessages.Any()) { writer.BlankLine(); writer.WriteLine("Found unexpected messages"); unexpectedMessages.Each(x => writer.Failure(x.ToString())); } } }