public async Task WrapsInvokersSoTheyCanRunInsideAnActivity()
        {
            var step = new IncomingDiagnosticsHandlerInvokerWrapper();

            var headers = new Dictionary <string, string>
            {
                { Headers.Type, "MyType" }
            };
            var transportMessage = new TransportMessage(headers, Array.Empty <byte>());
            var message          = new Message(headers, Array.Empty <byte>());

            var innerInvoker = new TestInvoker(() => { });

            var handlerInvokers = new HandlerInvokers(message, new[] { innerInvoker });

            var scope   = new RebusTransactionScope();
            var context = new IncomingStepContext(transportMessage, scope.TransactionContext);

            context.Save(handlerInvokers);

            var callbackWasInvoked = false;
            await step.Process(context, () =>
            {
                callbackWasInvoked = true;
                return(Task.CompletedTask);
            });

            Assert.That(callbackWasInvoked);

            var updatedInvokers = context.Load <HandlerInvokers>();

            Assert.That(updatedInvokers, Is.Not.SameAs(handlerInvokers));
            Assert.That(updatedInvokers, Has.Exactly(1).Items.And.All.TypeOf <HandlerInvokerWrapper>());
        }
 /// <summary>
 /// Reorders the handler invokers if necessary
 /// </summary>
 public async Task Process(IncomingStepContext context, Func<Task> next)
 {
     var handlerInvokers = context.Load<HandlerInvokers>();
     var orderedHandlerInvokers = handlerInvokers.OrderBy(i => _configuration.GetIndex(i.Handler));
     var newHandlerInvokers = new HandlerInvokers(handlerInvokers.Message, orderedHandlerInvokers);
     
     context.Save(newHandlerInvokers);
     
     await next();
 }
        /// <summary>
        /// Reorders the handler invokers if necessary
        /// </summary>
        public async Task Process(IncomingStepContext context, Func <Task> next)
        {
            var handlerInvokers        = context.Load <HandlerInvokers>();
            var orderedHandlerInvokers = handlerInvokers.OrderBy(i => _configuration.GetIndex(i.Handler));
            var newHandlerInvokers     = new HandlerInvokers(orderedHandlerInvokers);

            context.Save(newHandlerInvokers);

            await next();
        }
Exemple #4
0
        public Task Process(IncomingStepContext context, Func <Task> next)
        {
            var currentHandlerInvokers = context.Load <HandlerInvokers>();

            var message     = currentHandlerInvokers.Message;
            var messageType = message.GetMessageType();

            var wrappedHandlerInvokers = currentHandlerInvokers
                                         .Select(invoker => new HandlerInvokerWrapper(invoker, messageType));

            var updatedHandlerInvokers = new HandlerInvokers(message, wrappedHandlerInvokers);

            context.Save(updatedHandlerInvokers);

            return(next());
        }
Exemple #5
0
        static IncomingStepContext GetIncomingStepContext(int number)
        {
            const string messageId = "some-id";
            var          headers   = new Dictionary <string, string>
            {
                { Headers.MessageId, messageId },
                { "number", (number % 20).ToString() }
            };

            var transportMessage   = new TransportMessage(headers, new byte[0]);
            var transactionContext = new TransactionContext();
            var context            = new IncomingStepContext(transportMessage, transactionContext);
            var message            = new Message(headers, new object());

            context.Save(message);

            var handlerInvokers = new HandlerInvokers(message, new[]
            {
                new HandlerInvoker <object>(messageId, async() => {}, new WhateverSaga(), transactionContext),
            });

            context.Save(handlerInvokers);
            return(context);
        }