Exemplo n.º 1
0
    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>();