public void CanDoBatchReply() { // arrange const string returnAddress = "some random return address"; var firstMessage = new FirstMessage(); var secondMessage = new SecondMessage(); var someRandomMessage = new SomeRandomMessage(); var fakeContext = Mock <IMessageContext>(); fakeContext.Stub(s => s.ReturnAddress).Return(returnAddress); fakeContext.Stub(s => s.Headers).Return(new Dictionary <string, object>()); fakeContext.Stub(s => s.Items).Return(new Dictionary <string, object>()); // act using (new NoTransaction()) using (FakeMessageContext.Establish(fakeContext)) { bus.Batch.Reply(new object[] { firstMessage, secondMessage, someRandomMessage }); } // assert sendMessages.AssertWasCalled(s => s.Send(Arg <string> .Is.Equal(returnAddress), Arg <TransportMessageToSend> .Is.Anything, Arg <ITransactionContext> .Is.Anything), o => o.Repeat.Once()); }
static async Task <string> GetJsonText(ISerializer serializer, SomeRandomMessage body) { var headers = new Dictionary <string, string>(); var message = new Message(headers, body); var transportMessage = await serializer.Serialize(message); var jsonText = Encoding.UTF8.GetString(transportMessage.Body); return(jsonText); }
public void AttachesHeadersFromMessageToOutgoingMessage() { // arrange var someRandomMessage = new SomeRandomMessage(); bus.AttachHeader(someRandomMessage, Headers.TimeToBeReceived, "00:00:05"); // act bus.Routing.Send("hardcoded.endpoint.to.skip.lookup", someRandomMessage); // assert sendMessages.AssertWasCalled(s => s.Send(Arg <string> .Is.Equal("hardcoded.endpoint.to.skip.lookup"), Arg <TransportMessageToSend> .Matches(t => t.Headers.ContainsKey(Headers.TimeToBeReceived)))); }
public void WillHappilyAttachTheSameHeaderTwice() { // arrange var someRandomMessage = new SomeRandomMessage(); bus.AttachHeader(someRandomMessage, "some-key", "some-value"); // act bus.Routing.Send("somewhere", someRandomMessage); bus.Routing.Send("somewhereElse", someRandomMessage); // assert sendMessages.AssertWasCalled(s => s.Send(Arg <string> .Is.Equal("somewhere"), Arg <TransportMessageToSend> .Matches(t => t.Headers.ContainsKey("some-key")), Arg <ITransactionContext> .Is.Anything)); sendMessages.AssertWasCalled(s => s.Send(Arg <string> .Is.Equal("somewhereElse"), Arg <TransportMessageToSend> .Matches(t => t.Headers.ContainsKey("some-key")), Arg <ITransactionContext> .Is.Anything)); }
public void ThrowsIfInconsistentTimeToBeReceivedHeadersAreIncludedAlsoWhenSecondMessageIsSetToBeReliable() { // arrange var anotherRandomMessage = new SomeRandomMessage(); var someRandomMessage = new SomeRandomMessage(); determineMessageOwnership.Stub(d => d.GetEndpointFor(typeof(SomeRandomMessage))).Return("whatever"); bus.AttachHeader(someRandomMessage, Headers.TimeToBeReceived, "00:00:05"); // act var invalidOperationException = Assert.Throws <InconsistentTimeToBeReceivedException>(() => bus.Batch.Send(new object[] { someRandomMessage, anotherRandomMessage })); // assert //invalidOperationException.Message.ShouldContain("00:00:05"); }
public void ThrowsIfInconsistentTimeToBeReceivedHeadersAreIncluded() { // arrange var anotherRandomMessage = new SomeRandomMessage(); var someRandomMessage = new SomeRandomMessage(); determineDestination.Stub(d => d.GetEndpointFor(typeof(SomeRandomMessage))).Return("whatever"); bus.AttachHeader(someRandomMessage, Headers.TimeToBeReceived, "00:00:05"); bus.AttachHeader(anotherRandomMessage, Headers.TimeToBeReceived, "00:00:10"); // act var invalidOperationException = Assert.Throws <InconsistentTimeToBeReceivedException>(() => bus.Batch.Send(someRandomMessage, anotherRandomMessage)); // assert //invalidOperationException.Message.ShouldContain("00:00:05"); //invalidOperationException.Message.ShouldContain("00:00:10"); }
public void SendsMessagesToTheRightDestinationAlsoWhenSendingBatch() { // arrange determineDestination.Stub(d => d.GetEndpointFor(typeof(PolymorphicMessage))).Return("polymorphic message endpoint"); determineDestination.Stub(d => d.GetEndpointFor(typeof(SomeRandomMessage))).Return("some random message endpoint"); var firstMessage = new PolymorphicMessage(); var secondMessage = new SomeRandomMessage(); // act bus.Batch.Send(firstMessage, secondMessage); // assert sendMessages.AssertWasCalled(s => s.Send(Arg <string> .Is.Equal("polymorphic message endpoint"), Arg <TransportMessageToSend> .Is.Anything)); sendMessages.AssertWasCalled(s => s.Send(Arg <string> .Is.Equal("some random message endpoint"), Arg <TransportMessageToSend> .Is.Anything)); }
static void Main() { using (var appContainer = new WindsorContainer().Install(FromAssembly.This())) { Configure.With(new WindsorContainerAdapter(appContainer)) .Logging(l => l.ColoredConsole(minLevel: LogLevel.Warn)) .Transport(t => t.UseMsmq("sample.usercontextheaders.input", "sample.usercontextheaders.error")) .AutomaticallyTransferUserContext() //< this one is special :) .CreateBus() .Start(); while (true) { Console.Write(@"Type name of person whose context to impersonate, or leave empty to quit > "); var name = Console.ReadLine(); if (string.IsNullOrWhiteSpace(name)) { break; } var notAnActualId = name.GetHashCode(); var userContext = new UserContext { Name = name, UserId = notAnActualId }; using (new AmbientUserContext(userContext)) { var bus = appContainer.Resolve <IBus>(); var greeting = PreFabGreetings.GetOne(); var message = new SomeRandomMessage(greeting); bus.SendLocal(message); } } } }
public void WillHappilyIncludeMessagesOfDifferentTypeInSameTransportMessage() { // arrange var firstMessage = new FirstMessage(); var secondMessage = new SecondMessage(); var thirdMessage = new SomeRandomMessage(); var someEndpoint = "some-endpoint"; determineDestination.Stub(d => d.GetEndpointFor(typeof(FirstMessage))).Return(someEndpoint); determineDestination.Stub(d => d.GetEndpointFor(typeof(SecondMessage))).Return(someEndpoint); determineDestination.Stub(d => d.GetEndpointFor(typeof(SomeRandomMessage))).Return(someEndpoint); // act bus.Batch.Send(firstMessage, secondMessage, thirdMessage); // assert sendMessages.AssertWasCalled(s => s.Send(Arg <string> .Is.Equal(someEndpoint), Arg <TransportMessageToSend> .Is.Anything), o => o.Repeat.Once()); }