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");
            }
        }
Exemplo n.º 2
0
        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();
        }
Exemplo n.º 8
0
 public SampleSystem()
 {
     OnContextCreation <SystemUnderTest.MessageRecorder>(x => x.Messages.Clear());
     FubuTransport.SetupForInMemoryTesting <TestSettings>();
 }
Exemplo n.º 9
0
        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()));
                }
            }
        }