Example #1
0
        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);
        }
Example #3
0
        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))));
        }
Example #4
0
        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));
        }
Example #5
0
        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");
        }
Example #6
0
        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");
        }
Example #7
0
        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));
        }
Example #8
0
        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);
                    }
                }
            }
        }
Example #9
0
        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());
        }