public async Task Should_send_to_next_destination_if_no_error()
        {
            var routingSlip = new RoutingSlip(Guid.NewGuid(), null, "foo", "bar");

            var router  = new Router();
            var context = new TestableInvokeHandlerContext
            {
                MessageHeaders =
                {
                    [Router.RoutingSlipHeaderKey] = Newtonsoft.Json.JsonConvert.SerializeObject(routingSlip)
                }
            };

            await router.Invoke(context, () => Task.FromResult(0));

            context.Extensions.TryGet(out routingSlip).ShouldBeTrue();

            context.Headers[Router.RoutingSlipHeaderKey].ShouldNotBeNull();

            routingSlip.Itinerary.Count.ShouldBe(1);
            routingSlip.Log.Count.ShouldBe(1);
            routingSlip.Log[0].Address.ShouldBe("foo");

            context.ForwardedMessages.Length.ShouldBe(1);
            context.ForwardedMessages[0].ShouldBe("bar");
        }
        public InvokeHandlerBehaviorTestsFixture()
        {
            Behavior                   = new UnitOfWorkContextBehavior();
            Builder                    = new FakeBuilder();
            UnitOfWorkContext          = new Mock <IUnitOfWorkContext>();
            SynchronizedStorageSession = new Mock <SynchronizedStorageSession>();
            NextTask                   = new Mock <Func <Task> >();

            Context = new TestableInvokeHandlerContext
            {
                Builder = Builder,
                SynchronizedStorageSession = SynchronizedStorageSession.Object
            };

            UnitOfWorkContext.Setup(c => c.Set(It.IsAny <SynchronizedStorageSession>())).Callback <SynchronizedStorageSession>(s =>
            {
                if (NextTaskInvoked)
                {
                    throw new Exception("Set called too late");
                }
            });

            NextTask.Setup(n => n()).Returns(Task.CompletedTask).Callback(() => NextTaskInvoked = true);

            Builder.Register(UnitOfWorkContext.Object);
        }
        public async Task CanBeUsed()
        {
            var dictionary = await stateManager.GetOrAddAsync <IReliableDictionary <string, string> >("test4", TimeSpan.FromSeconds(5));

            using (var tx = stateManager.CreateTransaction())
            {
                var testableSession =
                    new TestableServiceFabricStorageSession(stateManager, tx);
                var handlerContext = new TestableInvokeHandlerContext
                {
                    SynchronizedStorageSession = testableSession
                };

                var handler = new HandlerUsingSynchronizedStorageSessionExtension();
                await handler.Handle(new MyMessage(), handlerContext);

                await tx.CommitAsync();
            }

            using (var tx = stateManager.CreateTransaction())
            {
                var value = await dictionary.TryGetValueAsync(tx, "Key");

                Assert.True(value.HasValue);
                Assert.AreEqual("Value", value.Value);
            }
        }
        static IInvokeHandlerContext CreateBehaviorContext(MessageHandler messageHandler)
        {
            var behaviorContext = new TestableInvokeHandlerContext
            {
                MessageHandler = messageHandler
            };

            return(behaviorContext);
        }
Пример #5
0
    public async Task InvokeHandlerContext()
    {
        var context = new TestableInvokeHandlerContext
        {
            Headers = new Dictionary <string, string> {
                { "Key", "Value" }
            },
        };
        await context.Send(new MyMessage());

        await Verify(context);
    }
        public async Task CanBeUsed()
        {
            var transactionalBatch = new FakeTransactionalBatch();

            var testableSession = new TestableCosmosSynchronizedStorageSession(new PartitionKey("mypartitionkey"))
            {
                TransactionalBatch = transactionalBatch
            };
            var handlerContext = new TestableInvokeHandlerContext
            {
                SynchronizedStorageSession = testableSession
            };

            var handler = new HandlerUsingSynchronizedStorageSessionExtension();
            await handler.Handle(new MyMessage(), handlerContext);

            Assert.IsNotEmpty(transactionalBatch.CreatedItems.OfType <MyItem>());
        }
Пример #7
0
        public async Task Should_fire_activity_start_stop_when_listener_attached()
        {
            var diagnosticListener = new DiagnosticListener("DummySource");
            var context            = new TestableInvokeHandlerContext();
            var processedFired     = false;

            diagnosticListener.Subscribe(new CallbackDiagnosticListener(pair =>
            {
                if (pair.Key == $"{ActivityNames.InvokedHandler}.Processed")
                {
                    processedFired = true;
                }
            }));

            var behavior = new InvokedHandlerDiagnostics(diagnosticListener);

            await behavior.Invoke(context, () => Task.CompletedTask);

            processedFired.ShouldBeTrue();
        }
        public async Task Should_complete_route()
        {
            var routingSlip = new RoutingSlip(Guid.NewGuid(), null, "foo", "bar");

            routingSlip.RecordStep();

            var router  = new Router();
            var context = new TestableInvokeHandlerContext
            {
                MessageHeaders =
                {
                    [Router.RoutingSlipHeaderKey] = Newtonsoft.Json.JsonConvert.SerializeObject(routingSlip)
                }
            };

            await router.Invoke(context, () => Task.FromResult(0));

            context.Extensions.TryGet(out routingSlip).ShouldBeTrue();

            context.Headers.ContainsKey(Router.RoutingSlipHeaderKey).ShouldBeFalse();

            context.ForwardedMessages.Length.ShouldBe(0);
        }
        public InvokeHandlerBehaviorTestsFixture()
        {
            Behavior          = new InvokeHandlerBehavior();
            Builder           = new FakeBuilder();
            UnitOfWorkContext = new Mock <IUnitOfWorkContext>();
            StorageSession    = new Mock <SynchronizedStorageSession>();
            SqlStorageSession = StorageSession.As <ISqlStorageSession>();
            Connection        = new Mock <DbConnection>();
            Transaction       = new Mock <DbTransaction>();

            Context = new TestableInvokeHandlerContext
            {
                Builder = Builder,
                SynchronizedStorageSession = StorageSession.Object
            };

            UnitOfWorkContext.Setup(c => c.Set <DbConnection>(null)).Callback <DbConnection>(t =>
            {
                if (NextTaskInvoked)
                {
                    throw new Exception("Set called too late");
                }
            });

            UnitOfWorkContext.Setup(c => c.Set <DbTransaction>(null)).Callback <DbTransaction>(t =>
            {
                if (NextTaskInvoked)
                {
                    throw new Exception("Set called too late");
                }
            });

            SqlStorageSession.Setup(s => s.Connection).Returns(Connection.Object);
            SqlStorageSession.Setup(s => s.Transaction).Returns(Transaction.Object);
            Builder.Register(UnitOfWorkContext.Object);
        }