public void TestDefaultRetryPolicyWithRetryableError() { RetryPolicy defaultPolicy = RetryPolicyFactory.GetDefaultSqlConnectionRetryPolicy(); RetryManagerOptions retryManagerOptions = RetryConfiguration.GetConfiguration().GetSection(nameof(RetryManager)).Get <RetryManagerOptions>(buildOptions => buildOptions.BindNonPublicProperties = true); FixedIntervalOptions retryStrategyOptions = retryManagerOptions.RetryStrategy !.GetSection(retryManagerOptions.DefaultSqlConnectionRetryStrategy).Get <FixedIntervalOptions>(buildOptions => buildOptions.BindNonPublicProperties = true); int execCount = 0; try { defaultPolicy.ExecuteAction(() => { execCount++; throw new TimeoutException("Forced Exception"); }); } catch (TimeoutException ex) { Assert.AreEqual("Forced Exception", ex.Message); } Assert.IsNotNull(retryStrategyOptions); Assert.AreEqual(retryStrategyOptions.RetryCount, execCount - 1, "The action was not retried using the expected amount of times"); }
/// <summary> /// Converts options to retry manager. /// </summary> /// <param name="options">The options.</param> /// <param name="getCustomRetryStrategy">The function to get custom retry strategy from options.</param> /// <returns></returns> public static RetryManager ToRetryManager(this RetryManagerOptions options, Func <IConfigurationSection, RetryStrategy>?getCustomRetryStrategy = null) { Argument.NotNull(options, nameof(options)); if (options.RetryStrategy is null || !options.RetryStrategy.Exists()) { throw new ArgumentException(Resources.RetryStrategySectionNotFoundInRetryManager, nameof(options)); } Dictionary <string, string>?defaultStrategies = new(); if (!string.IsNullOrWhiteSpace(options.DefaultSqlCommandRetryStrategy)) { defaultStrategies.Add(RetryManagerSqlExtensions.DefaultStrategyCommandTechnologyName, options.DefaultSqlCommandRetryStrategy); } if (!string.IsNullOrWhiteSpace(options.DefaultSqlConnectionRetryStrategy)) { defaultStrategies.Add(RetryManagerSqlExtensions.DefaultStrategyConnectionTechnologyName, options.DefaultSqlConnectionRetryStrategy); } // TODO. //if (!string.IsNullOrWhiteSpace(options.DefaultAzureServiceBusRetryStrategy)) //{ // defaultStrategies.Add(RetryManagerServiceBusExtensions.DefaultStrategyTechnologyName, options.DefaultAzureServiceBusRetryStrategy); //} //if (!string.IsNullOrWhiteSpace(options.DefaultAzureStorageRetryStrategy)) //{ // defaultStrategies.Add(RetryManagerWindowsAzureStorageExtensions.DefaultStrategyTechnologyName, options.DefaultAzureStorageRetryStrategy); //} //if (!string.IsNullOrWhiteSpace(options.DefaultAzureCachingRetryStrategy)) //{ // defaultStrategies.Add(RetryManagerCachingExtensions.DefaultStrategyTechnologyName, options.DefaultAzureCachingRetryStrategy); //} ICollection <RetryStrategy> retryStrategies = options.RetryStrategy.GetRetryStrategies(getCustomRetryStrategy).Values; return(new RetryManager(retryStrategies, options.DefaultRetryStrategy, defaultStrategies)); }
public void Initialize() => this.retryManagerOptions = RetryConfiguration.GetConfiguration().GetSection(nameof(RetryManager)).Get <RetryManagerOptions>();