public void handle_chain_finished() { MessageHistory.StartListening(); var @event = new ChainExecutionStarted { ChainId = Guid.NewGuid(), Envelope = new EnvelopeToken() }; var messageWatcher = new MessageWatcher(); messageWatcher.Handle(@event); var finished = new ChainExecutionFinished { ChainId = @event.ChainId, Envelope = @event.Envelope }; messageWatcher.Handle(finished); var received = MessageHistory.Received().Single(); received.Id.ShouldEqual(@event.Envelope.CorrelationId); received.Description.ShouldEqual(finished.ToString()); received.Type.ShouldEqual(MessageWatcher.MessageTrackType); MessageHistory.Outstanding().Any().ShouldBeFalse(); }
public void handle_envelope_sent_then_message_successful_for_multiple_messages_to_the_same_node() { MessageHistory.ClearHistory(); var envelope1 = new EnvelopeToken(); var envelope2 = new EnvelopeToken(); var node1 = new StubChannelNode(); MessageHistory.Record(new EnvelopeSent(envelope1, node1).ToMessageTrack()); MessageHistory.Record(new EnvelopeSent(envelope2, node1).ToMessageTrack()); MessageHistory.Outstanding().Count().ShouldBe(2); envelope1.Destination = node1.Uri; MessageHistory.Record(new MessageSuccessful { Envelope = envelope1 }.ToMessageTrack()); MessageHistory.Outstanding().Count().ShouldBe(1); envelope2.Destination = node1.Uri; MessageHistory.Record(new MessageSuccessful { Envelope = envelope2 }.ToMessageTrack()); MessageHistory.Outstanding().Any().ShouldBeFalse(); }
public void handle_envelope_sent_then_message_failed_tracking_for_the_same_message_to_multiple_nodes() { MessageHistory.ClearHistory(); var envelope1 = new EnvelopeToken(); var node1 = new StubChannelNode(); var node2 = new StubChannelNode(); MessageHistory.Record(new EnvelopeSent(envelope1, node1)); MessageHistory.Record(new EnvelopeSent(envelope1, node2)); MessageHistory.Outstanding().Count().ShouldBe(2); envelope1.Destination = node1.Uri; MessageHistory.Record(new MessageFailed { Envelope = envelope1 }); MessageHistory.Outstanding().Count().ShouldBe(1); envelope1.Destination = node2.Uri; MessageHistory.Record(new MessageFailed { Envelope = envelope1 }); MessageHistory.Outstanding().Any().ShouldBeFalse(); }
public void handle_envelope_sent_then_message_successful_tracking_for_the_same_message_to_multiple_nodes() { MessageHistory.StartListening(); var envelope1 = new EnvelopeToken(); var node1 = new StubChannelNode(); var node2 = new StubChannelNode(); var messageWatcher = new MessageWatcher(); messageWatcher.Handle(new EnvelopeSent(envelope1, node1)); messageWatcher.Handle(new EnvelopeSent(envelope1, node2)); MessageHistory.Outstanding().Count().ShouldEqual(2); envelope1.Destination = node1.Uri; messageWatcher.Handle(new MessageSuccessful { Envelope = envelope1 }); MessageHistory.Outstanding().Count().ShouldEqual(1); envelope1.Destination = node2.Uri; messageWatcher.Handle(new MessageSuccessful { Envelope = envelope1 }); MessageHistory.Outstanding().Any().ShouldBeFalse(); }
public void handle_chain_started() { MessageHistory.StartListening(); var @event = new ChainExecutionStarted { ChainId = Guid.NewGuid(), Envelope = new EnvelopeToken() }; new MessageWatcher().Handle(@event); var sent = MessageHistory.Outstanding().Single(); sent.Id.ShouldEqual(@event.Envelope.CorrelationId); sent.Description.ShouldEqual(@event.ToString()); sent.Type.ShouldEqual(MessageWatcher.MessageTrackType); }
public void try_to_run_the_saga_from_beginning_to_end_with_implementing_class() { var serviceBus = theContainer.GetInstance <IServiceBus>(); serviceBus.Send(new ImplementingClass { Name = "Jeremy" }); Wait.Until(() => !MessageHistory.Outstanding().Any(), timeoutInMilliseconds: 60000); var messages = theLogger.Traces.Select(x => x.Message); theLogger.Traces.Select(x => x.Id).Distinct() .Count().ShouldBe(1); // should be the same correlation id all the way through messages .ShouldHaveTheSameElementsAs("Started Jeremy", "Updated Jeremy", "Finished with Updated Jeremy!"); }
public void clear_history_removes_all() { var foo1 = new Foo(); var foo2 = new Foo(); var foo3 = new Foo(); MessageHistory.Record(MessageTrack.ForReceived(foo1)); MessageHistory.Record(MessageTrack.ForReceived(foo2)); MessageHistory.Record(MessageTrack.ForReceived(foo3)); MessageHistory.Record(MessageTrack.ForSent(foo1)); MessageHistory.Record(MessageTrack.ForSent(foo2)); MessageHistory.Record(MessageTrack.ForSent(foo3)); MessageHistory.ClearHistory(); MessageHistory.Outstanding().Any().ShouldBeFalse(); MessageHistory.Received().Any().ShouldBeFalse(); MessageHistory.All().Any().ShouldBeFalse(); }
public void clear_all_absolutely_has_to_work() { var foo1 = new Foo(); var foo2 = new Foo(); var foo3 = new Foo(); MessageHistory.Record(MessageTrack.ForReceived(foo1)); MessageHistory.Record(MessageTrack.ForReceived(foo2)); MessageHistory.Record(MessageTrack.ForReceived(foo3)); MessageHistory.Record(MessageTrack.ForSent(foo1)); MessageHistory.Record(MessageTrack.ForSent(foo2)); MessageHistory.Record(MessageTrack.ForSent(foo3)); MessageHistory.ClearAll(); MessageHistory.Outstanding().Any().ShouldBeFalse(); MessageHistory.Received().Any().ShouldBeFalse(); MessageHistory.All().Any().ShouldBeFalse(); }
public void Handle(EnvelopeReceived message) { EnvelopeToken envelope = message.Envelope; _receivedEnvelopes.Add(envelope); // Acknowledge that the message was received so it doesn't // get stuck as Outstanding in the MessageHistory // Sometimes this happens in the wrong order so we need to // wait for it to be in the pending list first. FubuMVC.Core.Services.Wait.Until(() => MessageHistory.Outstanding().Any(x => x.Id == envelope.CorrelationId), millisecondPolling: 50, timeoutInMilliseconds: 1000); var track = new MessageTrack { FullName = "{0}@{1}".ToFormat(envelope.CorrelationId, envelope.Destination), Id = envelope.CorrelationId, Status = MessageTrack.Received, Type = "OutstandingEnvelope" }; FubuMVC.Core.Services.Messaging.GlobalMessageTracking.SendMessage(track); }
public void track_outstanding() { var foo1 = new Foo(); var foo2 = new Foo(); var foo3 = new Foo(); MessageHistory.Record(MessageTrack.ForSent(foo1)); MessageHistory.Record(MessageTrack.ForSent(foo2)); MessageHistory.Record(MessageTrack.ForSent(foo3)); MessageHistory.Outstanding().Select(x => x.Id) .ShouldHaveTheSameElementsAs(foo1.Id.ToString(), foo2.Id.ToString(), foo3.Id.ToString()); MessageHistory.Record(MessageTrack.ForReceived(foo2)); MessageHistory.Outstanding().Select(x => x.Id) .ShouldHaveTheSameElementsAs(foo1.Id.ToString(), foo3.Id.ToString()); MessageHistory.Record(MessageTrack.ForReceived(foo3)); MessageHistory.Outstanding().Select(x => x.Id) .ShouldHaveTheSameElementsAs(foo1.Id.ToString()); }
public void handle_chain_finished() { MessageHistory.ClearHistory(); var @event = new ChainExecutionStarted { ChainId = Guid.NewGuid(), Envelope = new EnvelopeToken() }; var finished = new ChainExecutionFinished { ChainId = @event.ChainId, Envelope = @event.Envelope }; var received = finished.ToMessageTrack(); received.Id.ShouldBe(@event.Envelope.CorrelationId); received.Description.ShouldBe(finished.ToString()); received.Type.ShouldBe(MessageLogRecord.MessageTrackType); MessageHistory.Outstanding().Any().ShouldBeFalse(); }
protected void waitForTheMessageProcessingToFinish() { Wait.Until(() => !MessageHistory.Outstanding().Any() && MessageHistory.All().Any(), timeoutInMilliseconds: TimeoutInMilliseconds); }
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())); } } }