public void Respects_cancellation_token() { // setup var handler = new ConcurrencyLimitingMessageHandler(0, new TestHandler(0)); var client = new HttpClient(handler) { Timeout = TimeSpan.FromMilliseconds(1) }; // execute Func <Task> exec = async() => await client.GetAsync("http://localhost/bar"); // validate exec.ShouldThrow <OperationCanceledException>(); }
public void Does_not_exceed_concurrency(IEnumerable <Uri> uris, int maxConcurrency) { // setup var testHandler = new TestHandler(maxConcurrency); var handler = new ConcurrencyLimitingMessageHandler(maxConcurrency, testHandler); var client = new HttpClient(handler); // execute var parallelRequests = uris.Select(uri => client.GetAsync(uri)); Func <Task> exec = async() => await Task.WhenAll(parallelRequests); // validate // when validating the maximal seen number of execution, let's allow for some error in case the // test ran a bit slower. Usually it should match though. exec.ShouldNotThrow($"Error while executing with max concurrency of {maxConcurrency}"); testHandler.MaxSeenNumberOfExecutions.Should().BeInRange(maxConcurrency - 2, maxConcurrency); }