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); } }
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); }
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); }
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); } }
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); } }
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); }
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); }
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); }
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); }
public void RetriesOnFailure_returns_true() { var mockExecutionStrategy = new TestExecutionStrategy(Context); Assert.True(mockExecutionStrategy.RetriesOnFailure); }