Example #1
0
        private async Task ExecuteAsync_throws_for_an_ambient_transaction(Func <ExecutionStrategy, Task> executeAsync)
        {
            var mockExecutionStrategy = new TestExecutionStrategy(Context);

            using (TestStore.CreateTransactionScope())
            {
                Assert.Equal(
                    CoreStrings.ExecutionStrategyExistingTransaction(
                        mockExecutionStrategy.GetType().Name, "DbContext.Database.CreateExecutionStrategy()"),
                    (await Assert.ThrowsAsync <InvalidOperationException>(
                         () => executeAsync(mockExecutionStrategy)))
                    .Message);
            }
        }
Example #2
0
        private async Task ExecuteAsync_throws_for_an_enlisted_transaction(Func <ExecutionStrategy, Task> executeAsync)
        {
            var mockExecutionStrategy = new TestExecutionStrategy(Context);

            using var t = new CommittableTransaction();
            Context.Database.EnlistTransaction(t);

            Assert.Equal(
                CoreStrings.ExecutionStrategyExistingTransaction(
                    mockExecutionStrategy.GetType().Name, "DbContext.Database.CreateExecutionStrategy()"),
                (await Assert.ThrowsAsync <InvalidOperationException>(
                     () => executeAsync(mockExecutionStrategy)))
                .Message);
        }
Example #3
0
        private void Execute_throws_for_an_enlisted_transaction(Action <ExecutionStrategy> execute)
        {
            var mockExecutionStrategy = new TestExecutionStrategy(Context);

            using var t = new CommittableTransaction();
            Context.Database.EnlistTransaction(t);

            Assert.Equal(
                CoreStrings.ExecutionStrategyExistingTransaction(
                    mockExecutionStrategy.GetType().Name, "DbContext.Database.CreateExecutionStrategy()"),
                Assert.Throws <InvalidOperationException>(
                    () => execute(mockExecutionStrategy))
                .Message);
        }
Example #4
0
        private void Execute_throws_for_an_ambient_transaction(Action <ExecutionStrategy> execute)
        {
            var mockExecutionStrategy = new TestExecutionStrategy(Context);

            using (TestStore.CreateTransactionScope())
            {
                Assert.Equal(
                    CoreStrings.ExecutionStrategyExistingTransaction(
                        mockExecutionStrategy.GetType().Name, "DbContext.Database.CreateExecutionStrategy()"),
                    Assert.Throws <InvalidOperationException>(
                        () => execute(mockExecutionStrategy))
                    .Message);
            }
        }
Example #5
0
        private void Execute_throws_for_an_existing_transaction(Action <ExecutionStrategy> executeAsync)
        {
            var context = CreateContext();
            var mockExecutionStrategy = new TestExecutionStrategy(context);

            using (context.Database.BeginTransaction())
            {
                Assert.Equal(
                    CoreStrings.ExecutionStrategyExistingTransaction(mockExecutionStrategy.GetType().Name, "DbContext.Database.CreateExecutionStrategy()"),
                    Assert.Throws <InvalidOperationException>(
                        () =>
                        executeAsync(mockExecutionStrategy)).Message);
            }
        }
Example #6
0
        private async Task ExecuteAsync_retries_until_succesful(Func <ExecutionStrategy, Func <CancellationToken, Task <int> >, Task> executeAsync)
        {
            var executionStrategyMock = new TestExecutionStrategy(
                Context,
                shouldRetryOn: e => e is ArgumentOutOfRangeException,
                getNextDelay: e => TimeSpan.FromTicks(0));

            var executionCount = 0;

            await executeAsync(
                executionStrategyMock, ct =>
            {
                if (executionCount++ < 3)
                {
                    throw new DbUpdateException("", new ArgumentOutOfRangeException());
                }

                return(Task.FromResult(executionCount));
            });

            Assert.Equal(4, executionCount);
        }
Example #7
0
        private void Execute_retries_until_succesful(Action <ExecutionStrategy, Func <int> > execute)
        {
            var executionStrategyMock = new TestExecutionStrategy(
                Context,
                shouldRetryOn: e => e is ArgumentOutOfRangeException,
                getNextDelay: e => TimeSpan.FromTicks(0));

            var executionCount = 0;

            execute(
                executionStrategyMock, () =>
            {
                if (executionCount++ < 3)
                {
                    throw new DbUpdateException("", new ArgumentOutOfRangeException());
                }

                return(executionCount);
            });

            Assert.Equal(4, executionCount);
        }
Example #8
0
        private async Task ExecuteAsync_retries_until_not_retrieable_exception_is_thrown(
            Func <ExecutionStrategy, Func <CancellationToken, Task <int> >, Task> executeAsync)
        {
            var executionStrategyMock = new TestExecutionStrategy(
                Context,
                shouldRetryOn: e => e is ArgumentOutOfRangeException,
                getNextDelay: e => TimeSpan.FromTicks(0));

            var executionCount = 0;

            await Assert.ThrowsAsync <ArgumentNullException>(
                () => executeAsync(
                    executionStrategyMock, ct =>
            {
                if (executionCount++ < 3)
                {
                    throw new ArgumentOutOfRangeException();
                }
                throw new ArgumentNullException();
            }));

            Assert.Equal(4, executionCount);
        }
Example #9
0
        private void Execute_retries_until_not_retrieable_exception_is_thrown(Action <ExecutionStrategy, Func <int> > execute)
        {
            var executionStrategyMock = new TestExecutionStrategy(
                Context,
                shouldRetryOn: e => e is ArgumentOutOfRangeException,
                getNextDelay: e => TimeSpan.FromTicks(0));

            var executionCount = 0;

            Assert.Throws <ArgumentNullException>(
                () =>
                execute(
                    executionStrategyMock, () =>
            {
                if (executionCount++ < 3)
                {
                    throw new ArgumentOutOfRangeException();
                }
                throw new ArgumentNullException();
            }));

            Assert.Equal(4, executionCount);
        }
Example #10
0
        public void RetriesOnFailure_returns_true()
        {
            var mockExecutionStrategy = new TestExecutionStrategy(Context);

            Assert.True(mockExecutionStrategy.RetriesOnFailure);
        }