Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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));
        }