示例#1
0
        public void Ctor_PassBackOffStrategy_CurrentBackOffStrategyShouldBeSet()
        {
            const RetryHandler.BackOffStrategy backOffStrategy = RetryHandler.BackOffStrategy.Linear;

            var retryHandler = new RetryHandler(3, 2, 10, backOffStrategy)
            {
                BackOffFunc = seconds => Task.FromResult(0)
            };

            Assert.That(retryHandler.CurrentBackOffStrategy, Is.EqualTo(backOffStrategy));
        }
示例#2
0
        public void Ctor_ParameterLess_SetDefaultCorrectly()
        {
            const int    defaultMaxRetries              = 3;
            const double defaultWaitToRetryInSeconds    = 1.44;
            const int    defaultMaxWaitToRetryInSeconds = 10;
            const RetryHandler.BackOffStrategy defaultBackOffStrategy = RetryHandler.BackOffStrategy.Exponential;

            var retryHandler = new RetryHandler {
                BackOffFunc = seconds => Task.FromResult(0)
            };

            Assert.That(retryHandler.MaxRetries, Is.EqualTo(defaultMaxRetries));
            Assert.That(retryHandler.WaitToRetryInSeconds, Is.EqualTo(defaultWaitToRetryInSeconds));
            Assert.That(retryHandler.MaxWaitToRetryInSeconds, Is.EqualTo(defaultMaxWaitToRetryInSeconds));
            Assert.That(retryHandler.CurrentBackOffStrategy, Is.EqualTo(defaultBackOffStrategy));
        }
        public void UseRetryHandler_WithParameters_CorrectlyAddHandlers()
        {
            const int maxRetries              = 6;
            const int waitToRetryInSeconds    = 5;
            const int maxWaitToRetryInSeconds = 30;
            const RetryHandler.BackOffStrategy backOffStrategy = RetryHandler.BackOffStrategy.Linear;

            var config = new Config()
                         .UseRetryHandler(maxRetries: maxRetries, waitToRetryInSeconds: waitToRetryInSeconds, maxWaitToRetryInSeconds: maxWaitToRetryInSeconds, backOffStrategy: backOffStrategy);
            var retryHandler = config.Pipeline.ElementAt(1) as RetryHandler;

            Assert.That(config.Pipeline.Count(), Is.EqualTo(2));
            Assert.That(config.Pipeline.ElementAt(1), Is.InstanceOf <RetryHandler>());
            Assert.That(retryHandler?.MaxRetries, Is.EqualTo(maxRetries));
            Assert.That(retryHandler?.WaitToRetryInSeconds, Is.EqualTo(waitToRetryInSeconds));
            Assert.That(retryHandler?.MaxWaitToRetryInSeconds, Is.EqualTo(maxWaitToRetryInSeconds));
            Assert.That(retryHandler?.CurrentBackOffStrategy, Is.EqualTo(backOffStrategy));
        }
        public void UseRetryHandler_ParameterLess_CorrectlyAddHandlers()
        {
            const int    defaultMaxRetries              = 3;
            const double defaultWaitToRetryInSeconds    = 1.44;
            const int    defaultMaxWaitToRetryInSeconds = 10;
            const RetryHandler.BackOffStrategy defaultBackOffStrategy = RetryHandler.BackOffStrategy.Exponential;

            var config = new Config()
                         .UseRetryHandler();
            var retryHandler = config.Pipeline.ElementAt(1) as RetryHandler;

            Assert.That(config.Pipeline.Count(), Is.EqualTo(2));
            Assert.That(config.Pipeline.ElementAt(1), Is.InstanceOf <RetryHandler>());
            Assert.That(retryHandler?.MaxRetries, Is.EqualTo(defaultMaxRetries));
            Assert.That(retryHandler?.WaitToRetryInSeconds, Is.EqualTo(defaultWaitToRetryInSeconds));
            Assert.That(retryHandler?.MaxWaitToRetryInSeconds, Is.EqualTo(defaultMaxWaitToRetryInSeconds));
            Assert.That(retryHandler?.CurrentBackOffStrategy, Is.EqualTo(defaultBackOffStrategy));
        }
        public void UseRetryHandler_ParameterLess_CorrectlyAddHandlers()
        {
            const int    defaultMaxRetries              = 3;
            const double defaultWaitToRetryInSeconds    = 1.44;
            const int    defaultMaxWaitToRetryInSeconds = 10;
            const RetryHandler.BackOffStrategy defaultBackOffStrategy = RetryHandler.BackOffStrategy.Exponential;

            var services = new ServiceCollection();

            services.AddRestClient(Name, "http://dalsoft.co.uk")
            .UseRetryHandler();

            var httpClientFactoryOptions = services.Where(_ => _.ServiceType == typeof(IConfigureOptions <HttpClientFactoryOptions>))
                                           .Select(_ => _.ImplementationInstance).Cast <ConfigureNamedOptions <HttpClientFactoryOptions> >().ToList();

            Assert.That(httpClientFactoryOptions.Count, Is.EqualTo(2)); //DefaultJsonHandler & UseRetryHandler

            //TODO: How to get the underline handler from the IHttpClientFactory
            //Assert.That(retryHandler?.MaxRetries, Is.EqualTo(defaultMaxRetries));
            //Assert.That(retryHandler?.WaitToRetryInSeconds, Is.EqualTo(defaultWaitToRetryInSeconds));
            //Assert.That(retryHandler?.MaxWaitToRetryInSeconds, Is.EqualTo(defaultMaxWaitToRetryInSeconds));
            //Assert.That(retryHandler?.CurrentBackOffStrategy, Is.EqualTo(defaultBackOffStrategy));
        }
 public static Config UseRetryHandler(this Config config, int maxRetries, double waitToRetryInSeconds, double maxWaitToRetryInSeconds, RetryHandler.BackOffStrategy backOffStrategy)
 {
     return(UseHandler(config, new RetryHandler(maxRetries, waitToRetryInSeconds, maxWaitToRetryInSeconds, backOffStrategy)));
 }
示例#7
0
        public static RestClientFactoryConfig UseRetryHandler(this RestClientFactoryConfig config, int maxRetries, double waitToRetryInSeconds, double maxWaitToRetryInSeconds, RetryHandler.BackOffStrategy backOffStrategy)
        {
            DelegatingHandler HandlerFactory() => new RetryHandler(maxRetries, waitToRetryInSeconds, maxWaitToRetryInSeconds, backOffStrategy);

            config.HttpClientBuilder.AddHttpMessageHandler(HandlerFactory);

            return(config);
        }