Пример #1
0
        public void Should_properly_handle_exception()
        {
            IPipe<TestPipeContext> pipe = Pipe.New<TestPipeContext>(x =>
            {
                x.UseTransaction();
                x.UseExecute(payload => Console.WriteLine("Execute: {0}", Thread.CurrentThread.ManagedThreadId));
                x.UseExecuteAsync(async payload =>
                {
                    await Task.Yield();

                    using (TransactionScope scope = payload.CreateTransactionScope())
                    {
                        Console.WriteLine("ExecuteAsync: {0}", Thread.CurrentThread.ManagedThreadId);

                        Assert.IsNotNull(Transaction.Current);
                        Console.WriteLine("Isolation Level: {0}", Transaction.Current.IsolationLevel);

                        scope.Complete();
                    }

                    throw new InvalidOperationException("This is a friendly boom");
                });
                x.UseExecute(payload => Console.WriteLine("After Transaction: {0}", Thread.CurrentThread.ManagedThreadId));
            });

            var context = new TestPipeContext();

            var exception = Assert.Throws<InvalidOperationException>(async () => await pipe.Send(context));

            Console.WriteLine(exception.Message);
        }
Пример #2
0
        public void Scoped_context_should_not_update_parent()
        {
            var p = new TestPipeContext();

            p.GetOrAddPayload(() => new Item("bob"));

            Item i;

            Assert.That(p.TryGetPayload(out i), Is.True);

            var p2 = new TestProxyPipeContext(p);

            p2.GetOrAddPayload(() => new Item2("bill"));

            Item2 i2;

            Assert.That(p.TryGetPayload(out i2), Is.False);
            Assert.That(p2.TryGetPayload(out i2), Is.True);
            Item i1;

            Assert.That(p2.TryGetPayload(out i1), Is.True);
        }
Пример #3
0
        public void Should_properly_fail()
        {
            IPipe<TestPipeContext> pipe = Pipe.New<TestPipeContext>(x =>
            {
                x.UseTransaction();
                x.UseExecute(payload => Console.WriteLine("Execute: {0}", Thread.CurrentThread.ManagedThreadId));
                x.UseExecuteAsync(payload => Task.Run(() =>
                {
                    using (TransactionScope scope = payload.CreateTransactionScope())
                    {
                        Console.WriteLine("ExecuteAsync: {0}", Thread.CurrentThread.ManagedThreadId);

                        Assert.IsNotNull(Transaction.Current);
                        Console.WriteLine("Isolation Level: {0}", Transaction.Current.IsolationLevel);
                    }
                }));
            });

            var context = new TestPipeContext();

            var exception = Assert.Throws<TransactionAbortedException>(async () => await pipe.Send(context));

            Console.WriteLine(exception.Message);
        }
Пример #4
0
        public async Task Should_properly_succeed()
        {
            IPipe<TestPipeContext> pipe = Pipe.New<TestPipeContext>(x =>
            {
                x.UseTransaction();
                x.UseExecute(payload => Console.WriteLine("Execute: {0}", Thread.CurrentThread.ManagedThreadId));
                x.UseExecuteAsync(payload => Task.Run(() =>
                {
                    using (TransactionScope scope = payload.CreateTransactionScope())
                    {
                        Console.WriteLine("ExecuteAsync: {0}", Thread.CurrentThread.ManagedThreadId);

                        Assert.IsNotNull(Transaction.Current);
                        Console.WriteLine("Isolation Level: {0}", Transaction.Current.IsolationLevel);
                        scope.Complete();
                    }
                }));
            });

            var context = new TestPipeContext();

            await pipe.Send(context);
        }
Пример #5
0
        public void Should_timeout()
        {
            IPipe<TestPipeContext> pipe = Pipe.New<TestPipeContext>(x =>
            {
                x.UseTransaction(t => t.Timeout = TimeSpan.FromSeconds(1));
                x.UseExecute(payload => Console.WriteLine("Execute: {0}", Thread.CurrentThread.ManagedThreadId));
                x.UseExecuteAsync(async payload =>
                {
                    await Task.Yield();

                    using (TransactionScope scope = payload.CreateTransactionScope())
                    {
                        Console.WriteLine("ExecuteAsync: {0}", Thread.CurrentThread.ManagedThreadId);

                        Assert.IsNotNull(Transaction.Current);
                        Console.WriteLine("Isolation Level: {0}", Transaction.Current.IsolationLevel);

                        Thread.Sleep(2000);

                        scope.Complete();
                    }

                    Console.WriteLine("Exited Scope");
                });
                x.UseExecute(payload => Console.WriteLine("After Transaction: {0}", Thread.CurrentThread.ManagedThreadId));
            });

            var context = new TestPipeContext();

            var exception = Assert.Throws<TransactionAbortedException>(async () => await pipe.Send(context));

            Console.WriteLine(exception.Message);
        }