public void InvalidExecute() { SqlRetryLogicOption option = new SqlRetryLogicOption() { NumberOfTries = 5, DeltaTime = TimeSpan.FromSeconds(10), MinTimeInterval = TimeSpan.Zero, MaxTimeInterval = TimeSpan.FromSeconds(120) }; SqlRetryLogicBaseProvider retryLogicProvider = SqlConfigurableRetryFactory.CreateFixedRetryProvider(option); Assert.Throws <ArgumentNullException>(() => retryLogicProvider.Execute <int>(null, null)); Assert.ThrowsAsync <ArgumentNullException>(() => retryLogicProvider.ExecuteAsync(null, null)); Assert.ThrowsAsync <ArgumentNullException>(() => retryLogicProvider.ExecuteAsync <int>(null, null)); }
private static async Task RetryCommandBeginExecuteAsync(SqlRetryLogicBaseProvider provider, string dbName) { using var cmd = s_generalConnection.CreateCommand(); cmd.CommandText = string.Format(DropDatabaseFormat, dbName); // Execute the BeginExecuteXXX and EndExecuteXXX functions by using Task.Factory.FromAsync(). // Apply the retry logic by using the ExecuteAsync function of the configurable retry logic provider. Console.WriteLine("The first attempt, before getting into the retry logic."); await provider.ExecuteAsync(cmd, () => Task.Factory.FromAsync(cmd.BeginExecuteNonQuery(), cmd.EndExecuteNonQuery)); }
public async void RetryExecuteAsyncCancel(string cnnString, SqlRetryLogicBaseProvider provider) { int numberOfTries = provider.RetryLogic.NumberOfTries; int cancelAfterRetries = numberOfTries - 1; int currentRetries = 0; provider.Retrying += (s, e) => currentRetries = e.RetryCount; string query = "SELECT bad command"; using (SqlConnection cnn = new SqlConnection(cnnString)) using (SqlCommand cmd = CreateCommand(cnn, provider, cancelAfterRetries)) { cmd.CommandText = query; var ex = await Assert.ThrowsAsync <AggregateException>(() => cmd.ExecuteScalarAsync()); Assert.Equal(cancelAfterRetries, currentRetries); Assert.Equal(cancelAfterRetries, ex.InnerExceptions.Count); Assert.Contains(string.Format(_cancelErrMsgPattern, currentRetries), ex.Message); ex = await Assert.ThrowsAsync <AggregateException>(() => cmd.ExecuteReaderAsync()); Assert.Equal(cancelAfterRetries, currentRetries); Assert.Equal(cancelAfterRetries, ex.InnerExceptions.Count); Assert.Contains(string.Format(_cancelErrMsgPattern, currentRetries), ex.Message); ex = await Assert.ThrowsAsync <AggregateException>(() => cmd.ExecuteReaderAsync(CommandBehavior.Default)); Assert.Equal(cancelAfterRetries, currentRetries); Assert.Equal(cancelAfterRetries, ex.InnerExceptions.Count); Assert.Contains(string.Format(_cancelErrMsgPattern, currentRetries), ex.Message); ex = await Assert.ThrowsAsync <AggregateException>(() => cmd.ExecuteReaderAsync(CommandBehavior.Default, CancellationToken.None)); Assert.Equal(cancelAfterRetries, currentRetries); Assert.Equal(cancelAfterRetries, ex.InnerExceptions.Count); Assert.Contains(string.Format(_cancelErrMsgPattern, currentRetries), ex.Message); ex = await Assert.ThrowsAsync <AggregateException>(() => provider.ExecuteAsync(cmd, () => Task.Factory.FromAsync(cmd.BeginExecuteReader(), cmd.EndExecuteReader))); Assert.Equal(cancelAfterRetries, currentRetries); Assert.Equal(cancelAfterRetries, ex.InnerExceptions.Count); Assert.Contains(string.Format(_cancelErrMsgPattern, currentRetries), ex.Message); ex = await Assert.ThrowsAsync <AggregateException>(() => cmd.ExecuteNonQueryAsync()); Assert.Equal(cancelAfterRetries, currentRetries); Assert.Equal(cancelAfterRetries, ex.InnerExceptions.Count); Assert.Contains(string.Format(_cancelErrMsgPattern, currentRetries), ex.Message); ex = await Assert.ThrowsAsync <AggregateException>(() => provider.ExecuteAsync(cmd, () => Task.Factory.FromAsync(cmd.BeginExecuteNonQuery(), cmd.EndExecuteNonQuery))); Assert.Equal(cancelAfterRetries, currentRetries); Assert.Equal(cancelAfterRetries, ex.InnerExceptions.Count); Assert.Contains(string.Format(_cancelErrMsgPattern, currentRetries), ex.Message); cmd.CommandText = query + " FOR XML AUTO"; ex = await Assert.ThrowsAsync <AggregateException>(() => cmd.ExecuteXmlReaderAsync()); Assert.Equal(cancelAfterRetries, currentRetries); Assert.Equal(cancelAfterRetries, ex.InnerExceptions.Count); Assert.Contains(string.Format(_cancelErrMsgPattern, currentRetries), ex.Message); ex = await Assert.ThrowsAsync <AggregateException>(() => provider.ExecuteAsync(cmd, () => Task.Factory.FromAsync(cmd.BeginExecuteXmlReader(), cmd.EndExecuteXmlReader))); Assert.Equal(cancelAfterRetries, currentRetries); Assert.Equal(cancelAfterRetries, ex.InnerExceptions.Count); Assert.Contains(string.Format(_cancelErrMsgPattern, currentRetries), ex.Message); } }