Exemple #1
0
        public async Task CopyToAsyncThrowsOnTimeout()
        {
            using (var input = new TestInput())
            {
                var mockTimeoutControl = new Mock <ITimeoutControl>();

                input.FrameContext.TimeoutControl = mockTimeoutControl.Object;

                var body = MessageBody.For(HttpVersion.Http11, new FrameRequestHeaders {
                    HeaderContentLength = "5"
                }, input.Frame);

                // Add some input and read it to start PumpAsync
                input.Add("a");
                Assert.Equal(1, await body.ReadAsync(new ArraySegment <byte>(new byte[1])));

                // Time out on the next read
                mockTimeoutControl
                .Setup(timeoutControl => timeoutControl.TimedOut)
                .Returns(true);

                input.Cancel();

                using (var ms = new MemoryStream())
                {
                    var exception = await Assert.ThrowsAsync <BadHttpRequestException>(() => body.CopyToAsync(ms));

                    Assert.Equal(StatusCodes.Status408RequestTimeout, exception.StatusCode);
                }

                await body.StopAsync();
            }
        }