public async Task ProcessRequest_HostIsOverloaded_CustomRejectAction() { bool rejectOverrideCalled = false; var config = new HttpConfiguration(); Func <bool> rejectAllRequests = () => { return(true); }; Func <HttpRequestMessage, HttpResponseMessage> rejectRequest = (req) => { rejectOverrideCalled = true; return(new HttpResponseMessage(HttpStatusCode.ServiceUnavailable)); }; Func <HttpRequestMessage, CancellationToken, Task <HttpResponseMessage> > process = (req, ct) => { return(Task.FromResult(new HttpResponseMessage(HttpStatusCode.OK))); }; var manager = new TestHttpRequestManager(config, _traceWriter, rejectAllRequests, rejectRequest); var request = new HttpRequestMessage(); var response = await manager.ProcessRequestAsync(request, process, CancellationToken.None); Assert.True(rejectOverrideCalled); Assert.Equal(HttpStatusCode.ServiceUnavailable, response.StatusCode); }
public async Task ProcessRequest_HostIsOverloaded_RequestsAreRejected() { bool rejectRequests = false; var config = new HttpConfiguration(); Func <bool> rejectAllRequests = () => { return(rejectRequests); }; Func <HttpRequestMessage, CancellationToken, Task <HttpResponseMessage> > process = async(req, ct) => { await Task.Delay(100); return(new HttpResponseMessage(HttpStatusCode.OK)); }; var manager = new TestHttpRequestManager(config, _traceWriter, rejectAllRequests); var tasks = new List <Task <HttpResponseMessage> >(); for (int i = 0; i < 10; i++) { if (i == 7) { rejectRequests = true; } var request = new HttpRequestMessage(); tasks.Add(manager.ProcessRequestAsync(request, process, CancellationToken.None)); } await Task.WhenAll(tasks); Assert.Equal(7, tasks.Count(p => p.Result.StatusCode == HttpStatusCode.OK)); Assert.Equal(3, tasks.Count(p => p.Result.StatusCode == (HttpStatusCode)429)); }