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)); }
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))); }
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); }