Пример #1
0
        public void WriteStreamedErrorResponseAsync_Aborts_When_Formatter_Write_Faults()
        {
            // Arrange
            TaskCompletionSource <object> tcs = new TaskCompletionSource <object>();

            tcs.TrySetException(new NotSupportedException("Expected error"));

            Mock <JsonMediaTypeFormatter> formatterMock = new Mock <JsonMediaTypeFormatter>()
            {
                CallBase = true
            };

            formatterMock.Setup(m => m.WriteToStreamAsync(It.IsAny <Type>(),
                                                          It.IsAny <object>(),
                                                          It.IsAny <Stream>(),
                                                          It.IsAny <HttpContent>(),
                                                          It.IsAny <TransportContext>())).Returns(tcs.Task);

            MemoryStream memoryStream = new MemoryStream();

            Mock <HttpResponseBase> responseBaseMock = CreateMockHttpResponseBaseForResponse(memoryStream);

            responseBaseMock.Setup(m => m.Close()).Verifiable();
            HttpResponseBase       responseBase = responseBaseMock.Object;
            Mock <HttpContextBase> contextMock  = new Mock <HttpContextBase>()
            {
                DefaultValue = DefaultValue.Mock
            };

            contextMock.SetupGet(m => m.Response).Returns(responseBase);

            HttpRequestMessage request = new HttpRequestMessage();

            request.Properties.Add(HttpPropertyKeys.IsLocalKey, new Lazy <bool>(() => true));
            HttpResponseMessage response = new HttpResponseMessage()
            {
                RequestMessage = request
            };

            response.Content = new ObjectContent <string>("hello", formatterMock.Object);

            // Act
            Task task = HttpControllerHandler.WriteStreamedResponseContentAsync(responseBase, response.Content);

            task.Wait();

            // Assert
            responseBaseMock.Verify();
        }
Пример #2
0
        public void WriteStreamedErrorResponseAsync_Aborts_When_Formatter_Write_Throws_Immediately()
        {
            // Arrange
            Mock <JsonMediaTypeFormatter> formatterMock = new Mock <JsonMediaTypeFormatter>()
            {
                CallBase = true
            };

            formatterMock.Setup(m => m.WriteToStreamAsync(It.IsAny <Type>(),
                                                          It.IsAny <object>(),
                                                          It.IsAny <Stream>(),
                                                          It.IsAny <HttpContent>(),
                                                          It.IsAny <TransportContext>())).Throws(new NotSupportedException("Expected error"));

            MemoryStream memoryStream = new MemoryStream();

            Mock <HttpRequestBase> requestBaseMock = new Mock <HttpRequestBase>();

            requestBaseMock.Setup(m => m.Abort()).Verifiable();
            HttpRequestBase        requestBase  = requestBaseMock.Object;
            HttpResponseBase       responseBase = CreateMockHttpResponseBaseForResponse(memoryStream).Object;
            Mock <HttpContextBase> contextMock  = new Mock <HttpContextBase>()
            {
                DefaultValue = DefaultValue.Mock
            };

            contextMock.SetupGet(m => m.Response).Returns(responseBase);
            HttpContextBase contextBase = CreateStubContext(requestBase, responseBase);

            HttpRequestMessage request = new HttpRequestMessage();

            request.SetIsLocal(new Lazy <bool>(() => true));
            HttpResponseMessage response = new HttpResponseMessage()
            {
                RequestMessage = request
            };

            response.Content = new ObjectContent <string>("hello", formatterMock.Object);

            // Act
            Task task = HttpControllerHandler.WriteStreamedResponseContentAsync(contextBase, response.Content);

            task.Wait();

            // Assert
            requestBaseMock.Verify();
        }