public void TestRetryStrategyRetriableFailure(CallType callType, int httpErrorCode) { var searchConfig = new SearchConfig("appId", "apiKey"); RetryStrategy retryStrategy = new RetryStrategy(searchConfig); var hosts = retryStrategy.GetTryableHost(callType); Assert.True(hosts.Count(h => h.Up) == 4); var decision = retryStrategy.Decide(hosts.ElementAt(0), new AlgoliaHttpResponse { HttpStatusCode = httpErrorCode }); Assert.True(decision.HasFlag(RetryOutcomeType.Retry)); var updatedHosts = retryStrategy.GetTryableHost(callType); Assert.True(updatedHosts.Count(h => h.Up) == 3); var decisionAfterNetworkError = retryStrategy.Decide(hosts.ElementAt(0), new AlgoliaHttpResponse { IsNetworkError = true }); Assert.True(decisionAfterNetworkError.HasFlag(RetryOutcomeType.Retry)); var updatedHostsAfterNetworkError = retryStrategy.GetTryableHost(callType); Assert.True(updatedHostsAfterNetworkError.Count(h => h.Up) == 2); }
public void TestRetryStrategyMultiThread(CallType callType) { var searchConfig = new SearchConfig("appId", "apiKey"); RetryStrategy retryStrategy = new RetryStrategy(searchConfig); var initialHosts = retryStrategy.GetTryableHost(callType); Assert.True(initialHosts.Count() == 4); Task task1 = Task.Run(() => { var hosts = retryStrategy.GetTryableHost(callType); retryStrategy.Decide(hosts.ElementAt(0), 200, false); Console.WriteLine(Thread.CurrentThread.Name); }); Task task2 = Task.Run(() => { var hosts = retryStrategy.GetTryableHost(callType); retryStrategy.Decide(hosts.ElementAt(0), 500, false); }); Task.WaitAll(task1, task2); var updatedHosts = retryStrategy.GetTryableHost(callType); Assert.True(updatedHosts.Count() == 3); }
public void TestRetryStrategyMultiThread(CallType callType) { var searchConfig = new SearchConfig("appId", "apiKey"); RetryStrategy retryStrategy = new RetryStrategy(searchConfig); var initialHosts = retryStrategy.GetTryableHost(callType); Assert.That(initialHosts, Has.Exactly(4).Items); Task task1 = Task.Run(() => { var hosts = retryStrategy.GetTryableHost(callType); retryStrategy.Decide(hosts.ElementAt(0), new AlgoliaHttpResponse { HttpStatusCode = 200 }); Console.WriteLine(Thread.CurrentThread.Name); }); Task task2 = Task.Run(() => { var hosts = retryStrategy.GetTryableHost(callType); retryStrategy.Decide(hosts.ElementAt(0), new AlgoliaHttpResponse { HttpStatusCode = 500 }); }); Task.WaitAll(task1, task2); var updatedHosts = retryStrategy.GetTryableHost(callType); Assert.That(updatedHosts, Has.Exactly(3).Items); }
public void TestRetryStrategyFailureDecision(CallType callType, int httpErrorCode) { var searchConfig = new SearchConfig("appId", "apiKey"); RetryStrategy retryStrategy = new RetryStrategy(searchConfig); var hosts = retryStrategy.GetTryableHost(callType); var decision = retryStrategy.Decide(hosts.ElementAt(0), httpErrorCode, false); Assert.True(decision.HasFlag(RetryOutcomeType.Failure)); }